写指令将26(十进制)加载到寄存器cx

时间:2019-05-19 12:03:26

标签: assembly emu8086

我在将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

...

1 个答案:

答案 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