首页 文章

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

提问于
浏览
0

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

a1    mov eax,moffs32

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

mov eax,[44332211h]

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

1 回答

  • 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

相关问题