【发布时间】:2016-04-09 16:24:43
【问题描述】:
【问题讨论】:
-
什么程序集?你试过什么?它产生什么?
标签: assembly
【问题讨论】:
标签: assembly
在x86 汇编中,对应的指令是CMPSD。在Intel Instruction manual 中它被描述为
操作码字节:A7 --- 指令:CMPSD --- 编码:NP --- 64-bit:Valid --- 32-bit:Valid
- 对于传统模式,比较地址处的 dword DS:(E)SI 与地址 ES:(E)DI 处的双字;
- 为 64 位模式比较地址 (R|E)SI 处的双字 在地址 (R|E)DI 处使用双字。状态标志 进行相应设置。
CMPSD 比较两个内存操作数并相应地设置EFLAGS 中的状态标志以供Jcc/CMOVcc/... 使用。
因此,为了比较两个 DWORD/4 字节变量,您可以像这样设置 ESI 和 EDI
lea esi, var1 ; ESI = address of var1
lea edi, var2 ; EDI = address of var2
cmpsd ; compare them
Jcc... ; use (E)FLAGS
对于其他可变大小,例如 1、2、4、8 字节,分别使用 CMPS(B,W,D,Q)。
【讨论】: