我有一点问题。我有一个C文件和一个汇编文件。 C代码很重要:
#include <stdlib.h>
#include <stdio.h>
#include <math.h>
#include <string.h>
#include <time.h>
#include <xmmintrin.h>
void powAss();
int main(int argc,char **argv){
powAss();
printf("Finito\n");
}
在下面的汇编文件中定义了
powAss()
函数的位置:global powAss
section .data
section .text
extern expf
powAss:
push ebp ; salva il Base Pointer
mov ebp, esp ;il Base Pointer punta al Record di Attivazione corrente
push ebx ; salva i registri da preservare
push esi
push edi
mov ecx,0
push ecx
call expf
pop edi ; ripristina i registri da preservare
pop esi
pop ebx
mov esp, ebp ; ripristina lo Stack Pointer
pop ebp ; ripristina il Base Pointer
ret
我想将ecx寄存器中的值做为expf函数。现在,问题是:如何在汇编中获取expf函数的结果?
最佳答案
浮点返回值在FPU堆栈(st0
)的顶部传递。
您需要这样定义powAss
float powAss();
然后照常使用它。
这是因为您的程序集正在调用
expf
,然后将其返回值放入st0
,然后您直到函数结束时才触摸它,编译器将假定st0
具有来自以下位置的返回值:功能。