回 帖 发 新 帖 刷新版面

主题:BCD码计算后 如何调整

BCD码计算后 如何调整 各位大哥帮忙

回复列表 (共2个回复)

沙发


DAA AAA AAS DAS分别是

板凳

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
例子就不举了,与加法调整指令类似楼主自己看看吧

我来回复

您尚未登录,请登录后再回复。点此登录或注册