Сборка, добавить функцию

У меня проблема с кодом ассемблера. Я хочу добавить пользовательский ввод двух чисел после замены номеров, но когда я добавляю эти числа, функция добавления не работает должным образом. Спасибо

Это код

.model small 
.stack 100h
.data
        msg1 db 'Enter the number1:$'
        msg2 db 'Enter the number2:$'
        msg3 db 'After swap numbers are:$'
        msg4 db 'Sum is:$'
        num1 db ?
        num2 db ?
        sum db ?
        diff db ?
.code
MAIN PROC
        mov ax,@data
        mov ds,ax

        mov ah,09h         ;display first msg
        mov dx,offset msg1
        mov ah,01h         ;taking input
        int 21h
        mov num1,al


        mov ah,09h         ;display second msg
        mov dx,offset msg2
        int 21h
        mov ah,01h         ;taking input
        int 21h
        mov num2,al

        mov bl,num1
        mov cl,num2
        mov num1,cl
        mov num2,bl

        mov ah,09h         ;display third msg
        mov dx,offset msg3
        int 21h
        mov ah,02h
        mov dl,num1
        int 21h
        mov ah,02h
        mov dl,num2
        int 21h

        mov bl,num1
        add bl,num2
        mov sum,bl

        mov ah,09h       ;display fourth msg
        mov dx,offset msg4
        int 21h
        mov ah,02h
        mov dl,sum
        int 21h

        mov ah,4ch
        int 21h
MAIN ENDP 

END MAIN

1 ответ

Ваша программа вводит два однозначных числа, и, следовательно, сумма может достигать 18. Ваш код не имеет отношения к этой возможности, но это может быть сделано намеренно.

Когда вы взяли ввод, вы (надеюсь) получили символы ASCII в диапазоне от 48 до 57 (они представляют цифры от 0 до 9). Перед назначением этих значений вашим переменным num1 и num2 вы должны были избавиться от характера символов этих значений, вычитая 48.

mov ah, 09h         ;display first msg
mov dx, offset msg1
mov ah, 01h         ;taking input
int 21h
sub al, 48
mov num1, al
mov ah, 09h         ;display second msg
mov dx, offset msg2
int 21h
mov ah, 01h         ;taking input
int 21h
sub al, 48
mov num2, al

Таким образом, ваша сумма позже будет истинной суммой обоих чисел.

Когда вы готовы вывести какие-либо результаты, вы должны превратить значения в их текстовое представление. Просто добавьте 48.

mov ah, 09h         ;display third msg
mov dx, offset msg3
int 21h
mov ah, 02h
mov dl, num1
add dl, 48
int 21h
mov ah, 02h
mov dl, num2
add dl, 48
int 21h

mov ah, 09h         ;display fourth msg
mov dx, offset msg4
int 21h
mov ah, 02h
mov dl, sum
add dl, 48
int 21h
Другие вопросы по тегам