ARM 汇编基础与指令集笔记
在嵌入式开发领域,ARM 汇编是与硬件交互的核心语言之一。了解 ARM 汇编中的符号分类、指令集,以及简单的汇编程序结构,是深入学习 ARM 架构开发的基础。
一、ARM 汇编中的符号
ARM 汇编里有三类关键符号,它们在编译和程序执行过程中扮演不同角色:
- 指令:能编译生成一条 32 位的机器码,并且可被 CPU 识别和执行,是直接控制硬件操作的 “命令”。
- 伪指令:本身并非真正的指令,但编译器可将其替换成若干条实际指令,起到简化编程、提高代码可读性的作用。
- 伪操作:不会生成指令,仅在编译阶段向编译器传达编译规则,比如告诉编译器如何组织代码段、数据段等。
二、ARM 指令集分类
ARM 指令集包含多种类型,以满足不同的操作需求:
- 数据处理指令:主要用于进行数学运算(如加、减、乘、除)和逻辑运算(如与、或、非、异或)。
- 跳转指令:实现程序的跳转功能,本质是修改程序计数器(PC)的值,让程序执行流跳转到指定位置。
- Load/Store 指令:用于访问(读写)内存,实现数据在寄存器和内存之间的传输。
- 状态寄存器传送指令:专门用于访问(读写)CPSR(当前程序状态寄存器),可对程序的运行状态进行设置和查询。
- 软中断指令:用于触发软中断,常被用于实现系统调用等功能,在用户态与内核态之间进行切换。
- 协处理器指令:用于操作协处理器,协处理器可协助主 CPU 完成特定任务,如浮点运算、加密解密等。
三、简单 ARM 汇编程序解析
以下是一段简单的 ARM 汇编程序,可帮助理解汇编程序的基本结构:
@ 表示当前段为代码段
.text
@ 声明 _start 为全局符号,使其能被链接器识别
.global _start
@ 汇编程序的入口,程序从这里开始执行
_start:
@ 将立即数 1 传送到寄存器 R1 中
MOV R1, #1
@ 死循环标签,用于防止程序跑飞
stop:
@ 跳转到 stop 标签处,形成死循环
B stop
.text:表明当前段为代码段,编译器会将后续的指令代码放置在代码段对应的内存区域。.global _start:声明_start为全局符号,这样链接器在链接程序时能找到程序的入口点。_start::是汇编程序的入口,程序执行时首先从这里开始。MOV R1, #1:这是一条数据处理指令,功能是将立即数1传送到寄存器R1中。stop::是一个标签,用于标识死循环的位置。B stop:这是一条跳转指令,会跳转到stop标签所在的位置,由于之后没有其他指令,所以会形成死循环,防止程序在执行完有限指令后 “跑飞”(即执行到不可预测的内存区域)。
668

被折叠的 条评论
为什么被折叠?



