我正在尝试在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