So drucken Sie einen Gleitkomma mit einfacher Genauigkeit mit printf

Ich versuche, eine Gleitkommazahl in einer x86_64-Assembly zu drucken, aber es wird nur der Wert Null ausgegeben.

Dazu gibt es schon ein paar fragen. Man schien gelöst zu sein, indem man dafür sorgte, dassSie legen die Anzahl der verwendeten Vektorregister in% al @ fe. Ein anderer zeigte, dass Sie müssen eine Stapelausrichtung von 16 Bytes haben. Aber ich mache beides und erhalte immer noch keine korrekte Ausgabe.

Das ist mein Programm:

# 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

Antworten auf die Frage(2)

Ihre Antwort auf die Frage