http://zhidao.baidu.com/link?url=3Tx3CZzkwlndfUmqLvA-kjMor5yJ2G6TTIpuYwKrGMLXvK535MPMuPvVT5Us0tqyg1IS9bppFUf-sKLflmMG9K
关于汇编AAA指令
2010-03-12 12:43tangxiaolongit | 分类:网站使用 | 浏览5791次
MOV AX,'9'
ADD AL,'9'
AAA
执行了上述程序请问 (AX)=?
详细讲解下AAA指令的用法,拒绝CTRL+V
2010-03-20 23:16提问者采纳
首先你得知道什么是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。就是把结果转换成直观的十进制。
- 提问者评价
-
xiexie
评论(8) | 61 1
按默认排序 | 按时间排序
其他3条回答
2010-03-12 14:42中原小坏蛋 | 六级
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了
评论 | 6 0
举报| 2010-03-20 13:57ylz_xy | 四级
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高四位清零;
delphi lazarus opengl
网页操作自动化, 图像分析破解,游戏开发