16位汇编第六讲汇编指令详解第第三讲
1.十进制调整指令
1. 十进制数调整指令对二进制运算的结果进行十进制调整,以得到十进制的运算结果
2.分成压缩BCD码和非压缩BCD码调整
简而言之:
以前的时候你有个手表,里面的数字是九,如果加一个1就是0了,就会产生进位,
不过这个是10进制进位的,所以应该是 a了,但是a的话就出错了.所以我们就出来了这个调整指令直接变为零,然后进位,也就是16进制码当做10进制使用
压缩BCD
压缩BCD就是4位表示一个数字
非压缩BCD
非压缩就是一个字节表示一个数字(高4位通常为零)
例子
真值 8 64
二进制编码 08H 40H
压缩BCD码 08H 64H
非压缩BCD码 08H 0604H
可以看出,8如果是个位数,是不变的
如果64那么压缩的是4位表示一个数字非压缩的就是1个字节表示,高位为零.
压缩BCD吗的加减调整指令
DAA(加法的调整指令) DAS (减法的调整指令)
DAA 后缀A是Add的意思,后缀s是Sub的意思
例子
mov al,68h
;压缩的BCD码是68
mov bl,28h 压缩的BCD码28
add al,bl 二进制加法,al+bl 赋值为al
daa (十进制调整)
al= 68h + 28h = 90h
但是因为daa了,所以是十进制进位 是96
简单理解就是,本来16进制 9+1 = A的,但是十进制调整,就不能是A了,需要变为0,结果是10了
DAA的内部原理就是遇到a(….) +6
同理DAS也是-6
只不过是通过标志位完成的(辅助标志位)
减法例子:
mov al,68h
mov bl,28h
sub al,bl
das ;十进制调整:al=40h
;实现压缩BCD码加法:68-28=40
非压缩BCD的加,和减法的调整指令
AAA,AAS