繁体   English   中英

组件x86 nasm输出浮点值

[英]assembly x86 nasm outputting float values

我正在做一个项目,我需要使用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

这将有效地打印出从键盘输入的值。 但是,当我使用faddfdiv类的float命令处理数字时,为了进行打印,在调用print float函数之前,我必须将mov 1, rax

想法? 使它更简单? 或关于我为什么使用xmm0的解释?

您需要知道所使用的调用约定。 AMD64上的Linux使用System V AMD64 ABI 从该文档中我们了解到:

  • 整数参数在rdi,rsi,rdx,rcx,r8和r9中传递
  • 浮点数在xmm0到xmm7中传递
  • 对于varargs函数,所使用的SSE寄存器的数量放在rax中

所以打电话

printf (format, float_value)

您有rdi = format,xmm0 = float_value和rax = 1。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM