在我为特定于 x86 架构的 linux 编写一个小型反汇编程序的过程中,我遇到了一个小问题。它与强制性前缀和重复前缀有关。查看英特尔文档 [1],据说重复前缀是0xf2或0xf3,强制前缀是0x66、0xf2或0xf3。
有两条指令具有以下基本操作码:
crc32 -- f2 0f 38 f0 (这里,0xf2 是强制前缀)
movbe -- 0f 38 f0
因此,只要计数器寄存器非零就必须重复的“movbe”指令的操作码应该是:
repnz movbe == f2 0f 38 f0
当我开始反汇编指令时,如果我看到字节0xf2,我怎么知道它是crc32指令的强制前缀,而不是movbe指令的重复前缀,反之亦然?我将操作码模式“f2 0f 38 f0”匹配到哪条指令?
我错过了什么?
[1] http://www.intel.com/design/intarch/manuals/243191.HTM
谢谢和问候,
Hrishikesh Murali