关于汇编AAA指令
发布网友
发布时间:2022-05-01 16:48
我来回答
共5个回答
热心网友
时间:2022-06-19 19:09
首先你得知道什么是BCD码,因为人们习惯使用10进制,所以计算机如果能按照十进制计算就更直观方便,为此就要对数进行编码,即BCD码。BCD码的运算规则为逢十进一,而计算机实际上是按照二进制进行计算的,所以必须对结果进行调整。而BCD码又分为压缩和非压缩,它们的调整又是不同的。对于压缩BCD码而言,低四位二进制结果如果大于9,就要加6调整;高四位二进制如果大于9,就要进行加60h调整。你问的AAA为非压缩BCD码调整,即如果al低四位大于9,就将al加6,ah加一,al高四位清零,cf、af置1。
你问aaa的用法,简单的说就是用于非压缩BCD码加法调整。就是经过AAA指令后结果假如是24h,那么他表示的是24。就是把结果转换成直观的十进制。
热心网友
时间:2022-06-19 19:09
aaa的调整规则为看al,和af的值,如果
al中的低四位大于9或者af=1,那么就将al加6,ah加1,且将af,cf设置为1,否则将af,cf设置为-。然后不管al和af结果为什么都将al的高四位清零。
你的题,因为add相加后结果为a1h,af=1,所以要将al加6,ah加1,且将af,cf设置为1,使得ah=ah+1,al=a7h,af=cf=1,然后再将al高四位清零,所以最后结果是ah=ah+1,al=07h,af=cf=1
热心网友
时间:2022-06-19 19:10
先举一个例子,如:AH=0, AL=06H, BL=09H
执行指令:ADD AL, BL
AAA
得:AH=01H,AL=05H
AAA的作用就是将相加后AL中的结果——15,拆分成两部分(拆成非压缩BCD码的形式),十位和个位,即01H,05H
是通过一种怎样的计算呢?
就是将ADD AL,BL执行后,AL的结果(也就是0FH)低四位加上06H,用于跳过A-F,然后AL高四位清零,同时AH高四位清零,低四位加一
通过这样的操作,就把0FH变成了01H,05H了
热心网友
时间:2022-06-19 19:10
AAA是汇编里ASCII码加法调整指令
当执行完MOV AX,'9'时结果ax里面是ox0039,因为9的ASICII码为那么多
执行完第二条ADD AL,'9'时ax里面是OX0072,因为他是按照十六进制相加的
执行完第三条指令时,ax里面变为OX0108,即得到十进制数18(9+9=18)。
AAA执行条件是:如果AL得低4位大于9或者(AF)=1,则:(AL)=(AL)+6
(AH)=(AH)+1
(AF)=(CF)=1
否则:(AF)=(CF)=0 AL高四位清零;
热心网友
时间:2022-06-19 19:11
AX=0108
AAA是把al中的和调整为非压缩的BCD格式放到al中去,有进位它会向ah中进1;
如
mov ax '29'
add al,'8'
aaa
执行完add时ax=3271执行完aaa是ax=3307把al调为07的同时向ah进1变成33了