2014-03-25 20 views
0

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

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

因为它在我的浮点堆栈中的唯一,我知道,它可以在%ST(0)

+0

双没有数组元素,除非你也许意味着它是由的字节。在这种情况下,您不必将其加载到FPU中,只需将其用作字节数组即可。否则,请澄清你到底需要什么。 – Jester

+0

程序集文件从我的C文件接收的参数是:double * Z。我需要访问Z [i]。这有帮助吗? – InfoSecNoob

+0

是的,这意味着你有一个双打数组,这是双倍数。你想用他们做什么?你知道有多少? – Jester

回答

0

根据您的意见,您的函数获取double*参数中找到。因此4(%esp)是一个指向double的指针,这是存储数组项的基地址,每个字节为8个字节。要访问第i个元素,请将i乘以8并将其添加到所述基址中。假设ieax可以将该元素加载到FPU像这样:

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

你确定fldl加载一个双? –

+1

@JensBjörnhager是的,令人困惑,是不是。浮点后缀为's',单精度,'l'为双精度,'t'为扩展精度(80位)。 [测试程序](http://ideone.com/VSUzfa) – Jester

+0

at&t语法的另一个证据不是针对人类的。 –