我正在尝试使用aam指令并尝试打印它。从下面的代码我已经将ax reg复制到结果,但是当我尝试打印它时,输出反转。在下面的代码中,我试图将9乘以9,输出变为18.我不知道为什么。从我所读到的啊变成了十位,而al成为那个地方。但是当我尝试将其移动到结果时,值就是交换。是不是啊应该是斧头注册的前8位?其次是?我真的很困惑。使用mov指令切换那些位置吗?有人可以解释我为什么。我是集会的新手所以请耐心等待。我正在使用Tasm btw,并且在Windows下。感谢。
.model small
.stack 100h
.data
num1 db 2 dup('0')
num2 db 2 dup('0')
result dw 2 dup('0')
.code
main proc
mov ax, @data
mov ds, ax
mov ah, 0
mov al,9
mov ah,9
mul ah
aam
or ax, 3030h
mov result, ax
mov dx, result
mov ah, 02
int 21h
mov dx, result + 1
mov ah, 02
int 21h
mov ax, 4c00h
int 21h
main endp
end main
答案 0 :(得分:5)
不是啊应该是斧头注册的前8位吗?其次是?
这取决于“前8位”的含义。 AL是最低有效8位;如果将0到15的位编号,则AL对应于位0到7,AH对应于位8到15.
在您的示例中,将AX寄存器存储到内存位置result
。由于架构是little-endian,因此AL寄存器的内容将在result
找到,而AH的内容将在result + 1
。你混淆了它们。
实际上,小端表示确定AH值相对于AL值的存储位置。您可能希望阅读endianness,但简而言之,当您存储多字节值时,最低有效字节存储在最低寻址的内存位置。这与大端架构形成鲜明对比,后者恰恰相反。