首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >英特尔x64指令CMPSB/CMPSW/CMPSD/CMPSQ

英特尔x64指令CMPSB/CMPSW/CMPSD/CMPSQ
EN

Stack Overflow用户
提问于 2015-06-10 03:46:19
回答 1查看 887关注 0票数 0

这些说明载于情报手册第558页。我有大致的想法,但我仍然坚持这些说明的确切内容。这是我所理解的,如果我错了,请纠正我。这都是在64位模式。

代码语言:javascript
复制
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
EN

回答 1

Stack Overflow用户

发布于 2015-06-10 04:44:53

说到这些指令是为了什么,人们必须认识到,它们帮助程序员自动化字符串(在连续内存元素的意义上)比较,这样就可以完成三件事。

  1. 两个内存位置的比较,这不能用一个cmp指令来完成
  2. 比较影响标志,以便您可以在下一条指令中检查结果,或者只使用rep/repnz前缀循环,除非不满足特定条件。
  3. 根据DF对两个源操作数进行增量/减少,否则必须通过至少两个inc/decadd/sub指令来完成,而后者则需要在更多字节上进行操作。

您还显示了对指令编码的一些兴趣。首先,cmpsx指令可以用两种方式编码--有或没有指定的操作数。这可能特别有用,但也有一些限制。

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

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30746743

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档