Сборка - номер из стека

Это часть моего кода:

.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;
}

1 ответ

Решение

Вы загружаете двойной (fldl) вместо поплавка (flds).

Другие вопросы по тегам