.data
temp real4 ?
fmtStr byte 'Result is: %d', 10, 0
fmtStr2 byte 'Result is: %f', 10, 0
i real4 ?
.code
printFloat proc
sub rsp, 20h
movsd xmm1, [temp]
lea rcx, fmtStr2
call printf
add rsp, 20h;
ret
printFloat endp
字符串
结果总是0.0000000。我如何得到像5.3434这样的real4值
1条答案
按热度按时间oxalkeyp1#
这里有些虫子。
temp
是一个real4
,但它应该是一个real8
,或者它可以保持一个real4
,但我们需要将它转换为一个double传递给printf
(varargs函数不接受浮点数,它们必须是double)。浮点参数也必须复制到相应的整数参数中,因此在本例中为
rdx
。另外,从
rsp
中减去20h
是错误的,它会使堆栈不对齐,printf
可能不喜欢这样(它在我的系统上不喜欢这样)。如果你在这里有它,你也可能在其他函数中有它,有些组合会意外地导致正确的对齐,但原因是错误的。你展示的代码从来没有给
temp
分配一个非零值,但我假设你在其他地方这样做了。这段代码为我工作:
字符串