主题:BCD码计算后 如何调整
日暮乡关
[专家分:0] 发布于 2007-10-10 13:01:00
BCD码计算后 如何调整 各位大哥帮忙
回复列表 (共2个回复)
沙发
黎辉monkey [专家分:0] 发布于 2007-11-10 14:48:00
DAA AAA AAS DAS分别是
板凳
abin0915 [专家分:100] 发布于 2007-11-10 21:42:00
AAA指令,在用ADD或或ADC对两个非压缩BCD十进制或ASCII码表示的十进制做加法后,运算结果已存放在AL的情况下,用此指令寄存器中的运算结果调整为1为非压缩十进制数,保留在AL中!
调整过程:
若AL低4位》9或半进位标志AF=1
则 AL<-AL+6
用与操作(^)将AL高4位清0
AF置1,CF置1,AH<-AH+1否则,仅将AL寄存器高4位清
例:
ADD AL,BL; 0000 1001....9
+0000 0101....5
0000 1110...低4位>9
+0000 0110...加6调整
0000 0100
^0000 1111...清高4位
0000 0100...AL=4
CF=1,AF=1,AH=1
结果位AX=0104,表示非压缩十进制数14
DAA:将两个压缩BCD数相加后的结果调整位正确的压缩BCD数,相加后的饿结果必须在
AL中,才能使用DAA指令
调整过程如下:
若加法后AL中的低半字节>9或AF=1
则AL<-AL+6,低半字节进行调整
若此时AL中高半字节结果>9或CF=1
则AL<-AL+60H,对高半字节进行调整,并使CF置1,否则CF置0
ADD AL,BL 0011 1000...38
+0001 0101...15
0100 1101...低4位>9
+0000 0110...加6调整
0101 0011...结果位AL=BCD 53,CF=0
DAS减法指令功能,在两个压缩十进制用SUB或SBB相减后,结果已存在AL中的情况下对
所得结果进行调整,在AL中得到正确的压缩十进制数,同样对AL中的高半字节喝低半字节分别进行调整。
过程:
如果AL寄存器的低4位>9或AF=1
则AL<-AL-6,AF置1
如果此时AL高半字节>9或标志位CF=1
则AL<-AL-60H,CF置1
例子就不举了,与加法调整指令类似楼主自己看看吧
我来回复