2009-10-28 9 views
1

J'ai un nombre stocké dans dl, et j'ai besoin de cela pour travailler avec des nombres jusqu'à trois chiffres? Voici le code de travail pour les chiffres 0-9.DOS assemblage Simple math

WriteNumber: 
;; print out number in dl 
push ax 
push dx 
add dl,"0" 
mov ah,02h ; printing one char 
int 21h 
pop dx 
pop ax 
ret 

Par exemple, pour deux chiffres. Je pourrais prendre dl/10. Ensuite, imprimez le résultat et le reste en fonction des différents caractères. Mais j'ai une erreur, car le numéro doit être dans le registre AX pour la DIV.

que je dois faire ceci:

mov ax, dl

Mais ça ne marchera pas?

Répondre

1

Je ne pense pas que vous serez en mesure de faire

mov ax,dl

depuis hache et dl sont de tailles différentes. Vous devriez être en mesure de le faire

mov ax, dx

ou de GJ:

movzx ax, dl

Et puis juste référence dl et al si vous voulez juste le dernier octet.

+0

Comment puis-je faire quand INT21 pour la lecture de caractères met dans un registre 8 bits et DIV ont seulement 16 bits? – Algific

+0

Eh bien, le registre est en fait 32 bits, mais vous pouvez simplement en référencer des morceaux en utilisant l'ax, al, ah (par opposition à l'ensemble eax). Donc, ça devrait aller si vous remplissez le registre ax avec votre valeur 8 bits. – mrduclaw

+0

Ahhhh. Je vous remercie. – Algific

0

que je dois faire ceci:

mov ax, dl

Mais ça ne marchera pas?

mov fonctionnera si les registres ont la même taille, à la fois 8 bits ou 16 bits ou 32 bits.

Exemple:

mov EAX, EDX 
; or 
mov AX, DX 
; or 
mov AL, DL