Linux上的Masm32:为什么mov[bx],ax可以工作,而mov[ax],bx(或mov[bl],al)不能';T

Linux上的Masm32:为什么mov[bx],ax可以工作,而mov[ax],bx(或mov[bl],al)不能';T,linux,assembly,masm,Linux,Assembly,Masm,当我尝试 mov [ax], bx 我得到以下错误:无效的有效地址 这同样适用于mov[al]、bl或类似的东西 如果我尝试 mov [bx], ax 它起作用了。那么ebx的低位字节有什么特别之处,我如何才能按照mov[al]、bl的思路完成一些事情,或者只是交换bx、ax中两个字节的内容 提前感谢您的帮助:)使用[bx]被称为“寄存器间接寻址模式”。在16位模式下,以下寄存器可以这种方式使用:bx、bp、si和di 有关详细信息,请参阅 我怎样才能按照mov[al],bl 这没有什么意义

当我尝试

mov [ax], bx
我得到以下错误:
无效的有效地址
这同样适用于
mov[al]、bl
或类似的东西

如果我尝试

mov [bx], ax
它起作用了。那么
ebx
的低位字节有什么特别之处,我如何才能按照
mov[al]、bl
的思路完成一些事情,或者只是交换
bx
ax
中两个字节的内容


提前感谢您的帮助:)

使用
[bx]
被称为“寄存器间接寻址模式”。在16位模式下,以下寄存器可以这种方式使用:
bx
bp
si
di

有关详细信息,请参阅

我怎样才能按照
mov[al],bl

这没有什么意义,因为它将使用
al
的8位值作为地址,而在本例中,地址是16位的。如果您只是试图将
bl
的值移动到
al
,则不需要方括号:

mov al, bl

使用
[bx]
称为“寄存器间接寻址模式”。在16位模式下,以下寄存器可以这种方式使用:
bx
bp
si
di

有关详细信息,请参阅

我怎样才能按照
mov[al],bl

这没有什么意义,因为它将使用
al
的8位值作为地址,而在本例中,地址是16位的。如果您只是试图将
bl
的值移动到
al
,则不需要方括号:

mov al, bl

短答案的可能重复:并非所有寄存器都可以这样使用。短答案的可能重复:并非所有寄存器都可以这样使用。但是,在32位和64位汇编中,.@Tinctorius
mov[al],bl
在32位或64位x86汇编中不是有效的指令,就像在16位x86汇编中一样。然而,
mov[eax],bl
是有效的32位指令,
mov[rax],bl
是有效的x86-64指令。非常正确:)如果这是OP真正想要的,
movzx ax,al
(或
movzx eax,al
,然后在
ax
bx
之间交换,然后
mov[bx],al
。提到Linux我感到困惑。Masm会在Linux中运行吗?然而,Japheth的JWASM应该……在32位和64位汇编中,.@Tinctorius
mov[al],bl
在32位或64位x86汇编中不是有效的指令,就像在16位x86汇编中一样。然而,
mov[eax],bl
是有效的32位指令,
mov[rax],bl
是有效的x86-64指令。非常正确:)如果这是OP真正想要的,
movzx ax,al
(或
movzx eax,al
,然后在
ax
bx
之间交换,然后
mov[bx],al
。提到Linux我感到困惑。Masm会在Linux中运行吗?不过,贾菲的JWASM应该。。。