我正在从头开始学习使用编程来学习 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。我怎样才能做到这一点?