Я ищу, как добавить 3 номера с 2 цифрами - PullRequest
0 голосов
/ 20 февраля 2019

Я пытаюсь сложить 3 числа с 2 цифрами.Я делаю программу, которая запрашивает 3 числа, но я не знаю, как их добавить.
Пример:

99 + 99 + 99 = 270 (Пример)

Это моя программа, в которой я спрашиваю цифры, но сумма неверна.Как я могу это исправить?

.model small
.stack 64
.data
.code
M1 DB 10,13,' First number : $'
M2 DB 10,13,' Second number : $' 
M3 DB 10,13,' Third number : $'
M4 DB 10,13,' Result : $'     
b1 db 0  
b2 db 0 
b3 db 0
b4 db 0
.startup
inicio:

;------ask first number-------
mov AH, 9
lea DX, M1
int 21h
mov ah,01h
int 21h 
sub al,30h 
mov b1,al
mov ah,01h
int 21h  
sub al,30h 
mov b2, al


;------ask second number-------
mov AH, 9
lea DX, M2
int 21h
mov ah,01h
int 21h 
sub al,30h 
mov b3,al
mov ah,01h
int 21h  
sub al,30h 
mov b4, al



;------Ascii adjustment for the sum------
aaa
mov bx,ax
sub bh,01h

;------ask third number------------

mov AH, 9
lea DX, M2
int 21h
mov ah,01h
int 21h
sub al,30h
mov bl,al
mov ah,01h
int 21h
sub al,30h
add al,bl
mov b1, bh
add al, bl 
;mov ah, 02h
;mov dl, bl 
;int 21h 


;------Ascii adjustment for the sum------
aaa
mov bx,ax
sub bh,01h  
add bh, b1  
or bx,3030h
;------High part sum printing-----------

mov ah, 9
lea dx, m4
int 21h
mov ah,02h
mov dl,bh
int 21h

;-----low print-----------

mov ah,02h
mov dl,bl
int 21h

;exit:
;mov ah,04ch
;int 21h

.exit
end

1 Ответ

0 голосов
/ 21 февраля 2019

Сначала введите числа

Вместо сохранения отдельных цифр 1-го числа в b1 и b2 , вы должны объединить их, чтобы получить истинныезначение 1-го числа.
Хорошая инструкция, которая может сделать это: aad.Поместите первую введенную цифру в AH, вставьте вторую введенную цифру в AL, затем позвольте aad do AH * 10 + AL.

;------ask first number-------
mov AH, 09h
lea DX, M1
int 21h
mov ah, 01h
int 21h 
sub al, 30h 
mov b1, al
mov ah, 01h
int 21h  
sub al, 30h
mov ah, b1
aad 
mov b1, al      ; b1 is now a number from 0 to 99

Действуйте аналогично для 2-го и 3-го номеров.

Затем суммируйте их (результат = b1 + b2 + b3)

Сумма b1 и b2 никогда не может быть больше 198, поэтомубудет помещаться в байт.

mov al, b1
add al, b2

, но добавление 3-го числа может привести к переполнению диапазона байтов (0-255), поэтому нам приходится иметь дело с переносом

mov ah, 0
add al, b3
adc ah, ah

Сейчас AX содержит число от 0 до 297.

Чтобы отобразить это (самое большее) трехзначное число, прочитайте Отображение чисел с помощью DOS .

...