如何为mov eax生成a1操作码,moffs32

时间:2014-07-21 14:50:11

标签: assembly x86 64-bit nasm mov

为了帮助理解x86指令集,我一直在NASM中尝试各种形式的mov,并将生成的代码与英特尔文档中列出的操作码进行比较。他们中的大多数都是按照我的预期出现的,但有一个我似乎无法让NASM产生:

a1    mov eax,moffs32

特别是,这不会这样做(而是组装成另一个操作码):

mov eax,[44332211h]

64位变体和反操作码a3也是如此。如何让汇编程序生成这些操作码?我误解了“记忆偏移”的含义吗?

1 个答案:

答案 0 :(得分:1)

NASM可能会采用较短的变体。在64位寻址模式下,A1操作码具有64位地址,使指令长度为9个字节:A1 11 22 33 44 00 00 00 00。通过选择具有ModR / M编码的操作码,它允许使用32位偏移而不是7字节长的指令。例如:8B 04 25 11 22 33 44