设在缓冲区DATA中存放着12个组合的BCD码,求他们的和,把结果存放到缓冲区SUM中。
时间:2011-01-27
来源:互联网
num1:db 23h,45h,67h,89h,32h,93h,36h,12h,66h,78h,43h,99h
result db 2 dup(0)
.......
mov ax,seg num1
mov ds,ax
mov bx,offset data
mov cx,10
xor al,al
xor ah,ah
next:add al,[bx]
daa
adc ah,0
xchg ah,al
daa
xchg ah,al
inc bx
loop next
xchg ah,al
mov word ptr result,ax
问题1:为什么12个BCD码相加只要循环10次
问题2:next:add al,[bx]
daa -->这里用daa,给举个例子,还不太理解DAA,DAA就是用来干什么的。
问题3:adc ah,0 -->这里不懂。
xchg ah,al
result db 2 dup(0)
.......
mov ax,seg num1
mov ds,ax
mov bx,offset data
mov cx,10
xor al,al
xor ah,ah
next:add al,[bx]
daa
adc ah,0
xchg ah,al
daa
xchg ah,al
inc bx
loop next
xchg ah,al
mov word ptr result,ax
问题1:为什么12个BCD码相加只要循环10次
问题2:next:add al,[bx]
daa -->这里用daa,给举个例子,还不太理解DAA,DAA就是用来干什么的。
问题3:adc ah,0 -->这里不懂。
xchg ah,al
作者: yangxiang1 发布时间: 2011-01-27
问题1:为什么12个BCD码相加只要循环10次
因为程序中的cx=10
问题2:next:add al,[bx]
DAA(Decimal Adjust for Addition)加法的十进制调整指令
问题3:adc ah,0 -->这里不懂。
adc,带进位加法, 如果al的结果产生进位, 那么把进位值加到ah中
因为程序中的cx=10
问题2:next:add al,[bx]
DAA(Decimal Adjust for Addition)加法的十进制调整指令
问题3:adc ah,0 -->这里不懂。
adc,带进位加法, 如果al的结果产生进位, 那么把进位值加到ah中
作者: masmaster 发布时间: 2011-01-27
回答你第二个问题:daa是BCD码的十进制调整指令,add指令是按十六进制来加的如:最后两个数43h+99H加完后,用debug可以看到al里是什么吗?应是:DCh,是十进制的,用一个Daa就把他们进行一下调整,会加上06h,让它产生一个进位,因为你想让十进制按十六进制来进行运算,就必须每次相加给它补加上6因为他们相差6.
第三个问题是,加0是了为把低位al相加时产生的进位也加到ah里来,明白了吗,
,第一个问题,还是看不明白,要上机试一下才行。
第三个问题是,加0是了为把低位al相加时产生的进位也加到ah里来,明白了吗,
,第一个问题,还是看不明白,要上机试一下才行。
作者: mengtao1235 发布时间: 2011-01-27
相关阅读 更多
热门阅读
-
office 2019专业增强版最新2021版激活秘钥/序列号/激活码推荐 附激活工具
阅读:74
-
如何安装mysql8.0
阅读:31
-
Word快速设置标题样式步骤详解
阅读:28
-
20+道必知必会的Vue面试题(附答案解析)
阅读:37
-
HTML如何制作表单
阅读:22
-
百词斩可以改天数吗?当然可以,4个步骤轻松修改天数!
阅读:31
-
ET文件格式和XLS格式文件之间如何转化?
阅读:24
-
react和vue的区别及优缺点是什么
阅读:121
-
支付宝人脸识别如何关闭?
阅读:21
-
腾讯微云怎么修改照片或视频备份路径?
阅读:28