汇编学习笔记40

二、未组合BCD码算术运算调整指令

1.未组合BCD码的加法指令调整指令: AAA

指令格式: AAA

本指令对在AL中的由两个未组合BCD码相加后的结果进行调整,产生一个未组合BCD码

调整方法如下:

1) 如果AL中低4位在0~9之间,且AF=0,转入3)

2) 如果AL的低4位在A~F之间,或AF=1,则(AL)=(AL)+6, (AH)=(AH)+1, AF=1

3) 清除AL的高4位

4) AF的值送入CF

该指令影响标志位AF和CF,对其他标志位无定义。

例:

MOV AX, 7

ADD AL, 6   ; AL=0DH, AH=00H, AF=0, CF=0

AAA         ; AL=03H, AH=01H, AF=1, CF=1

ADC AL, 5   ; AL=09H, AH=01H, AF=0, CF=0

AAA         ; AL=09H, AH=01H, AF=0, CF=0

ADD AL, 39H ; AL=42H, AH=01H, AF=1, CF=0

AAA         ; AL=08H, AH=02H, AF=1, CF=1

2. 未组合BCD码的减法指令调整指令 AAS

指令格式: AAS

本指令对在AL中的两个未组合BCD码相减所得的差进行调整,产生一个未组合BCD码

调整方法如下:

1) 如果AL中的低4位在0~9之间,且AF=0,则转入3)

2) 如果AL中的低4位在A~F之间或AF=0,则 (AL)=(AL)-6, (AH)=(AH)-1, AF=1

3) 清除AL的高4位

4) AF的值送入CF

该指令影响标志位AF和CF,对其他标志位无定义

例:

MOV AL, 34H

SUB AL, 09H   ; AL=2BH, AF=1, CF=0

AAS           ; AL=05H, AF=1, CF=1

3. 未组合BCD码乘法指令调整指令  AAM

指令格式: AAM

本指令对存放在AL中的积(由两个未组合BCD码相乘产生)进行调整,产生两个未组合的BCD码。

调整方法如下:

把AL中的值除以10, 商放在AH中,余数放在AL中。

该指令影响标志位SF, ZF, PF, 对其他标志位无影响。

MOV AL, 03H

MOV BL, 04H

MUL BL         ; AL=0CH, AH=00H

AAM            ; AL=02H, AH=01H

4. 未组合BCD码除法指令调整指令 AAD

指令格式: AAD

本指令与其他调整指令在使用顺序上不同。本指令在调用除运算指令之前调用。把存放在AH和AL中的两位未组合BCD码调整为一个二进制数存放在AL中。

调整方法为:

(AL)=(AL)+10*(AH), (AH)=0

由于上述调整,存放在AL和AH中的非组合BCD码的高4位应为0,该指令影响标志位SF, ZF, PF, 对其他标志位无影响

例:

MOV AH, 04H

MOV AL, 03H

MOV BL, 08H

AAD           ; AL=2BH, AH=00H

DIV BL        ; AL=05H, AH=03H

例: 写出(DX)=UP1+UP2-UP3

MOV AX, 0

MOV AL, UP1

ADD AL, UP2

AAA

MOV DL, AL

MOV AL, UP1+1

ADC AL, UP2+1

AAA

XCHG AL, DL

SUB AL, UP3

AAS

XCHG AL, DL

SBB AL, UP3+1

AAS

MOV DH, AL

posted @ 2011-01-12 20:25  杨海龙  阅读(308)  评论(0编辑  收藏  举报