8086中的AAM指令

use*_*146 1 assembly masm x86-16

我是 8086 的新手,需要一些帮助。我了解 AAM 的基础知识。如果我乘以两个数字,假设 07H 和 09H

MUL AL,BL
AAM
Run Code Online (Sandbox Code Playgroud)

这将在 AH 中存储值 06H,在 AL 中存储值 03H。但假设如果以 3 个十六进制位的值应用 AAM,假设

MOV AL,77H
MOV BL,0AH
MUL BL
AAM
Run Code Online (Sandbox Code Playgroud)

AL最后的内容是什么?

qwr*_*qwr 5

AAM (BCD ADJUST AFTER MULTIPLY) 
Run Code Online (Sandbox Code Playgroud)

从这里

仅在两个 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)AX0x04A6 在乘法之后)之后AAM

  Ah=  166/10=16 ( 0x10)
  AL=166 mod 10=6 (0x6)
Run Code Online (Sandbox Code Playgroud)

AX正如我们所看到的,0x1006之后AAM 它就离开了不正确的位置unpacked bcd number。因为输入不低于100