1

我正在从头开始学习使用编程来学习 asm,但我找不到有关当前问题的任何帮助。

所以我制作了 3 个文件(asm 中的 2 个,c 中的 1 个)。

我希望我的 C 文件能够打印其他 2 个程序的输出。C中的文件:

iclude <stdio.h>

float a = 1;
float b = 2;
float c = 3;

extern float asm1 (float a, float b, float c);
extern float asm2 (float a, float b, float c);


int main ()
{

float count1= 0;
float count2= 0;

count1= asm1 (a, b, c);
count2= asm2 (a, b, c);

printf("Output : %f and %f \n", count1, count2);

return 0;
}

ASM 中的文件几乎相同,文件编号 1 产生 x1,文件编号 2 产生 x2。文件编号 1 使每个变量都以 1 结尾(例如 a1,x1),而 asm 中的文件编号 2 以 2 结尾(例如 a2,x2)。

.align 32
.data

a1: .float 0
b1: .float 0
c1: .float 0
buf1: .float 0
x1: .float 0

four1: .float 4
two1: .float 2

.text
.global asm1

asm1:

xor %eax, %eax
xor %ebx, %ebx
xor %ecx, %ecx

pushl %ebp
movl %esp, %ebp
movl 8(%ebp), %ecx
movl 12(%ebp), %ebx
movl 16(%ebp), %eax
pushl %eax
pushl %ebx
pushl %ecx

movl %eax, c1
movl %ebx, b1
movl %ecx, a1

finit 
fld a1
fld c1

**more code**

fstp x1

movl %ebp, %esp
popl %ebp
ret

我希望这个文件有 x1(x2) 作为返回值,它将显示在 printf 的 C 文件中。而不是这个,我得到-nan。我怎样才能做到这一点?

4

1 回答 1

1

要从函数返回浮点值,您需要将返回值留在 FPU 堆栈上。

像这样

 addf ...
 ; leave the value one the FPU stack, don't fstp
于 2013-04-20T12:35:06.673 回答