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位汇编中,.@Tinctoriusmov[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应该。。。