访问x87堆栈上的数组索引

时间:2014-03-25 00:22:29

标签: assembly x86 x87

我在汇编语法方面遇到了一些困难。在我的任务中,我们需要将一系列参数传递给x87浮点寄存器。其中一个参数是double,我们应该将这个double用作数组。

我使用 fldl 4(%esp)将其加载到堆栈中,但现在我有访问其数组元素的任务。我知道并理解在x86中操作整数数组的语法,但我不明白如何在x87堆栈上访问数组的索引。

因为它是我浮点堆栈上唯一的东西,我知道它可以在%st(0)

找到

1 个答案:

答案 0 :(得分:0)

根据您的评论,您的函数会获得double*参数。因此4(%esp)是指向double的指针,它是存储数组项的基址,每个字节为8个字节。要访问i个元素,请将i乘以8并将其添加到所述基址。假设i位于eax,您可以将此元素加载到FPU中,如下所示:

movl 4(%esp), %edx   # load array base
fldl (%edx, %eax, 8) # load the array item whose index is in eax