我在汇编语法方面遇到了一些困难。在我的任务中,我们需要将一系列参数传递给x87浮点寄存器。其中一个参数是double,我们应该将这个double用作数组。
我使用 fldl 4(%esp)将其加载到堆栈中,但现在我有访问其数组元素的任务。我知道并理解在x86中操作整数数组的语法,但我不明白如何在x87堆栈上访问数组的索引。
因为它是我浮点堆栈上唯一的东西,我知道它可以在%st(0)
找到答案 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