我正在寻找如何添加2个数字的3个数字

问题描述 投票:1回答:1

我想把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
assembly dos x86-16 emu8086
1个回答
1
投票

首先输入数字

您应该将它们组合起来,以获得第一个数字的真实值,而不是将第一个数字的各个数字存储在b1和b2中。 一个很好的指令可以做到这一点是aad。把第一个输入的数字放在AH,把第二个输入的数字放在AL,然后让aadAH * 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之间的数字。

要显示此(最多)3位数字,请阅读Displaying numbers with DOS

© www.soinside.com 2019 - 2024. All rights reserved.