这条指令在内存中看起来如何?
How does this instruction look in memory?
我无法弄清楚此指令在 x86 处理器的内存中的外观。
mov [=10=]x3c,%eax
谁能帮我解决一下?
例如,一个简单的例子是:
xor %edi,%edi
---> 0x31 0xFF
IA32 处理器有一个默认代码大小,在 16 位代码段(或在实模式下)是(猜测)16 位。在32位和64位代码段中都是32位。
类似mov eax, 3ch
的指令实际上类似于 mov A, 3ch
,其中A是A寄存器(RAX、RAX、AX)。
指令 mov A, 3ch
编码为 0b8h OPERAND_IN_LE
,现在 OPERAND_IN_LE 具有代码大小:16 位或 32 位。
如果它是 16 位你实际上是写到 AX,如果它是 32 位到 EAX。
所以 0b8h 3ch 00
在 16 位中是 mov ax, 3ch
而 0b8h 3ch 00h 00h 00h
在 32 位中是 mov eax, 3ch
。请注意,这两条指令是相同的,CPU 根据当前代码大小获取操作数的 16/32 位。
您可以使用数据大小前缀 66h
覆盖默认代码大小。有了这个前缀,下一条指令的执行就像代码大小是 "other one"(即 16 位代码为 32 位,32 位代码为 16 位)。还有一个 REX 前缀可以访问完整的 64 位寄存器。
所以指令mov eax, 3ch
在16位代码中编码为66h 0b8h 3ch 00h 00h 00h
,在32/64位代码中编码为0b8h 3ch 00h 00h 00h
。
为了完整起见,指令 mov rax, 3ch
被编码为 48h b8h 3ch 00h 00h 00h 00h 00h 00h 00h
并且只能在 64 位模式下使用。
您可以下载Intel Manual Vol2A,参考说明及其从A到M的编码,包括mov
。
我无法弄清楚此指令在 x86 处理器的内存中的外观。
mov [=10=]x3c,%eax
谁能帮我解决一下?
例如,一个简单的例子是:
xor %edi,%edi
---> 0x31 0xFF
IA32 处理器有一个默认代码大小,在 16 位代码段(或在实模式下)是(猜测)16 位。在32位和64位代码段中都是32位。
类似mov eax, 3ch
的指令实际上类似于 mov A, 3ch
,其中A是A寄存器(RAX、RAX、AX)。
指令 mov A, 3ch
编码为 0b8h OPERAND_IN_LE
,现在 OPERAND_IN_LE 具有代码大小:16 位或 32 位。
如果它是 16 位你实际上是写到 AX,如果它是 32 位到 EAX。
所以 0b8h 3ch 00
在 16 位中是 mov ax, 3ch
而 0b8h 3ch 00h 00h 00h
在 32 位中是 mov eax, 3ch
。请注意,这两条指令是相同的,CPU 根据当前代码大小获取操作数的 16/32 位。
您可以使用数据大小前缀 66h
覆盖默认代码大小。有了这个前缀,下一条指令的执行就像代码大小是 "other one"(即 16 位代码为 32 位,32 位代码为 16 位)。还有一个 REX 前缀可以访问完整的 64 位寄存器。
所以指令mov eax, 3ch
在16位代码中编码为66h 0b8h 3ch 00h 00h 00h
,在32/64位代码中编码为0b8h 3ch 00h 00h 00h
。
为了完整起见,指令 mov rax, 3ch
被编码为 48h b8h 3ch 00h 00h 00h 00h 00h 00h 00h
并且只能在 64 位模式下使用。
您可以下载Intel Manual Vol2A,参考说明及其从A到M的编码,包括mov
。