如何使用 asm 获取指向输出缓冲区的指针?
How to get pointer to outcoming buffer using asm?
我必须在 asm 中编写函数,并且我在 C 中有原型
void fdct(float *in, float *out, unsigned int n);
其中:
in
:指向传入数据缓冲区的指针
out
:指向输出数据缓冲区的指针
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);
我必须在 asm 中编写函数,并且我在 C 中有原型
void fdct(float *in, float *out, unsigned int n);
其中:
in
:指向传入数据缓冲区的指针out
:指向输出数据缓冲区的指针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);