我们的课程练习要求我们在 GNU 汇编中创建一个 delta = b2 - 4ac 函数,并从 C 中访问它。由于这是一门关于编译器的课程,而不是关于汇编的课程,教授选择只演示整数功能,并期望一个整数功能。
但是,我希望个人学习能够超越职责范围,并创建一个返回浮点而不是整数的可用函数。
我想出了这个 C (不要介意全局变量,下一个练习的目的是使用带有参数的适当函数):
# include <stdio.h>
extern float delta();
float a, b, c;
int main() {
a = 3;
b = 5;
c = 4;
printf("δ = %f\n", delta());
return 0;
}
还有这个 GNU GAS:
.globl a
.globl b
.globl c
.globl delta
.f4: .float 4.0 # constante 4
.text
delta:
fld b # b sur la pile
fmul b # b2 sur la pile
fld .f4 # 4 sur la pile
fmul a # 4a sur la pile
fmul c # 4ac sur la pile
fsubp # b2 - 4ac sur la pile
ret
谷歌让我相信我应该在浮点堆栈的顶部留下一个浮点结果,但这不起作用,并且在 C 调用程序中打印的结果总是 0.0000000。
我必须错过一个非常小的东西,但是没有多少谷歌搜索会带来它,有人能指出我正确的方向吗?感谢您的关注。