.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 lraddr_of_a: .word a
它编译并运行,但我没有看到任何打印.根据我的理解,我需要在r1中开始打印的地址,r2中的字节数,r0中的文件描述符,以及r7如果设置为#4则指定写入调用.我只是想存储#8,然后打印存储的号码.
解决方法@H_404_18@ syscall write将第二个参数(r1)作为指向要打印的字符串的指针.您正在向它传递一个指向整数的指针,这就是为什么它不打印任何东西,因为您传递给它的内存区域上没有ASCII字符.下面你将找到一个使用syscall写的“Hello World”程序.
.text.global mainmain: push {r7,lr} mov r0,=string mov r2,#12 mov r7,#4 svc #0 pop {r7,pc}.datastring: .asciz "Hello World\n"
如果要打印数字,可以使用C库中的printf函数.像这样:
.text.global main.extern printfmain: push {ip,lr} ldr r0,=string mov r1,#1024 bl printf pop {ip,pc}.datastring: .asciz "The number is: %d\n"
最后,如果要使用syscall write打印数字,还可以实现itoa函数(将整数转换为字符串).
总结以上是内存溢出为你收集整理的linux – 如何在ARM程序集中打印数字?全部内容,希望文章能够帮你解决linux – 如何在ARM程序集中打印数字?所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)