arm可以在c语言中用吗,c – 如何在ARM中使用字符串?

本文解答了如何在ARM汇编中正确处理C程序中的字符串参数,包括理解如何将字符串存储在寄存器和堆栈,以及使用间接寻址访问字符串内容。重点介绍了字符串作为指针传递的方法和实际操作步骤,如'HalloAllesklar'例子中的字节处理技巧。
摘要由CSDN通过智能技术生成

这是一个家庭作业问题.坦率地说,我不确定C程序如何向程序集级别提供字符串参数.

我有这个功能

StringSearchInString(text,searchString);

和参数

text =“Hallo Alles klar”

searchString =“ll”

我知道ARM分别为文本,searchString将参数传递到寄存器R0,R1中,但是我不确定它如何与charactesr一起工作.如果每个字符的长度为8位,那么寄存器将被传入的字符串无情地屠杀.

我已经读过ARM APCS将参数转换为字,其中前4个字节存储在寄存器中,其余的以相反的顺序加载到堆栈中.

Sooo ……什么?我不明白这一点.字符串文本将存储在R0中,前四个字节,“Hall”存储在R0中,其余字节以相反的顺序存储在堆栈中?我明白了吗?我怎么称呼他们?

TL; DR:如何将C-Program中的字符串参数传递给汇编语件,如何使用它来加载/加载/执行操作?

回答:

在远程情况下,任何人都在寻找解决方案,这里是:

正如Greg Hewgill所说,字符串作为指向字符串的指针传递.因此,R0中的值是字符串的地址.因此,您使用间接寻址来访问值,如下所示:

StringSearchInString( text, searchString ); // calls the ARM function...

//Going into the ARM function...

LDRB R4, [R0], #1 // Load the first value of R0 into R4 and skip

// ahead one character(8 bits)

// Note the "B" in LDR. It indicates that you load ONLY 1 byte!

MOV R0, R4 // Move the value of R4 into R0. This destroys the pointer

// Stored in R0! Careful!

而且成功!如果你的字符串是像我一样的“hallo Alles klar”,你将把0x68加载到寄存器R0中.这是“h”的ASCII值.从这里你应该能够开始使用字符串.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值