À quoi sert mov ah, 10
dans int 21h
Nous utilisons principalement comme mov ah, 0a
pour l'entrée de chaîne mais pourquoi mov ah, 10?
nter db 'enter you name:$' nam db 50,0,50 dup('$') ;num is 50, num + 1 is 0, num + 2 is 50 lfcr db 10,13,'$' ;line feed carrier return/next line carriage return .code main proc mov ax,@data ;define mov ds,ax mov ah,9 lea dx,nter ;output nter int 21h mov ah,10 lea dx,nam int 21h
3 Réponses :
Volé de manière flagrante dans cette table d'interruptions DOS . p>
Lire l'entrée tamponnée
DS: DX
= tampon
octet [ds: DX]
= longueur du tampon
byte [ds: DX + 1]
(input) = nombre de caractères dans le tampon pouvant être
a rappelé
(output) = nombre de caractères dans le tampon
Le tampon commence à DS: DX + 2
10
est identique à 0Ah
Ce n'est pas ce que cette référence nous dit! Le nombre de caractères dans la mémoire tampon à la sortie est indiqué en haut du champ indiquant le nombre de caractères préchargés. Les caractères saisis commencent à DS: DX + 2
.
@SepRoland: Je ne sais pas comment j'ai commis cette erreur.
Ne vous inquiétez pas, cela nous arrive à tous.
La plupart du temps, nous utilisons comme mov ah, 0a pour l'entrée de chaîne mais pourquoi mov ah, 10?
Vous pouvez utiliser décimal si vous le souhaitez; mais la plupart (tous?) du matériel de référence pour les fonctions DOS montrent les valeurs (pour les numéros de fonction, les numéros d'interruption et les adresses) en hexadécimal et les autres programmeurs sont plus susceptibles de reconnaître les valeurs hexadécimales; donc utiliser décimal rendra la lecture plus difficile.
L'autre alternative est d'utiliser le pré-processeur - par exemple peut-être " #define BUFFERED_INPUT_FUNCTION_NUMBER 0x0A
" et " mov ah, BUFFERED_INPUT_FUNCTION_NUMBER
". Pour les personnes qui ne sont pas très familières avec DOS, cela facilite la lecture (et / ou évite d'avoir besoin d'un commentaire); mais pour les gens très familiers avec DOS, cela aggrave un peu les choses (pour vérifier si le bon numéro est réellement utilisé, ils doivent vérifier 2 endroits différents au lieu d'un).
0a
est un nombre hexadécimal, représentation 10
en nombre décimal.
Si vous connaissez la syntaxe de l'assembleur nasm
, 0a
est \ n
ou une nouvelle ligne.
0a
est une erreur de syntaxe dans NASM. Peut-être que vous (et l'OP) vouliez dire 0ah
. Et BTW, le caractère ASCII (nouvelle ligne) représenté par le nombre n'est pas du tout pertinent, c'est juste une coïncidence si ce petit nombre se trouve être le même que le code ASCII pour la nouvelle ligne. Mais oui dans la syntaxe NASM, vous pouvez écrire 10
comme 10
, 0Ah
, 0xa
ou `\ n`
, ou en binaire ou octal ou autre
0Ah
(hex) est10
décimal.La valeur 10 décimal est identique à 0a hexadécimal. Deux manières d'exprimer le même nombre