Assembly 将值移动到ax寄存器,但打印时交换值
我正在尝试使用aam指令并尝试打印它。从下面的代码中,我已将ax reg复制到结果,但当我尝试打印它时,输出结果是相反的。在下面的代码中,我尝试将9乘以9,输出变成18。我不知道为什么。从我读到的,啊变成了十位,艾尔变成了一位。但当我尝试将其移动到结果时,值是交换的。ah不应该是ax注册表中的前8位吗?然后是艾尔?我真的很困惑。使用mov指令是否切换这些位置?有人能解释一下原因吗。我不熟悉集会,所以请容忍我。我正在使用Tasm btw,并且在Windows下。谢谢Assembly 将值移动到ax寄存器,但打印时交换值,assembly,Assembly,我正在尝试使用aam指令并尝试打印它。从下面的代码中,我已将ax reg复制到结果,但当我尝试打印它时,输出结果是相反的。在下面的代码中,我尝试将9乘以9,输出变成18。我不知道为什么。从我读到的,啊变成了十位,艾尔变成了一位。但当我尝试将其移动到结果时,值是交换的。ah不应该是ax注册表中的前8位吗?然后是艾尔?我真的很困惑。使用mov指令是否切换这些位置?有人能解释一下原因吗。我不熟悉集会,所以请容忍我。我正在使用Tasm btw,并且在Windows下。谢谢 .model small .
.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
ah不应该是ax注册表中的前8位吗?然后是艾尔
这取决于“前8位”是什么意思。AL是最低有效8位;如果从0到15对位进行编号,则AL对应于位0到7,AH对应于位8到15
在您的示例中,您将AX寄存器存储到内存位置,result
。由于体系结构是小端的,AL寄存器的内容将在结果
处找到,而AH的内容将在结果+1
处找到。你把它们弄混了
事实上,正是little endian表示确定了AH值相对于AL值的存储位置。您可能希望读取,但简而言之,当您存储多字节值时,最低有效字节存储在最低寻址内存位置。这与大端体系结构相反
ah不应该是ax注册表中的前8位吗?然后是艾尔
这取决于“前8位”是什么意思。AL是最低有效8位;如果从0到15对位进行编号,则AL对应于位0到7,AH对应于位8到15
在您的示例中,您将AX寄存器存储到内存位置,result
。由于体系结构是小端的,AL寄存器的内容将在结果
处找到,而AH的内容将在结果+1
处找到。你把它们弄混了
事实上,正是little endian表示确定了AH值相对于AL值的存储位置。您可能希望读取,但简而言之,当您存储多字节值时,最低有效字节存储在最低寻址内存位置。这与big-endian体系结构形成对比,后者的作用正好相反。Wow。谢谢但如果我可以问一下,这是否适用于使用mov指令时的所有情况?我也读过关于大端和小端的书。我想我遇到的问题是小问题。有没有办法确定我使用的是小端还是大端?@random x86总是小端。另外,endianess仅在从寄存器移动到内存时才重要,反之亦然。谢谢但如果我可以问一下,这是否适用于使用mov指令时的所有情况?我也读过关于大端和小端的书。我想我遇到的问题是小问题。有没有办法确定我使用的是小端还是大端?@random x86总是小端。此外,endianess仅在从寄存器移动到内存时才重要,反之亦然。