我有一点问题。我有一个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具有来自以下位置的返回值:功能。

10-06 05:56