Напишите инструкции для загрузки 26 (десятичных) в регистр cx - PullRequest
1 голос
/ 19 мая 2019

У меня проблема с загрузкой 26 и других двухзначных десятичных чисел в регистры.

Я знаю, что «0» имеет значение ASCII 48, и мне нужно добавить 48 к любому числу от 0 до 9, чтобы получить значения ASCII, но я не знаю, как загрузить двузначные числа.

.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 Ответ

2 голосов
/ 19 мая 2019

загрузка 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
...