为了账号安全,请及时绑定邮箱和手机立即绑定

如何使用printf打印单精度浮点数

/ 猿问

如何使用printf打印单精度浮点数

我正在尝试在x86_64程序集中打印浮点数,但它只会将值打印为零。


已经有一些问题了。通过确保您在%al中设置要使用的向量寄存器数,似乎可以解决该问题。另一个表明您需要16个字节的堆栈对齐。但是,我同时做这些事情,仍然没有得到正确的输出。


这是我的程序:


# prints a floating point value

.section .rodata

.fmt: .string "num: %f\n"

.num: .float 123.4


.section .text

.global main

.type   main, @function

main:

  subq $8, %rsp     # 16-byte alignment


  # print my number

  movss .num, %xmm0 # load float value

  movq $.fmt, %rdi  # load format string

  movb $1, %al      # use 1 vector register

  call printf


  # exit

  addq $8, %rsp     # undo alignment

  movq $0, %rax     # return 0

  ret


查看完整描述

2 回答

?
LEATH

是的,这不是显而易见的。我忘记了,但可能甚至无法float在C中将传递给var-args函数。升级规则将转换指定为double。我希望,如果可能的话,至少GNU C会有一个格式说明符。(就像%hf什么)。对我来说,我实际上只是通过查看asm来解决此限制,因为否则编译器将始终为您进行转换。(此外,实际上是因为不想打印float具有%a十六进制样式的格式

查看完整回答
反对 2019-12-06
  • 2 回答
  • 0 关注
  • 207 浏览
慕课专栏
更多

添加回答

回复

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信