我在汇编语法方面遇到了一些困难。在我的任务中,我们需要将一系列参数传递给x87浮点寄存器。其中一个参数是double,我们应该使用这个double作为数组。在x87堆栈上访问数组索引
我已经使用fldl 4(%esp)将它加载到堆栈,但现在我有访问其数组元素的任务。我知道并理解在x86中操作整数数组的语法,但我不明白如何在x87堆栈中访问数组的索引。
因为它在我的浮点堆栈中的唯一,我知道,它可以在%ST(0)
我在汇编语法方面遇到了一些困难。在我的任务中,我们需要将一系列参数传递给x87浮点寄存器。其中一个参数是double,我们应该使用这个double作为数组。在x87堆栈上访问数组索引
我已经使用fldl 4(%esp)将它加载到堆栈,但现在我有访问其数组元素的任务。我知道并理解在x86中操作整数数组的语法,但我不明白如何在x87堆栈中访问数组的索引。
因为它在我的浮点堆栈中的唯一,我知道,它可以在%ST(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
你确定fldl加载一个双? –
@JensBjörnhager是的,令人困惑,是不是。浮点后缀为's',单精度,'l'为双精度,'t'为扩展精度(80位)。 [测试程序](http://ideone.com/VSUzfa) – Jester
at&t语法的另一个证据不是针对人类的。 –
双没有数组元素,除非你也许意味着它是由的字节。在这种情况下,您不必将其加载到FPU中,只需将其用作字节数组即可。否则,请澄清你到底需要什么。 – Jester
程序集文件从我的C文件接收的参数是:double * Z。我需要访问Z [i]。这有帮助吗? – InfoSecNoob
是的,这意味着你有一个双打数组,这是双倍数。你想用他们做什么?你知道有多少? – Jester