1
votes

Quelle est l'utilisation de Mov ah, 10 en int 21h

À 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


2 commentaires

0Ah (hex) est 10 décimal.


La valeur 10 décimal est identique à 0a hexadécimal. Deux manières d'exprimer le même nombre


3 Réponses :


1
votes

Volé de manière flagrante dans cette table d'interruptions DOS .

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


3 commentaires

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.



3
votes

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).


0 commentaires

-1
votes

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.


1 commentaires

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