加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > Linux > 正文

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

发布时间:2020-12-14 01:12:07 所属栏目:Linux 来源:网络整理
导读:我正在尝试打印我存储的数字.我不确定我是否亲近或离开.任何帮助将不胜感激.这是我的代码: .data.balign 4a: .word 4.text.global mainmain: 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 lrad
我正在尝试打印我存储的数字.我不确定我是否亲近或离开.任何帮助将不胜感激.这是我的代码:

.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,然后打印存储的号码.

解决方法

syscall write将第二个参数(r1)作为指向要打印的字符串的指针.您正在向它传递一个指向整数的指针,这就是为什么它不打印任何东西,因为您传递给它的内存区域上没有ASCII字符.

下面你将找到一个使用syscall写的“Hello World”程序.

.text
.global main
main:
        push {r7,lr}

        mov r0,=string
        mov r2,#12
        mov r7,#4
        svc #0

        pop {r7,pc}

.data
string: .asciz "Hello Worldn"

如果要打印数字,可以使用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: %dn"

最后,如果要使用syscall write打印数字,还可以实现itoa函数(将整数转换为字符串).

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读