嵌入式 ARM 设计编程 (二) 字符串拷贝
文章和代码已归档至【Github 仓库:hardware-tutorial】,需要的朋友们自取。或者关注公众号【AIShareLab】,回复 嵌入式 也可获取。
一、实验目的
通过实验掌握使用 LDB/STB,b 等指令完成较为复杂的存储区访问和程序分支,学习使用条件码
二、实验环境
硬件:PC 机
软件:ADS1.2 集成开发环境
三、实验内容
熟悉开发环境的使用并完成一块存储区的拷贝。
完成分支程序设计,要求判断参数,根据不同参数,调用不同的子程序。
四、实验要求
按照 2.3 节介绍的方法, 在 ADS 下创建一个工程 asmlab2,定义两个数据存储区 Src 和 Dst,Src 用于存放原字符串,Dst 用于存放目的字符串。堆栈地址 0x400,将变量原字符串的内容拷贝到目的字符串中,要能判断原字符串的结束符(0),并统计字符串中字符的个数。通过 AXD 查看寄存器和 memory 和寄存器中数据变化。
在指令后面加上适当注释,说明指令功能。
指出程序执行完成后各相关寄存器及存储器单元的具体内容。
五、实验完成情况:
1、实验源代码(含注释):
2、实验过程(含结果截图及相应文字解释):
定义两个数据存储区 Src 和 Dst,Src 用于存放原字符串,Dst 用于存放目的字符串。堆栈地址 0x400,将变量原字符串的内容拷贝到目的字符串中,要能判断原字符串的结束符(0),并统计字符串中字符的个数。通过 AXD 查看寄存器和 memory 和寄存器中数据变化。
通过存储器可见,内容正在逐渐地进行拷贝。过程如下:
直到拷贝过程结束,实验结束后存储单元中的内容如下:
相关寄存器中的具体内容如下所示:
练习题:
编写程序循环对 R4~R11 进行累加 8 次赋值,R4~R11 起始值为 1~8,每次加操作后把 R4~R11 的内容放入 SP 栈中,SP 初始设置为 0x800。最后把 R4~R11 清空赋值为 0。
提示:多字的加载与存储使用多寄存器寻址,使用的指令为 LDM 和 STM。如:
编写实验代码如下:
实验初始时,寄存器中内容如下:
实验结束后,寄存器中的内容如下:
欢迎关注公众号【AIShareLab】,一起交流更多相关知识,前沿算法,Paper 解读,项目源码,面经总结。
版权声明: 本文为 InfoQ 作者【timerring】的原创文章。
原文链接:【http://xie.infoq.cn/article/74df4b8e2c3ed46445fb8f127】。未经作者许可,禁止转载。
评论