Ce code est tiré de l'un des exemples de mon professeur. Disons que j'ai la variable que je veux imprimer dans ma DL.Lors de l'assemblage, pourquoi un nombre hexadécimal ne peut-il pas être imprimé sans décalage?
DISPLAY_HEX PROC NEAR
MOV BL,DL
MOV BH,0
MOV CL,4
SHL BX,CL
MOV DL,BH
CALL ONE_DIGIT
MOV CL,4
SHR BL,CL
MOV DL,BL
CALL ONE_DIGIT
RET
DISPLAY_HEX ENDP
ONE_DIGIT PROC NEAR
CMP DL,9
JA LETTER
ADD DL,48
JMP NEXT
LETTER: ADD DL, 'A'-10
NEXT: MOV AH,02H
INT 21H
END: RET
ONE_DIGIT ENDP
Pourquoi les changements? Ne peut-il être imprimé comme une décimale? En outre, pourquoi utilise-t-on à la fois SHR et SHL ici? Je suis un débutant dans l'assemblage alors s'il vous plaît essayez d'expliquer simplement.
Vous ne pouvez pas imprimer directement un nombre décimal. Vous devez convertir en texte. Il se trouve que chaque 4 bits est un nombre hexadécimal donc vous pouvez utiliser le décalage au lieu de la division que vous auriez normalement. D'un coup d'œil le code est faux, car il imprime le même chiffre deux fois. Mais je n'avais pas encore mon café;) – Jester
Ah d'accord, ça imprime bien les deux chiffres, le 'shr' est de défaire le' shl' donc les 4 bits bas finissent là où ils ont commencé. – Jester
Merci bouffon, je pense que je l'ai eu. –