装配 - 来自堆栈的编号
Assembly - number from stack
这是我的代码的一部分:
.data
.text
.global fx
fx:
pushl %ebp
movl %esp,%ebp
finit
fldl 8(%ebp)
我从 C 调用这个函数。因为 8 字节应该有我调用的值,对吗?但是我在gdb中看到的是:
(gdb) info float
=>R7: Valid 0x3bf2bd04000000000000 +1.00272590169167575e-312
R6: Empty 0x00000000000000000000
R5: Empty 0x00000000000000000000
R4: Empty 0x00000000000000000000
R3: Empty 0x00000000000000000000
R2: Empty 0x00000000000000000000
R1: Empty 0x00000000000000000000
R0: Empty 0x00000000000000000000
Status Word: 0x3802 DE
TOP: 7
Control Word: 0x037f IM DM ZM OM UM PM
PC: Extended Precision (64-bits)
RC: Round to nearest
Tag Word: 0x3fff
Instruction Pointer: 0x00:0x0804849b
Operand Pointer: 0x00:0xffffcbb0
Opcode: 0xdd45
这就在 fldl 8(%ebp) 之后。我的朋友制作了相同的程序并且有效。我做错了什么?
下面是我的完整 C 函数:
#include <stdio.h>
float fx(float x);
float gx(float x);
int main(){
float x;
printf("Podaj wartosc x: ");
scanf("%f",&x);
float wynik1 = fx(x);
float wynik2 = gx(x);
printf("\nWynik funkcji f(x)=%f\nWynik funkcji g(x)=%f\n",wynik1,wynik2);
return 0;
}
您加载的是双精度 (fldl
) 而不是浮点 (flds
)。
这是我的代码的一部分:
.data
.text
.global fx
fx:
pushl %ebp
movl %esp,%ebp
finit
fldl 8(%ebp)
我从 C 调用这个函数。因为 8 字节应该有我调用的值,对吗?但是我在gdb中看到的是:
(gdb) info float
=>R7: Valid 0x3bf2bd04000000000000 +1.00272590169167575e-312
R6: Empty 0x00000000000000000000
R5: Empty 0x00000000000000000000
R4: Empty 0x00000000000000000000
R3: Empty 0x00000000000000000000
R2: Empty 0x00000000000000000000
R1: Empty 0x00000000000000000000
R0: Empty 0x00000000000000000000
Status Word: 0x3802 DE
TOP: 7
Control Word: 0x037f IM DM ZM OM UM PM
PC: Extended Precision (64-bits)
RC: Round to nearest
Tag Word: 0x3fff
Instruction Pointer: 0x00:0x0804849b
Operand Pointer: 0x00:0xffffcbb0
Opcode: 0xdd45
这就在 fldl 8(%ebp) 之后。我的朋友制作了相同的程序并且有效。我做错了什么?
下面是我的完整 C 函数:
#include <stdio.h>
float fx(float x);
float gx(float x);
int main(){
float x;
printf("Podaj wartosc x: ");
scanf("%f",&x);
float wynik1 = fx(x);
float wynik2 = gx(x);
printf("\nWynik funkcji f(x)=%f\nWynik funkcji g(x)=%f\n",wynik1,wynik2);
return 0;
}
您加载的是双精度 (fldl
) 而不是浮点 (flds
)。