这些说明载于情报手册第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发布于 2015-06-10 04:44:53
说到这些指令是为了什么,人们必须认识到,它们帮助程序员自动化字符串(在连续内存元素的意义上)比较,这样就可以完成三件事。
cmp指令来完成rep/repnz前缀循环,除非不满足特定条件。DF对两个源操作数进行增量/减少,否则必须通过至少两个inc/dec或add/sub指令来完成,而后者则需要在更多字节上进行操作。您还显示了对指令编码的一些兴趣。首先,cmpsx指令可以用两种方式编码--有或没有指定的操作数。这可能特别有用,但也有一些限制。
其他事情只是在玩前缀字节。请注意,您可以使用分段覆盖前缀覆盖第一个源操作数的段,但不能将es重写为第二个操作数的段。
https://stackoverflow.com/questions/30746743
复制相似问题