我正在处理一个项目,我需要使用C中的printf
输出浮点值。
我现在可以打印出这些值,但我不确定打印是如何进行的。
对于打印int值,我只需按下数据类型和位置,打印就可以了。
但对浮动来说,这是一个完全不同的故事。
以下是打印浮动的代码
mov qword rdi, float_format
push qword 0
push r14
movsd xmm0, [rsp]
mov qword rax, 1
call printf
pop rax
pop rax
这将有效地打印出从键盘输入的值。但是,当我使用fadd
或fdiv
之类的浮点命令操作数字时,为了打印输出,在调用print float函数之前,我必须mov 1, rax
想法?为了简单起见?或解释为什么我使用xmm0?
答案 0 :(得分:1)
您需要知道正在使用的调用约定。 AMD64上的Linux使用System V AMD64 ABI。从该文件中我们了解到:
所以对于电话
printf (format, float_value)
你有rdi = format,xmm0 = float_value和rax = 1.