浮点数在fasm中返回0,在内联汇编中有效。

4 浏览
0 Comments

浮点数在fasm中返回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