.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 值
这里有一些错误。
temp
是一个real4
,但它应该是一个real8
,或者它可以保留一个real4
,但我们需要将其转换为双精度型以将其传递给printf
(可变参数函数不接受浮动,它们必须是双的)。
浮点参数也必须复制到相应的整数参数中,因此在这种情况下
rdx
。
此外,从
20h
中减去 rsp
是错误的,它会使堆栈未对齐,而 printf
可能不喜欢这样(它在我的系统上不喜欢这样)。如果你在这里有这个,你也可能在其他函数中也有它,并且某些组合无论如何都会意外地导致正确的对齐,但出于错误的原因。
您显示的代码从未将非零分配给
temp
,但我假设您在其他地方这样做了。
这段代码对我有用:
.data
temp real8 5.4321
fmtStr2 byte 'Result is: %f', 10, 0
.code
extrn printf : proc
printFloat proc
sub rsp, 28h
movsd xmm1, [temp]
mov rdx, [temp]
lea rcx, fmtStr2
call printf
add rsp, 28h
ret
printFloat endp
end