如何使用 asm 获取指向输出缓冲区的指针?

How to get pointer to outcoming buffer using asm?

我必须在 asm 中编写函数,并且我在 C 中有原型

void fdct(float *in, float *out, unsigned int n);

其中:

函数没有 return 任何东西,但可以处理输出数据数组并且必须根据结果更改它。

据我了解,在 cdecl 中堆栈将如下所示:

esp: ret
esp+4: *in - address
esp+8: *out - address 
esp+12: value of n

我明白了如何在 asm 中使用传入缓冲区,但我不明白如何 return 输出缓冲区的新地址 - 只是将新地址放入 esp+8 不是结果,它不会改变 *out 的值。我该如何解决这个问题?

这不是应该的工作方式。

你的汇编函数分配float(或float的数组)和return 它在 out 中。

相反,调用者 应该分配这样一个数组(例如使用 malloc()calloc()——或者他或她的语言提供的任何函数——或者简单地作为堆栈上的局部变量)和 传递 out 中第一个元素的地址。你的函数只是用合适的float值填充数组,可能最多n个元素。

示例:

float a[16] = ... ;  /* fill it up with suitable values */
float b[16] = { 0 }; /* receives result values */

fdct(a, b, 16);