Intel x64指令CMPSB / CMPSW / CMPSD / CMPSQ

时间:2015-06-10 03:46:19

标签: x86 64-bit machine-code

这些说明在intel手册的第558页。我得到了一般的想法,但我坚持这些指令的确切编码。这是我的理解,如果我错了,请纠正我。这都是64位模式。

Opcode - Instruction: 
A6 - compare byte at address RSI with byte at address RDI
67 A6 - compare byte at address ESI with byte at address EDI

66 A7 - compare word at address RSI with word at address RDI
67 66 A7 - compare word at address ESI with word at address EDI

A7 - compare dword at address RSI with dword at address RDI
67 A7 - compare dword at address ESI with dword at address EDI

REX.W A7 - Compares quadword at address RSI with quadword at address RDI
67 REX.W A7 - Compares quadword at address ESI with quadword at address EDI

1 个答案:

答案 0 :(得分:2)

说到这些指令的用途,我们必须意识到它们可以帮助程序员自动化字符串(在连续存储元素的意义上)比较,以便完成三件事

  1. 两个内存位置之间的比较,使用单个cmp指令无法完成

  2. 影响标志的比较,以便您可以在下一条指令中检查结果,或者只使用rep / repnz前缀循环,除非不满足某个条件。< / p>

  3. 根据DF增加/减少两个源操作数,否则必须至少由两个inc / decadd / sub指令,后者只需一个字节就可以进行操作

  4. 您还对指令编码表现出了一些兴趣。首先,cmpsx指令可以用两种方式编码 - 有或没有指定的操作数。尽管存在一些限制,但这可能特别有用。

    其他事情只是使用前缀字节。在此注释中,您可以使用段覆盖前缀覆盖第一个源操作数的段,但不能将es覆盖为第二个操作数的段。