linux - 如何在 ARM 程序集中打印数字?

标签 linux gcc assembly arm system-calls

我正在尝试打印我存储的数字。我不确定我是接近还是远离。任何帮助将不胜感激。这是我的代码:

.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/

相关文章:

linux - 在 Jenkins 中运行 Selenium Webdriver 时出错

gcc - GCC + 预编译 header 的堆栈跟踪不正确

c - 如何将 C 代码编译成固件补丁并获取所有函数的位置?

linux - 百胜刚刚停止 woiking 并给出错误

linux - Ubuntu 无法挂载 Windows 硬盘驱动器,即使 Windows 在双启动时正确关闭

linux - 将 jiffies 转换为秒

c - 如何使用U-Boot将应用加载到板子上

c++ - g++ 无法识别 -stdlib=libstdc++

c++ - 这是 g++ 中的优化错误吗?

Cygwin gcc - asm 错误 :