我是新来的汇编编程,并作为一个更大的计划我需要传递浮点值到其他C-功能的一部分。 我从我的测试程序调用我的汇编函数,只有推右栈上的参数,并调用第二个C函数。
我的C测试功能:
extern void ext_func(char *result, double d); // C function
extern double tester(char *str, float d);
double a = tester(str, 3.14)
printf("%s\n", str); // Resulting in '0.000000'
// doing some fancy stuff with the float value and puts in result
ext_func(str, 3.14); // gives str = "3.140000"
86,GCC -m32:
.globl tester
tester:
pushl %ebp # Standard
movl %esp, %ebp #
flds 12(%ebp) # Push second parameter on stack
pushl 8(%ebp)
call ext_func
addl $4, %esp
leave
ret
我想,那里有一个问题,我只推32位时ext_funct
预期的两倍。 但我试图FLD1启动,FLD1,fildl,FLD1启动12和16(%EBP),以及一些其他的为“好玩”。
- 我的第一个问题是,缺少ext_func浮动堆栈(ST)的一些数据,因此是不能够使浮点值?(我知道你没有被调用函数,但事情的功能是什么犯规?)
- 其次,该编译器永诺去到F-堆栈获得浮点值,如果它希望它们呢,还是可以从memorystack读?
- 第三,还有其他seomething我在这里失踪? 如果我
printf("%f", a); //3.140000
printf("%f", str); //3.140000
但另一种方式a
给出了000000结束大是负面的数量(100位左右)。