【问题标题】:Compare two variables in assembly比较汇编中的两个变量
【发布时间】:2016-04-09 16:24:43
【问题描述】:

如果两个变量相等,比较的汇编语法是什么?

我已经尝试过this

但是没有用。

【问题讨论】:

  • 什么程序集?你试过什么?它产生什么?

标签: assembly


【解决方案1】:

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)。

【讨论】:

    猜你喜欢
    • 2010-11-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-08-26
    • 2015-11-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多