1
我正在學習使用編程學習asm,但我無法找到任何有關當前問題的幫助。ASM使用C編譯,ASM返回C語言
所以我做了3個文件(2個asm,1個c)。
我想讓我的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(e.x. a1,x1)結尾,並且文件編號2在asm中以2(e.x. 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文件中顯示。取而代之的是我得到了南。我怎樣才能做到這一點?
我改變FSTP x1到ADDF X1,並得到了錯誤 「沒有這樣的指令」。我使用的是Ubuntu 32b。 @edit如果你的意思是faddp增加了一些東西,現在我不知道是什麼,爲什麼。 – 2013-04-20 12:55:58
你能說得更清楚嗎?我應該在哪裏改變它(什麼代碼部分?)? – 2013-04-20 12:56:54
好的男人,我明白了!謝謝 :) – 2013-04-20 13:03:21