1

下面的代码总是返回 0.0000000。我不知道它为什么这样做。

这是代码

SECTION .data
flt1:   dq  5.327
formatin: db "%f", 0
SECTION .bss

SECTION .text
   global _main 

   extern _scanf 
   extern _printf     

_main:

    push ebp
    mov ebp, esp
push dword[flt1]    

push formatin
call _printf
add esp, 8


    mov esp, ebp
    pop ebp
    ret

你能帮我解决这个问题,这样我就可以显示带小数点的数字

4

1 回答 1

1

在 c 函数调用中,float被提升为double. 您还声明flt1dq, 一个双精度数。所以无论如何,你需要传递一个 64 位类型。如果您在 64 位系统上,只需使用push qword[flt1]. 如果您在 32 位系统上,则必须改用fld. 因为您的参数大小不同,所以您将不得不使用add esp, 12而不是add esp, 8

于 2017-05-13T14:38:40.637 回答