4 votes

Comment saisir un numéro d'utilisateur de plus d'un chiffre dans l'assemblage ?

Je dois trouver une interruption qui peut recevoir d'un utilisateur un nombre avec plus d'un chiffre. ;code

mov [0],0
mov si,0
lop:    
    mov ah,1
    int 21h
    cmp al,'q'
    je finishedInput
    xor ah,ah 
    add [word ptr si], ax
    jmp lop

finishedInput:

J'ai déjà essayé de faire une boucle de fin de moins qui utilise à chaque fois la fonction

mov ah,1 
int 21h 

jusqu'à ce que l'utilisateur appuie sur 'q' et que la boucle sans fin s'arrête. Cependant, je suis presque convaincu d'avoir vu un code qui fait la même chose avec une interruption à la place.

Je veux arrêter d'utiliser ce bloc et utiliser une interruption courte qui fait mieux le travail.

5voto

Govind Parmar Points 769

Dans la plupart des cas, il est beaucoup plus facile d'obtenir une entrée sous forme de chaîne de caractères, puis de la convertir en un nombre entier. int 21h/ah=0ah peut lire une entrée en mémoire tampon dans une chaîne de caractères pointée par DS:DX .

Une fois que vous avez obtenu cela, vous pouvez prendre cette chaîne et la convertir en un nombre entier. Cela ressemble à un problème de devoir, donc plutôt que de vous donner du code, voici un algorithme de haut niveau pour convertir une chaîne de caractères ASCII contenant un nombre en base 10 en un véritable nombre entier (pseudocode) :

accum = 0
i = 0
while(string[i] != '\r')
    accum *= 10
    accum += (string[i] - '0')
    i++

Un code robuste vérifierait également les débordements et les caractères non valides. Vous avez de la chance, car en ASCII, les caractères représentant les nombres ('0'...'9') sont stockés consécutivement, et le x86 dispose d'une fonction FLAGS registre que vous pouvez vérifier en cas de débordement.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X