我正在解码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)。
答案 0 :(得分:1)
E可以允许驻留在内存或寄存器中的任何源或目标(例如MOV EAX, DWORD PTR DS:[ESI]
或MOV EAX, ESI
),其中M只允许存储器地址,这意味着它不能寻址寄存器,但它可以寻址寄存器中值所指向的内存(CMPXCHG8b ESI
无效,CMPXCHG8b QWORD PTR DS:[ESI]
有效)。