Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/assembly/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 程序集-堆栈中的编号_C_Assembly_Att_X87 - Fatal编程技术网

C 程序集-堆栈中的编号

C 程序集-堆栈中的编号,c,assembly,att,x87,C,Assembly,Att,X87,这是我代码的一部分: .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 0x000000

这是我代码的一部分:

.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;
}
#包括
浮动汇率(浮动x);
浮球gx(浮球x);
int main(){
浮动x;
printf(“Podaj wartosc x:”);
scanf(“%f”、&x);
浮动wynik1=fx(x);
浮动wynik2=gx(x);
printf(“\nWynik funkcji f(x)=%f\nWynik funkcji g(x)=%f\n”,wynik1,wynik2);
返回0;
}

您正在加载一个双精度(
fldl
)而不是浮点(
flds
)。

这太简单了。。。谢谢