我在将26和其他两位数的十进制数加载到寄存器时遇到问题。
我知道'0'的ASCII值为48,我需要在0到9之间的任何数字上加上48以获取ASCII值,但是我不知道如何加载2位数字。 >
.model small
.data
.code
main proc
mov dl, 2
add dl, 48 ; this makes the character ascii
;code for printing a character
mov ah, 2h
int 21h ; prints value of dl
endp
end main
...
答案 0 :(得分:2)
将26位和其他两位数的十进制数字加载到寄存器中
这是容易的部分。所有2位十进制数字都在[10,99]范围内。
要将这些内容加载到CX
之类的寄存器中,只需编写
mov cx, 10
mov cx, 11
...
您的程序正在做的事情完全不同。您正在尝试显示这样的两位数十进制数字。这需要将数字分解为2个字符。您可以通过将数字除以10来实现。商是要打印的第一个数字,其余是要打印的第二个数字。
mov ax, cx ; Division exclusively works with AX
mov dl, 10 ; Divisor
div dl ; AX / DL -> Quotient in AL, Remainder in AH
add ax, 3030h ; Make both ASCII at the same time
mov dx, ax ; DL holds "quotient"-character, DH holds "remainder"-character
mov ah, 02h ; DOS.DisplayCharacter
int 21h
mov dl, dh ; Bring "remainder"-character in DL
mov ah, 02h ; DOS.DisplayCharacter
int 21h