为什么将float移动到xmm0会导致输出为0?

8 浏览
0 Comments

为什么将float移动到xmm0会导致输出为0?

我试图在x86_64汇编中打印一个浮点数,但是它只打印出零值。

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

这是我的程序:

# 打印一个浮点数值
.section .rodata
.fmt: .string "num: %f\n"
.num: .float 123.4
.section .text
.global main
.type   main, @function
main:
  subq $8, %rsp     # 16字节对齐
  # 打印我的数字
  movss .num, %xmm0 # 加载浮点数值
  movq $.fmt, %rdi  # 加载格式字符串
  movb $1, %al      # 使用1个向量寄存器
  call printf
  # 退出
  addq $8, %rsp     # 撤销对齐
  movq $0, %rax     # 返回0
  ret

0