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
Assembly nasm中的浮点运算_Assembly_Nasm - Fatal编程技术网

Assembly nasm中的浮点运算

Assembly nasm中的浮点运算,assembly,nasm,Assembly,Nasm,下面的代码始终返回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

下面的代码始终返回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

你能帮我解决这个问题吗?这样我就可以在c函数调用中显示带小数点的数字了,
float
被提升为
double
。您还将
flt1
声明为
dq
,一个双精度。所以不管怎样,您都需要传递一个64位类型。如果您使用的是64位系统,只需使用
push-qword[flt1]
。如果您使用的是32位系统,则必须改用
fld
。由于参数大小不同,因此您必须在windows 8上的nasm x86中使用
add esp,12
而不是
add esp,8

。C惯例是将
float
作为
double
传递。尝试在32位模式下推送qword[flt1]@wallyk。没有推送qword的
fld
/
fstp
,SSE/MMX,或仅作为2个DWORD。此外,还必须调整
add esp,8
。scanf的参数是号码的地址,而不是号码。(K&R称之为“最常见的错误”)尝试推送flt1。如前所述,
printf
总是想要一个双精度的。