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

linux – 如何在ARM程序集中打印数字?,第1张

概述我正在尝试打印我存储的数字.我不确定我是否亲近或离开.任何帮助将不胜感激.这是我的代码: .data.balign 4a: .word 4.text.global mainmain: ldr r0, addr_of_a mov r1, #8 str r1, [r0]write: mov r0, #1 ld 我正在尝试打印我存储的数字.我不确定我是否亲近或离开.任何帮助将不胜感激.这是我的代码:

.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程序集中打印数字?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/1026616.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-23
下一篇 2022-05-23

发表评论

登录后才能评论

评论列表(0条)

保存