x86 中的重复前缀和强制前缀

Hri*_*ali 3 x86 instruction-set prefixes opcode

在我为特定于 x86 arch 的 Linux 编写一个小型反汇编程序的过程中,我遇到了一个小问题。这是关于强制前缀和重复前缀的。查看英特尔文档 [1],据说重复前缀是0xf20xf3,强制前缀是0x660xf20xf3

有两条指令具有以下基本操作码:

crc32 -- f2 0f 38 f0 (这里,0xf2是强制前缀)
movbe -- 0f 38 f0

因此,只要计数器寄存器非零就必须重复的“movbe”指令的操作码应该是:

代表 movbe == f2 0f 38 f0

当我开始反汇编一条指令时,如果我看到字节0xf2,我如何知道它是crc32指令的强制前缀,而不是movbe指令的重复前缀,反之亦然?我应该将操作码模式“f2 0f 38 f0”与哪条指令相匹配?

我缺少什么?

[1] http://www.intel.com/design/intarch/manuals/243191.HTM

感谢和问候,
Hrishikesh Murali

小智 5

您只能将重复前缀与字符串指令一起使用(请参阅手册)。“f2 0f 38 f0”始终是 CRC32 指令。