【问题标题】:x86 Compare command destination syntaxx86 比较命令目标语法
【发布时间】:2013-10-13 03:38:49
【问题描述】:

我正在“调试”一段 x86 代码 - 序言是“解锁”它的代码中的一系列 5 个数字,它在内存 + 数学中与保存它的数字一起跳动很多。

我在第一次“跳转”之前跟踪了我需要输入的内容,它是:

cmp    %eax,0x80498d4(,%ebx,4)

我知道这个命令是cmp s, d,我正在使用 d-s 并设置 EFLAGS。但是在这种情况下,D 0x80498d4(, %ebx,4) 是什么?显然正在做一些事情来注册%ebx,但我不知道是什么。

【问题讨论】:

    标签: assembly x86


    【解决方案1】:

    那是 AT&T memory reference syntax

    AT&T 的 displacement(base register, offset register, scalar multiplier) 语法转换为 Intel 的 [base register + displacement + offset register * scalar multiplier] 语法(我认为这更容易理解)。

    所以 AT&T 语法中的 cmp %eax,0x80498d4(,%ebx,4) 等同于 Intel 语法中的 cmp [80498d4h + ebx*4], eax

    该指令英文读作“将寄存器EAX的内容与地址0x80498d4+(EBX*4)的内存内容进行比较”。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-06-23
      • 1970-01-01
      • 2017-09-24
      • 1970-01-01
      • 1970-01-01
      • 2011-12-12
      • 1970-01-01
      相关资源
      最近更新 更多