Je ne comprends pas comment utiliser Interrompre le 21, AH=0ah
Mes informations proviennent de ici. La consigne demande pour un programme qui lit dans plus de 20 caractères, convertit les caractères en majuscules, puis imprime la saisie en majuscules.
Je n'ai aucune idée de comment accéder à l'entrée de int21/AH=0ah. Je ne peux vraiment pas demander plus de précision à la question, à moins que je comprends ce qui est lié ci-dessus. Quelqu'un peut m'expliquer? Aussi, je suis en utilisant TASM si cela fait une différence. Aussi, je vais tester cela sur freedos.
UPDATE1:
Bien, grâce à votre aide, je crois que je comprends comment l'interruption doit être mis en place et se comporte.
De l'installation:
J'ai pour désigner un ds:dx où je veux ce tampon d'exister
Je dois mettre ds:dx à 20 (ce qui définit le nombre maximum de caractères que la mémoire tampon peut contenir)
Je dois mettre ds:dx+1 à 0 (qui, je pense, d'une certaine manière de définir un nombre minimum de caractères à lire)
Fait appel int21/AH=0ah, qui va aller à la ds:dx et interpréter le preset octets. Il arrêtera le programme pendant qu'il attend d'entrée
int21/AH=0ah se remplit de ds:dx+2+n avec mon entrée (où n est le nombre de caractères en entrée, y compris '\r')
Ma question est maintenant, comment dois-je faire. J'ai juste regardé à travers le x86 Assemblée de Référence du Langage de nouveau, mais n'ont pas été en mesure de trouver quelque chose d'utile encore.
Code que j'ai obtenu jusqu'à présent
assume cs:code,ds:code
code segment
start:
mov ax,code ;moves code segment into reg AX
mov ds,ax ;makes ds point to code segment
mov ah,0ah
int 21h
mov ax,1234h ;breakpoint
mov ah,9
mov dx,offset message
int 21h
endNow:
;;;;;;;;;;ends program;;;;;;;;;;
mov ah,0 ;terminate program
int 21h ;program ends
message db 'Hello world!!!',13,10,'$'
code ends
end start
OriginalL'auteur | 2012-11-03
Vous devez vous connecter pour publier un commentaire.
Que le DOS de la fonction récupère un tampon avec la saisie de l'utilisateur. Voir ce table. Il semble que le programme est à l'aide de cet appel à suspendre l'exécution d'attente pour l'utilisateur de reprendre le programme.
Edit: je viens de relire la question. Je pensais que vous étiez seulement en demandant à ce que l'appel de la fonction n'a dans votre source. Si vous voulez lire d'entrée de plus de 20 caractères, vous avez d'abord besoin de mémoire. Ajouter quelque chose comme ceci:
Puis remplissage de la mémoire tampon:
Comment convertir les majuscules sont laissés au lecteur.
Aussi, je viens de réaliser. La table de décalage signifie que le caractère réel de données commence à deux bits ou d'octets (probablement en octets) de l'endroit où le retour des données dans la mémoire. Pensées?
Oui, l'entrée effective commence à DS:DX + 2. Toutefois, ce fichier ignore que l'entrée et n'utilise que la fonction pour suspendre l'exécution.
Oui, ma question initiale était de savoir comment l'interrompre comportés parce que si je me suis juste demandé comment la mettre en œuvre, je n'ai aucune idée de ce que tu viens de poster signifiait. Je vous remercie beaucoup pour l'aide.
ne devrait-elle pas être
mov dx, offset buffer
au lieu demov dx, offset bufferSize
? et pourquoi affiche-t-il la valeur d'ordures lors des 2 premiers octets ? est-ce à dire si j'ai à lire à 9 caractères ( y compris le terminateur de chaîne ), j'aurais du ajouter 2 caractères plus ( les 2 premiers ordures valeurs ) 9 + 2 = 11 octets ?OriginalL'auteur Michael McGuire
Que la description dit que vous mettre l'adresse d'un tampon dans
ds:dx
avant l'appel de l'interruption. L'interruption doit ensuite remplir la mémoire tampon avec les personnages qu'il lit.Avant l'appel de l'interruption, le premier octet de la mémoire tampon est le nombre de caractères de la mémoire tampon peut contenir, ou 20, dans votre cas. Je ne comprends pas la description de la deuxième octet de la mémoire tampon (sur l'entrée de l'interruption), je voudrais donc mettre zéro. Sur le retour, cet octet indique le nombre de caractères d'entrée ont été lu et placé dans la mémoire tampon.
moot question, donnez-moi une minute pour penser à la ci-dessus.
(fixation de faute de frappe) en quelque Sorte.
ds
est le registre de segment;dx
est le décalage. Et vous n'avez pas "trouver" la mémoire tampon; vous donner de la mémoire tampon par la mise ends
etdx
pour pointer vers elle avant de recourir à l'interruption. (Vous devez également définir les deux premiers octets de la mémoire tampon avant d'invoquer l'interrompre. La mémoire tampon -- et ses deux premiers octets -- sont entrées à l'interrompre.) – Nemo 11 minutes agoOriginalL'auteur Nemo
OriginalL'auteur free