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函数(将整数转换为字符串). (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |