X86 英特尔x64指令CMPSB/CMPSW/CMPSD/CMPSQ
这些说明位于英特尔手册第558页。我明白了大概的意思,但我对这些说明的确切含义感到困惑。这是我的理解,如果我错了,请纠正我。这都是在64位模式X86 英特尔x64指令CMPSB/CMPSW/CMPSD/CMPSQ,x86,64-bit,machine-code,X86,64 Bit,Machine Code,这些说明位于英特尔手册第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
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
说到这些指令的用途,我们必须意识到它们帮助程序员自动化字符串(在连续内存元素的意义上)比较,以便完成三件事
cmp
指令完成rep
/repnz
前缀循环,除非不满足特定条件DF
对两个源操作数进行递增/递减,否则必须由至少两个inc
/dec
或add
/sub
指令执行,后者需要对多个字节执行操作cmpsx
指令可以通过两种方式进行编码-使用或不使用指定的操作数。这可能特别有用,尽管有一些限制
其他东西只是在玩前缀字节。请注意,可以使用段覆盖前缀覆盖第一个源操作数的段,但不能将
es
作为第二个操作数的段覆盖 你能给我一个手册的链接吗当然,有人能拆下支架吗?我编辑了这个问题,想悬赏一下。是的,主要问题是关于编码,我做对了吗??不过,感谢您的解释。只有一种操作数编码:隐式。其他任何东西在汇编级别上都是一种幻觉。我不确定我是否理解,机器代码级别上不是有8种不同的编码吗?我的意思是,如何区分CMPSB上的64位和32位地址?手册上说,您可以使用操作数大小覆盖前缀(0x66)进行操作。