汇编语言实现键盘输入两个数并向加

两个数的位数要求考虑到不同的情况,位数不固定。汇编语言初级阶段的指令应该就可以大致完成该程序,给答案时顺便给出编此程序的思想,如何解决关键问题的想法。这个程序,如果不在存... 两个数的位数要求考虑到不同的情况,位数不固定。汇编语言初级阶段的指令应该就可以大致完成该程序,给答案时顺便给出编此程序的思想,如何解决关键问题的想法。
这个程序,如果不在存储问题上下功夫的话,就会出现123+12=243的情况。而原因跟01H有一定关系的。
展开
 我来答
___逍遥___
2012-04-04 · TA获得超过229个赞
知道小有建树答主
回答量:197
采纳率:0%
帮助的人:189万
展开全部
DATA SEGMENT
MAX EQU 20
NUM1 DB MAX , ? , MAX DUP(0)
NUM2 DB MAX , ? , MAX DUP(0)
INPUT DB 0AH , 0DH , 'PLEASE INPUT A NUMBER : $'
SUM DB 0AH , 0DH , MAX DUP(0) , '$'
DATA ENDS

STACK SEGMENT STACK
DB 200 DUP(0)
STACK ENDS

CODE SEGMENT
ASSUME DS:DATA , CS: CODE , SS: STACK
START :
MOV AX , DATA
MOV DS , AX ;
MOV DX , OFFSET INPUT
MOV AH , 9
INT 21H ; 输入提示
MOV DX ,OFFSET NUM1 ;
MOV AH,10
INT 21H ; 输入第一个数
MOV DX , OFFSET INPUT
MOV AH , 9
INT 21H ; 输入提示
LEA DX , NUM2 ;
MOV AH , 10
INT 21H; 输入第二个数
MOV AL , NUM1 + 1
MOV AH , 0
MOV SI , AX ; 初始化第一个数
MOV AL , NUM2 + 1
MOV AH , 0
MOV DI , AX ; 初始化第二个数
MOV BX , OFFSET [SUM + 2 + MAX - 1] ; 指向最后一个字节 ...
CMP SI , DI
JGE M
MOV CX , DI ; 去最大值
JMP LOPA ; 汇聚
M :
MOV CX , SI ;
LOPA : ; 循环计算开始
CMP SI , 0
JE ONEZERO ; 跳转到第一个数为零处
MOV AL , [NUM1+SI + 1] ;
DEC SI
JMP ONE
ONEZERO :
MOV AL , '0'
ONE : ; // AL 中为第一个数值
CMP DI , 0
JE TWOZERO ; 为零就不操作加
ADD AL , [NUM2+DI + 1 ] ; 两个数度不为零的处理
SUB AL , '0'
DEC DI
TWOZERO :
CMP AL , '9'
JLE NODISPOSE ; 不做处理
INC BYTE PTR [BX-1] ; 进位
SUB AL , 10 ; 减去进位1
NODISPOSE :
ADD [BX] , AL
DEC BX
DEC CX
JNE LOPA ;
MOV [BX] , BYTE PTR 0DH
DEC BX
MOV [BX] , BYTE PTR 0AH
MOV DX , BX
MOV AH ,9
INT 21H ;
MOV AH , 1 ; 暂停程序
INT 21H
MOV AH , 4CH ; // 退出程序
INT 21H
CODE ENDS
END START
MAX 是数的位数自己改下
yinfengnong
2012-03-30 · TA获得超过5619个赞
知道大有可为答主
回答量:2344
采纳率:89%
帮助的人:2307万
展开全部
说说思路,很简单,我估计你也能想出来
键盘输入两个字符串,这个应该不难,dos中断调用可以搞定,再不麻烦点用BIOS中断调用,再不济也可以直接读取键盘端口.
然后将两个字符串转换成数值,这样相加比较容易,几条指令就可以,如用不转换也可以,这样就很麻烦了.
之后如果想要显示出来的话,再转换成字符串输出,可以用中断调用进行显示,直接写显存也可以显示.
更多追问追答
追问
我想这个程序应该不需要中断调用这么高深的东西。。。况且我课都还没学到中断这部分呢,现在需要完成的程序怎么会要用到中断调用呢?我这个问题指的不是单片机什么的吧,这个问题的大致程序我还是见过的,只不过现在想自己编。
追答
这么说,那你如何从键盘输入两个数呢?
你不知道MOV AH,01H INT 21H这两条指令是中断调用吗?
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
murexster
2012-03-30 · TA获得超过386个赞
知道小有建树答主
回答量:394
采纳率:0%
帮助的人:169万
展开全部
位数不固定是不行的,只能说你定义的内存可以存放的范围很大,能满足一般情况即可。
然后就是把数据存起来,两次的数相加即可了
更多追问追答
追问
我当然知道你的意思,这是常识,世界上还不存在能容纳无穷大的容器,但是我认为当我提出这个问题时汇编熟练的回答者就应该联想到了我指的是对于能满足一般情况的位数不固定,这也是常识。这个程序没有那么简单,至少对于初学者而言,举个最基本的问题,因为两个数字的位数不同,那么如何存储可以保证,位数对应相加是正确,而不出现例123+12变成了243的情况?请你给出解决这个问题的程序吧,求指教。
追答
按位来,怎么会加错呢
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
热切还俏丽的小繁花2577
2012-03-31 · TA获得超过7万个赞
知道大有可为答主
回答量:5.1万
采纳率:0%
帮助的人:6905万
展开全部
我从来没见过这么不懂表达表达的提问者,居然还有人答复了好几次的。。。
拜托,,你就不能发个例子,,让我们看看你想完成什么样的效果
如果你想实现123+32=155的话,那太简单了,,我都不忍心说出来了
如果你想实现123+32=443的话,,也有办法哦 ,可是你看看你问题的表达,反正我看不懂
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式