我可以在程序集mov eax, [ax]
中执行此操作,还是必须指定大小mov eax, dword [ax]
。
答案 0 :(得分:3)
不,那些操作数不匹配。在可以访问EAX的32位系统上,您还必须使用相同大小的地址。
mov eax, [eax]
将用它指向的值替换EAX中的指针。
答案 1 :(得分:3)
[ax]
不是有效的16位寻址模式。将其更改为mov ebx, [bx]
,您就可以执行此操作。 ebx
决定了操作的大小,因此您不需要说dword
。在32位模式下,[bx]
不太可能是"有用的"地址,但有效"有效"码。在32位模式下,mov al, [eax]
,mov ax, [eax]
和mov eax, [eax]
都有效,大小由目标寄存器的大小决定,但您可能想说" byte"," word",或" dword"为清楚起见。在这个(!)的情况下,大小不必匹配。
FWIW,可以在16位代码中使用32位指令和32位寻址模式。整个地址必须在段限制内 - 通常为64k - 但mov eax, [eax + ecx * 4]
是有效代码。 Nasm(或其他"主管"汇编程序)将生成所需的"操作数大小覆盖前缀"和"地址大小覆盖前缀" (0x66和0x67)。