微机原理,加法校正AAA算法

MOV AX,19
ADD AL,07
AAA
不清楚高位的是清0,低位的进位,还是怎样

第1个回答  推荐于2017-12-16
AAA(Ascii Adjust After Addition)是ASCII码加调整指令,该指令用于调整AL之值,该值是二个ASCII码字节相加之和。调整规则如下:

1、若AL的低四位大于9,或标志位AF=1,则,AH=AH+1,AL=AL+6,并置AF和CF为1,否则,只置AF和CF为0;
2、清除AL的高四位。

MOV AX,19H
ADD AL,07H
执行之后,AL=20H。此时,虽然AL的低四位不大于9,但标志位AF=1,也就是AL的低四位向高四位有进位,所以,执行AAA指令后,AH=AH+1,AL=AL+6,并置AF和CF为1,然后清除AL的高四位,结果:AH=01H,AL=06H。本回答被提问者采纳
第2个回答  2010-01-26
AAA指令用于对非组合BCD码相加结果进行调整,调整操作仍在AL中进行,调整后的结果在AX中。AAA指令的操作如下:
若(AL)&0FH>9,或AF=1则
(AL)<-(AL)+6
(AF)<- 1
(CF)<-(AF)
(AH)<-(AH)+1
(AL)<-(AL)&OFH
指令执行后,除影响AF和CF标志外,其余标志均无定义。
可以看出:数字 0~9的ASCll码是一种非组合的BCD码,因为其高4位为0011,而低 4 位才是以8421码表示的十进制数,这符合非组合BCD码高 4位无意义(定为 0)的规定,这也是AAA指令又称为ASCll码加法调整指令的原因。
现以两个非组合的十进制数06+07,结果应为非组合的十进制数0103,就其操作过程来说明AAA指令的作用。
0000 0110=06 ;unpacked BCD
+ 0000 0111=07
………………………………………………
0000 1101=0DH ;不是unpacked BCD
+ .0110 ;(AL)<- (AL)+6
……………………………………………
AL 0001 0011 ;packed BCD,再调整
AF=1 ;AF<- 1
AH = 0000 0000
+ 1 ;AH<- AH+1
………………………………………………………………………
0000 0001
& 0000 1111 ;AL&0FH
………………………………………………………………………
AX 0000 0001 0000 0011 = 0103 ;结果送AX

这里的具体操作是和上一个指令的操作一样的,不同的是对于组合的BCD码,高4位是有意义的,而对于非组合的BCD码,高4位是没有意义的,所以要对高4位清零。即 AL&0FH。
相似回答