汇编学习笔记39

三、十进制数算术运算调整指令

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

原文地址:https://www.cnblogs.com/hailong/p/1932292.html