Сборка, добавить функцию
У меня проблема с кодом ассемблера. Я хочу добавить пользовательский ввод двух чисел после замены номеров, но когда я добавляю эти числа, функция добавления не работает должным образом. Спасибо
Это код
.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