ARM指令集详解:从简单的ARM程序到寻址方式
需积分: 10 158 浏览量
更新于2024-07-13
收藏 2.79MB PPT 举报
"该资源是北航嵌入式系统课件中的第四章,主题是ARM指令集,主要讲解了ARM7TDMI(-S)处理器的指令系统和寻址方式。内容包括ARM指令集的概述, Thumb指令集的特点,以及ARM处理器的9种基本寻址方式。通过一个简单的ARM程序实例,展示了如何编写和执行ARM汇编语言程序。"
在本课件中,ARM处理器的寻址方式是一个核心概念,包括9种基本类型:
1. **寄存器寻址**:操作数直接位于寄存器中,如`MOV R1, R2`指令将R2寄存器的值移动到R1。
2. **立即寻址**:操作数是指令中的立即数,如`MOV R0, #10`将数值10移动到R0。
3. **寄存器移位寻址**:操作数是寄存器中的值经过移位得到,如`LSL R3, R4, #2`左移R4的值2位后存入R3。
4. **寄存器间接寻址**:通过寄存器中的值作为内存地址访问数据,如`LDR R5, [R6]`从R6指定的内存地址加载数据到R5。
5. **基址寻址**:结合寄存器和偏移量来访问内存,如`LDR R0, [R1, #4]`从R1加4的地址处加载数据到R0。
6. **多寄存器寻址**:一次性操作多个连续的寄存器,如`STMIA R0!, {R1-R4}`将R1至R4的内容存储到由R0指向的内存地址,并更新R0。
7. **堆栈寻址**:使用堆栈指针寄存器进行操作,如`PUSH {R0, R1}`将R0和R1压入堆栈。
8. **块拷贝寻址**:批量复制内存块,如`LDMIA R0!, {R1-R5}`从R0指定的地址加载一系列寄存器并更新R0。
9. **相对寻址**:在分支指令中,计算相对于当前指令地址的偏移进行跳转。
此外,课件提到了ARM指令集的两种形式:32位的ARM指令集和16位的Thumb指令集。ARM指令集效率高但代码密度低,适合高性能应用;而Thumb指令集代码密度高,性能接近ARM,适合节省空间。ARM指令集的所有指令都可有条件执行,而Thumb指令集中只有一条指令有条件执行。ARM和Thumb程序之间可以无缝切换,切换开销极小。
通过示例程序TEST1.S,我们可以看到一个简单的ARM程序是如何实现两个寄存器相加的。程序使用了`MOV`指令设置初始值,`BL`指令调用子程序,`ADDS`指令执行加法,`MOV PC, LR`用于子程序返回,以及`B`指令实现循环。整个程序使用了ARM指令集,并使用ARMulate软件进行仿真调试。
在理解这些基础知识后,开发者可以进一步学习如何编写和优化ARM架构下的嵌入式程序,提升嵌入式系统的性能和效率。
284 浏览量
577 浏览量
634 浏览量
148 浏览量
199 浏览量
2021-06-17 上传
2021-04-22 上传
getsentry
- 粉丝: 28
- 资源: 2万+
最新资源
- QuantitativeRiskSim:定量风险模拟工具
- 【机器学习实战】第十章 K-Means算法数据集-数据集
- oxefmsynth:Oxe FM Synth 官方仓库
- emailwhois:使用Python在所有已知域中查找电子邮件域(@ example.com)
- rary:lib + rary + .so
- QYBot:契约机器人框架
- 3D打印的恶作剧振动杯-项目开发
- UQCMS云商-B2B2C系统 v1.1.17101822
- jekyll-liquid-plus:用于更智能 Jekyll 模板的超强液体标签
- 使用springmvc框架编写helloworld,使用eclispe开发工具
- apollo-mobx:使用React高阶组件的Apollo MobX映射...以及更多
- Fivek.github.io
- DrawTree.rar
- 用verilog语言编写的交通灯控制器实现.rar
- 和弦音乐-复仇者联盟-项目开发
- dbcopier:将数据从一个 MySQL 数据库表复制到另一个