深入探索汇编函数在C与C++程序中的应用
一、浮点返回值的使用
在编程中,浮点返回值是一个特殊的情况。整数和字符串返回值通常使用EAX寄存器将值从汇编语言函数返回到C调用程序。但如果要返回浮点值,情况就有所不同了。
C风格的函数使用ST(0) FPU寄存器在函数之间传递浮点值。函数将返回值放在FPU栈上,调用程序负责从栈中弹出该值并将其赋给变量。由于浮点值在放入FPU栈时总是转换为双扩展精度,所以无论原始值是什么浮点数据类型,或者C程序使用什么浮点数据类型来存储结果值,FPU都会进行适当的转换。
C和C++程序使用两种数据类型来表示浮点值:
- float:表示单精度浮点值
- double:表示双精度浮点值
这两种数据类型都可以用于从FPU栈中检索结果值,而不管汇编语言函数使用什么精度将值放入FPU栈。
在C程序中使用返回浮点值的函数时,必须定义函数原型,规则与字符串返回值原型相同。例如:
float function1(float, float, int);
这个例子定义了一个需要三个输入值(两个单精度浮点值和一个整数值)并返回单精度浮点值的函数。如果C变量必须使用双精度,则必须使用double返回类型:
double function1(double, int);
以下是一个使用浮点返回值的示例, areafunc.s 函数按C返回值风格编写:
<
超级会员免费看
订阅专栏 解锁全文
32

被折叠的 条评论
为什么被折叠?



