三、十进制数算术运算调整指令
8086,8088中使用BCD码表示十进制数
BCD码可分为压缩的BCD码和非压缩的BCD码。(组合BCD码和非组合BCD码)。
压缩的BCD码一个字节含两位BCD码,
非压缩的BCD码一个字节也含两位BCD码,但高4位的BCD码无意义,不使用。
1.组合BCD码加法调整指令: DAA
格式: DAA
操作: 对AL中的和进行调整,调整如下:
1) 如果低四位在A~F之间,或AF标志位为1,则(AL) <—(AL+06H), AF标志位置为1
2) 如果高四位在A~F之间,或CF标志位为1,则(AL) <—(AL+60H), CF标志位置为1
该指令影响标志位为AF, CF, PF, ZF,不影响其他标志位
例:
MOV AL, 34H ; AL=34H
ADD AL, 47H ; AL=7BH, AF=0, CF=0
DAA ; AL=81H, AF=1, CF=0
ADC AL, 87H ; AL=08H, AF=0, CF=1
DAA ; AL=68H, AF=0, CF=1
ADC AL, 79H ; AL=E2H, AF=1, CF=0
DAA ; AL=48H, AF=1, CF=1
例:
(BCD3)<—(BCD1)+(BCD2)
(BCD1)=34H, (BCD1+1)=18H, (BCD2)=89H, (BCD2+1)=27H
指令:
MOV AL, BCD1
ADD AL, BCD2
DAA
MOV BCD3, AL
MOV AL, BCD1+1
ADC AL, BCD2+1
DAA
MOV BCD3+1, AL
2.压缩BCD码减法调整指令DAS
本指令对AL中的差进行调整,调整如下:
1) 如果AL低4位在A~F之间或AF=1,则(AL)=(AL)-06H
2) 如果AL高4位在A~F之间或CF=1,则(AL)=(AL)-60H
标志位影响与DAA相同
例:
MOV AL, 45H ; AL=45H
SUB AL, 27H ; AL=1EH, AF=1, CF=0
DAS ; AL=18H, AF=1, CF=0
SBB AL, 49H ; AL=CFH, AF=1, CF=1
DAS ; AL=69H, AF=1, CF=1
例:
(BCD1)=1234, (BCD2)=4612
完成(BCD3)=(BCD1)-(BCD2)
指令:
MOV AL, BCD1
SUB AL, BCD2
DAS
MOV BCD3, AL
MOV AL, BCD1+1
SBB AL, BCD2+1
DAS
MOV BCD3+1, AL