8086年的AAM指令

时间:2014-02-20 18:34:47

标签: assembly masm x86-16

我是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的内容是什么?

2 个答案:

答案 0 :(得分:4)

AAM (BCD ADJUST AFTER MULTIPLY) 
  

from here

     

仅在两个BCD数字之间执行mul指令后才使用aam   (解压缩)。 mul将结果存储在AX寄存器中。结果是   小于100因此它可以包含在AL寄存器中(低字节   AX寄存器)。 aam通过将AL除以10来解压缩AL结果,   在AH中存储商(最高有效数字)并存储   AL中的余数(最低有效数字)。

如果我们提供的Al价值高于99,那么问题就是它会怎样做?

它会执行相同的AH = AL / 10AL = 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