免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1536 | 回复: 0
打印 上一主题 下一主题

[其他] 汇编-BCD码计算调整指令 [复制链接]

论坛徽章:
13
15-16赛季CBA联赛之八一
日期:2016-07-08 21:00:1415-16赛季CBA联赛之同曦
日期:2017-02-15 14:26:1515-16赛季CBA联赛之佛山
日期:2017-02-20 14:19:2615-16赛季CBA联赛之青岛
日期:2017-05-07 16:49:1115-16赛季CBA联赛之广夏
日期:2017-07-30 09:13:1215-16赛季CBA联赛之广东
日期:2018-07-05 22:34:3615-16赛季CBA联赛之江苏
日期:2018-09-03 12:10:2115-16赛季CBA联赛之上海
日期:2018-09-25 03:49:2215-16赛季CBA联赛之广东
日期:2018-09-25 04:09:12
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2015-12-02 17:06 |只看该作者 |倒序浏览
本帖最后由 _nosay 于 2015-12-03 09:43 编辑

计算机:进/借位值为16
人类习惯BCD码:进/借位值为10


1. AAA
非压缩BCD码相加结果调整(AL->AX):假设十进制位(AL) >= 10,补6,“凑”个进位;
影响寄存器:AF、CF;未定义:OF、PF、SF、ZF;
使用注意:相加结果在AL寄存器时,调整才有意义;紧接着加法指令使用;不能调整INC指令计算结果。

2. DAA
压缩BCD码相加结果调整(AL->AL):假设十进制位(AL:高4bit、低4bit) >= 10,补6,“凑”个进位;
影响寄存器:AF、CF、PF、SF、ZF;未定义:OF;
使用注意:相加结果在AL寄存器时,调整才有意义;紧接着加法指令使用;不能调整INC指令计算结果。

3. AAS
非压缩BCD码相减结果调整(AL->AL):假设十进制位(AL) >= 10,说明减的时候借位过,当前十进制位减6;
影响寄存器:AF、CF;未定义:OF、PF、SF、ZF;
使用注意:相减结果在AL寄存器时,调整才有意义;紧接着减法指令使用;不能调整DEC指令计算结果。

4. DAS
压缩BCD码相减结果调整(AL->AL):假设十进制位(AL:高4bit、低4bit) >= 10,说明减的时候借位过,当前十进制位减6;
影响寄存器:AF、CF、PF、SF、ZF;未定义:OF;
使用注意:相减结果在AL寄存器时,调整才有意义;紧接着减法指令使用;不能调整DEC指令计算结果。

5. AAM
MUL bOPRD:AL*bOPRD -> AX     (结果可调整)
MUL wOPRD:AX*wOPRD -> DX:AX  (结果不可调整)
调整相乘结果AX:假设AX=37,则调整为:AH=3, AL=7;
影响寄存器:PF、SF、ZF;未定义:AF、CF、OF。

6. AAD
DIV bOPRD 或 IDIV bOPRD:AX/bOPRD -> AL…AH  (被除数可调整)
DIV wOPRD 或 IDIV wOPRD:DX/wOPRD -> AX…DX  (被除数不可调整)
调整被除数AX:假设AX:AH=3, AL=7,则调整为AX=37;
影响寄存器:PF、SF、ZF;未定义:AF、CF、OF。

加减法:需要对进/借位的值进行调整(+6/-6:10进制与16进制的进/借位值相差6)
乘法:  只是调整相乘结果AX值,使其符合BCD码格式
除法:  只是在相除之前,调整被除数AX的值,使其符合运算器认为的值

进一步归纳:
加减乘运算都不需要对参与运算的值进行调整,而都对结果进行调整;
除法运算却是对参与计算的值进行调整,而不对计算结果进行调 。。。

why ?!

其实调整的目的有2个:
① 保证计算结果的正确性(在运算之前,对参与运算的数字进行调整)
   所以如果不用调整,就能计算正确,当然不需要在运算之前进行调整了。
② 保证计算结果仍然是BCD码格式(对运算结果进行格式调整)
   所以如果结果本身已经是BCD码格式了,当然也不需要再进行调整了。

对标志位影响分3种情况:影响、不确定/未定义、不影响。
“不确定”应该就是指:该标志位的值可能会在指令执行后被改变,但不能对“最终结果”起说明作用,比如CF=0,可能是这个指令的“当中步骤”产生了进位(如果哪位确定“未定义”的含义,希望可以回复一下)。


其实,如果记性好的话,再加上在编程中多使用几次这些指令,自然也能熟悉这些指令的。
理解每条汇编的实质,这种总结算是第一步吧,知道它的用法、影响和使用限制,第二步应该就是知道它对应的opcode,第三步就是不断实践,希望自己能把汇编搞熟悉,也希望能有前辈相助,前辈们快发力吧 !!
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP