IA-32 Architectures Software Developer Manual 2C 中缩写 E 和缩写 M 的区别

Posted

技术标签:

【中文标题】IA-32 Architectures Software Developer Manual 2C 中缩写 E 和缩写 M 的区别【英文标题】:Difference between abbr E and abbr M in IA-32 Architectures Software Developer Manual 2C 【发布时间】:2012-02-24 06:46:00 【问题描述】:

我正在解码 X86 十六进制代码表示以返回汇编。 ISA manual 2C 的 A.2.1 节提供了寻址方法的缩写代码(第 A-2 页第 2C 页)。谁能解释一下abbr E和abbr M有什么区别?

E - ModR/M 字节跟在操作码之后并指定操作数。这 操作数是通用寄存器或内存地址。如果 它是一个内存地址,地址是从一个段计算的 寄存器和以下任何值:基址寄存器、索引 寄存器、比例因子、位移。

M - ModR/M 字节可能只涉及内存(例如,BOUND、LES、 LDS、LSS、LFS、LGS、CMPXCHG8B)。

【问题讨论】:

【参考方案1】:

E 可以允许任何源或目标驻留在内存或寄存器中(例如MOV EAX, DWORD PTR DS:[ESI]MOV EAX, ESI),而 M 只允许内存地址,这意味着它不能寻址寄存器,但它可以寻址内存由寄存器中的值指向(CMPXCHG8b ESI 无效,CMPXCHG8b QWORD PTR DS:[ESI] 有效)。

【讨论】:

以上是关于IA-32 Architectures Software Developer Manual 2C 中缩写 E 和缩写 M 的区别的主要内容,如果未能解决你的问题,请参考以下文章

IA32 IA64 X64 的区别

x86 MSR 名称的 IA32 与 MSR 前缀

《逆向工程核心原理》读书笔记——第4章 IA-32寄存器基本讲解

使用 __builtin_ ia32 shufps 将向量移动 32 位?

使用 SSE(IA32 汇编)执行简单的算术运算

ubuntu14.04添加ia32-libs安装32位软件