我试图制作一个从0.0加到1的计数器,我首先通过fadd实现计数器,然后我在打印浮点数时遇到麻烦。
平台:Alpine Linux Aarch64 (3.20.2)、GNU Binutils (2.42)(从我的 M2 Mac 上的虚拟机运行)
.global _start
.extern printf
.data
string: .asciz "Hello World! %f\n" // Store String
f: .float 1.132 // Store the float 1.132
.text
_start:
loop:
ldr x0, =string // Load String into x0
ldr d1, =f // Load float into d1 (A float reg)
bl printf // Call printf in glibc
b exit // Branch to exit label
exit:
mov x8, #93 // Exit SYSCALL
mov x0, #0 // Exit code
svc 0 // Syscall
build.sh
as main.s -o main.o
ld -lc --dynamic-linker /lib/ld-musl-aarch64.so.1 main.o -o main
输出
Hello World! 0.00000
作者:我也将其发布在 sub reddit r/Assembly_language 中,请有人帮忙。
所以基本上,我需要将ADDR加载到X寄存器中,然后我需要将值加载到S寄存器中,最后我可以使用fcvt(浮点转换精度(标量))将值传输到D寄存器中,由 Glibc printf 函数使用。
代码:
.global _start
.extern printf
.data
format: .asciz "%f\n"
f: .float 1.123
.text
_start:
ldr x0, =format
ldr x2, =f
ldr s0, [x2]
fcvt d0, s0
mov x1, #0
bl printf
mov x8, #93
mov x0, #0
svc 0