一个简单的汇编程序,两数相加总是少一,请高手帮忙修改。

来源:百度知道 编辑:UC知道 时间:2024/06/21 23:54:33
NAME FT
DATA SEGMENT ;定义数据段
BUF1 DB 6 ;用于存放被加数
DB ?
DB 6 DUP(?)
BUF2 DB 6 ;用于存放加数
DB ?
DB 6 DUP(?)
BUF3 DB'Please input the added number:$' ;字符串请输入被加数
BUF4 DB'Please input the adding number:$' ;字符串请输入加数
BUF5 DB'The result is:$' ;字符串请输入结果
SUM DB 5 ;用于存放结果
DB ?
DB 5 DUP(?)
DB '$'
DATA ENDS
CODE SEGMENT ;定义代码段
ASSUME CS:CODE,DS:DATA
START: MOV AX,DATA
MOV DS,AX
CLC

MOV DX,OFFSET BUF3 ; 输出提示字符串3
MOV AH,9
INT 21H

MOV DX,OFFSET BUF1 ;键盘输入被加数存入buf1
MOV AH,0AH
INT 21H

mov dl,0dh ;
mov ah,2
int 21h
mov dl,0ah ;
mov ah,2
int 21h

MOV DX,OFFSET BUF4 ;输出提示字符串

大致看了下,这个不只是1不1的问题了。。算法太过理想化。 既然你的数是用户输入的,那么几位数是事先未知的,你怎能对齐的算?而且是以0d回车结尾的。你所谓的对齐是不对齐的,你要正确的结果只能是让用户这么输入00012+00013。那你的程序就没意义了。其实你完全可以把输入的字符串转换成数字,利用BUF的第二位,或者0D都可以控制循环次数,从个位数,开始还原出原来的数字,然后相加,最后得到的数再转换成10进制的。这个方法也不方便,但正确率可以保证

是少1还是多1啊?你的算法很有问题,试一下82+59是什么结果。