这条指令在内存中看起来如何?

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, 3ch0b8h 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