我是8086的新手,我需要一些帮助。 我知道AAM的基本知识。 如果我多了两个no.s假设07H和09H
MUL AL,BL
AAM
这将在AH中存储值06H,在AL中存储03H。 但假设如果将AAM应用于3个十六进制位的值,则假设
MOV AL,77H
MOV BL,0AH
MUL BL
AAM
最后AL的内容是什么?
答案 0 :(得分:4)
AAM (BCD ADJUST AFTER MULTIPLY)
仅在两个BCD数字之间执行mul指令后才使用aam (解压缩)。 mul将结果存储在AX寄存器中。结果是 小于100因此它可以包含在AL寄存器中(低字节 AX寄存器)。 aam通过将AL除以10来解压缩AL结果, 在AH中存储商(最高有效数字)并存储 AL中的余数(最低有效数字)。
如果我们提供的Al
价值高于99
,那么问题就是它会怎样做?
它会执行相同的AH = AL / 10
和AL = AL mod 10
,但会留下错误的解压缩bcd值。
所以来你的案子
在AAM
AL
之前166 (0xA6)
AX
将在0x04A6
之后成倍增加)
在AAM
之后
Ah= 166/10=16 ( 0x10)
AL=166 mod 10=6 (0x6)
我们在AX
之后看到0x1006
将为AAM
它留下了不正确的unpacked bcd number
。因为输入不低于100
答案 1 :(得分:0)
乘法后的ASCII调整(AAM):
校正两个BCD的乘法结果 值。
<强>算法强>:
AH = AL / 10
AL =余数
示例强>:
MOV AL,15; // AL = 0Fh
AAM; // AH = 01,AL = 05
RET