小道:对压缩BCD码加法调整指令的理解

小谈:对压缩BCD码加法调整指令的理解
压缩BCD码加法调整指令:DAA
指令的作用:两个压缩BCD码相加结果在AL中,通过DAA得到一个正确的压缩BCD码。
预备知识:
 
现在我们来分析DAA的操作过程:
AL=OP1+OP2
把AL中的结果换算成两个十六进制数,设为XY,X为高位,Y位低位,把XY当成两个单独的数码
一.低位
1.若低位>9,即Y为A~F
低位>9,正确的BCD码应该让低位变成对应的0~9,即减A(10),再把A进给高位(此举也使AF=1),由于是高位,因此高位应该是加1,即+10H-0AH=+6H
2.若AF=1
AF=1,说明低位相加时产生了进位,但这个进位是“16进1”,即低位多进了6,因此应该给低位加上6,即+6H
3.由于低位BCD码对应的十进制为0~9,不可能AF=1又低位>9
二.高位
1.若高位>9,同理,应该让高位变成对应的0~9,即给高位减A,再把A进给假想的更高位(其实是CF,此举使CF=1),由于是更高位,因此更高位应该是加1,即+100H-A0H=+60H
2.若CF=1
CF=1,说明高位相加时产生了进位,但这个进位是“16进1”,即高位多进了6,因此应该给高位加上6,即+60H
3.由于高位BCD码对应的十进制为0~A(可能是A是由于可能低位会进位,而高位和本来是9,则会变成A),不可能CF=1又高位>9
因此,可以总结DAA的操作是:
1.若低位>9或AF=1,则AL加6H,且AF=1
2.若高位>9或CF=1,则AL加60H,且CF=1
------最佳解决方案--------------------
以前没有仔细研究过这几条指令,学习了。