我正在尝试打印我存储的数字。我不确定我是接近还是远离。任何帮助将不胜感激。这是我的代码:
.data
.balign 4
a: .word 4
.text
.global main
main:
ldr r0, addr_of_a
mov r1, #8
str r1, [r0]
write:
mov r0, #1
ldr r1, addr_of_a
mov r2, #4
mov r7, #4
swi #0
bx lr
addr_of_a: .word a
它编译并运行,但我没有看到任何打印出来的东西。据我了解,我需要在 r1 中开始打印的地址,r2 中有多少字节,r0 中的文件描述符,以及 r7 如果设置为 #4 则指定写入调用。我只是想存储 #8,然后打印存储的数字。
最佳答案
系统调用 write 将第二个参数 (r1) 作为指向要打印的字符串的指针。您向它传递了一个指向整数的指针,这就是它不打印任何内容的原因,因为您传递给它的内存区域上没有 ASCII 字符。
您将在下面找到一个使用系统调用写入的“Hello World”程序。
.text
.global main
main:
push {r7, lr}
mov r0, #1
ldr r1, =string
mov r2, #12
mov r7, #4
svc #0
pop {r7, pc}
.data
string: .asciz "Hello World\n"
如果你想打印一个数字,你可以使用 C 库中的 printf 函数。像这样:
.text
.global main
.extern printf
main:
push {ip, lr}
ldr r0, =string
mov r1, #1024
bl printf
pop {ip, pc}
.data
string: .asciz "The number is: %d\n"
最后,如果你想用系统调用 write 打印数字,你也可以实现一个 itoa 函数(一个将整数转换为字符串的函数)。
关于linux - 如何在 ARM 程序集中打印数字?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17357467/