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最后的内容是什么?
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 / 10
,AL = AL mod 10
但会留下不正确的解压 bcd 值。
所以,之前的情况AAM
AL
将是 166 (0xA6)
(AX
将0x04A6
在乘法之后)之后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