什么是leal(%edx,%edx,4),%eax是什么意思?

时间:2016-05-15 15:06:20

标签: assembly x86

lea assembly instruction

在上面的页面上说

说明leal (%edx, %edx, 4), %eax表示:eax = edx * 5

但是怎么样?

据我所知,%edx是下一个基础%edx是索引,4是比例

即。 DISP(碱,索引标度)。

2 个答案:

答案 0 :(得分:3)

  

DISP(碱,索引标度)。

知道这个指令是如何工作的(base + index * scale)但是你的麻烦来自于你一直认为第一个组件总是一个地址(“即内存地址中的任何地址)空间“)和第二个组件永远是一个索引(”即任何0,1,2 .....“)。

对于执行此指令的CPU,%edx的内容可以包含您选择的任何含义!它总是只是一个数字,这正是我们使用leal (%edx, %edx, 4), %eax等指令来计算%eax = %edx * 5的原因。

答案 1 :(得分:2)

通常,disp(base,index,scale)会提供地址:

base + scale * index + disp

因此,地址(%edx, %edx, 4)被解释为

disp := 0
base := %edx
index := %edx
disp := 4

在一起,它给出了:

%edx + %edx * 4 + 0

给出了%edx * 5

现在,leal用于地址分配。它将上述地址分配给%eax,因此您获得了%eax := %edx * 5

这是常见的,因为缩放因子scale只能是1,2,4,8,因此无法将%edx直接乘以5。同样,如果想获得%eax = %edx * 3,我们必须leal (%edx, %edx, 2), %eax