小编Fut*_*get的帖子

基础和位移之间的差异

我在理解遇到的两条指令时遇到一些问题。
第一个如下:

imul   eax,DWORD PTR [esi+ebx*4-0x4]
Run Code Online (Sandbox Code Playgroud)

该指令是否意味着 => 将您在括号之间计算的地址处的值乘以 eax 并将其存储在同一寄存器(eax)中?如果是的话,我们是否像这样计算括号之间的地址?

  1. EBX * 4
  2. esi + 运算1的结果
  3. 从结果中减去 4
  4. 转到地址(结果)并获取其中的值。

我解码的第二条指令是这个

jmp    DWORD PTR [eax*4+0x80497e8]
Run Code Online (Sandbox Code Playgroud)

- eax *4 是否等于index * scale ?
- 0x80497e8 是位移吗?

那么要获取括号内的地址,我们应该遵循这个顺序吗?

  1. 电子轴 * 4
  2. 将1.中的结果添加到地址0x80497e8
  3. 跳转到该地址

根据我的理解, [base + index * scales] 用于获取数组内部的值。基数是指向数组中第一个元素的指针。索引实际上是存储我们想要的值的索引,而比例是数组包含的日期的大小

我的问题是,当您在方程中添加位移时,位移的用途是什么?当位移为负值时意味着什么?

x86 assembly intel addressing-mode

2
推荐指数
1
解决办法
1958
查看次数

标签 统计

addressing-mode ×1

assembly ×1

intel ×1

x86 ×1