ARM基础知识点及简单汇编语法
计算机最小系统是一个能启动并运行基本功能的系统,其组成包括:
- 处理器(CPU):执行指令的核心组件。
- 内存:
- RAM:存储运行中的程序和数据。
- ROM:存储引导程序或固件。
- 存储:用于存储操作系统和应用程序的设备,如闪存。
- 输入输出接口:基本的通信接口,如串行接口(UART)和GPIO(通用输入输出)。
- 电源:提供稳定的电力供应。
- 基本软件:
- 引导加载程序:初始化系统并加载操作系统。
- 操作系统:提供任务调度和资源管理功能。
系统级芯片(SoC,System on Chip)是一个集成了多种功能的单芯片解决方案,常用于嵌入式系统和移动设备。一个典型的SoC包含以下几个主要部分:
-
中央处理器(CPU):
- 功能:执行计算和控制任务。可以是单核或多核处理器。
-
图形处理单元(GPU):
- 功能:处理图形渲染和计算任务,适用于图形密集型应用。
-
内存:
- RAM(随机存取存储器):用于存储正在执行的程序和数据。
- ROM(只读存储器):用于存储固件和引导程序。
-
存储控制器:
- 功能:管理外部存储设备,如闪存、硬盘或SD卡。
-
输入输出接口:
- 常见接口:USB、UART、SPI、I2C、GPIO等。
- 功能:用于与外部设备和传感器通信。
-
无线通信模块:
- 功能:支持无线通信技术,如Wi-Fi、蓝牙、蜂窝网络(4G/5G)等。
-
音频处理单元:
- 功能:处理音频输入输出,支持音频编解码。
-
视频处理单元:
- 功能:处理视频编解码、视频输出等。
-
电源管理模块(PMIC):
- 功能:管理电源供应,控制电压和功耗。
-
传感器接口:
- 功能:接口用于连接各种传感器,如加速度计、陀螺仪等。
-
安全模块:
- 功能:提供加密和数据保护功能,确保系统安全。
-
接口控制器:
- 功能:管理各种接口的通信协议和数据传输
+--------------------------------+
| SoC |
| |
| +--------------------------+ |
| | CPU | |
| | +--------------------+ | |
| | | 运算单元 | | |
| | | 控制单元 | | |
| | | 寄存器 | | |
| | | 缓存 | | |
| | +--------------------+ | |
| +--------------------------+ |
| |
| +--------------------------+ |
| | GPU | |
| | +--------------------+ | |
| | | 图形处理单元 | | |
| | +--------------------+ | |
| +--------------------------+ |
| |
| +--------------------------+ |
| | 存储控制器 | |
| | +--------------------+ | |
| | | 存储接口 | | |
| | +--------------------+ | |
| +--------------------------+ |
| |
| +--------------------------+ |
| | 无线通信模块 | |
| | +--------------------+ | |
| | | Wi-Fi/Bluetooth | | |
| | | 蜂窝网络 | | |
| | +--------------------+ | |
| +--------------------------+ |
| |
| +--------------------------+ |
| | 音频处理单元 | |
| | +--------------------+ | |
| | | 音频编解码器 | | |
| | +--------------------+ | |
| +--------------------------+ |
| |
| +--------------------------+ |
| | 视频处理单元 | |
| | +--------------------+ | |
| | | 视频编解码器 | | |
| | +--------------------+ | |
| +--------------------------+ |
| |
| +--------------------------+ |
| | 电源管理模块 | |
| | +--------------------+ | |
| | | 电源供应管理 | | |
| | +--------------------+ | |
| +--------------------------+ |
| |
| +--------------------------+ |
| | 传感器接口 | |
| | +--------------------+ | |
| | | 传感器连接 | | |
| | +--------------------+ | |
| +--------------------------+ |
| |
+--------------------------------+
中央处理器(CPU)是计算机系统的核心组件,负责执行指令和处理数据。一个典型的CPU包括以下主要部分:
1. 运算单元
- 算术逻辑单元(ALU):执行基本的算术和逻辑运算(如加法、减法、与、或)。
- 浮点单元(FPU):处理浮点数运算,适用于更复杂的数学计算。
2. 控制单元
- 指令解码器:解析并解码从内存中读取的指令。
- 指令调度器:决定指令执行的顺序,管理指令的发射和调度。
3. 寄存器
- 通用寄存器:存储临时数据和操作数,供运算单元使用。
- 程序计数器(PC):保存下一条将被执行的指令地址。
- 链接寄存器(LR):存储函数调用的返回地址。
- 状态寄存器(CPSR/SPSR):保存处理器状态信息,如中断标志和处理模式。
4. 缓存
- 一级缓存(L1 Cache):位于CPU内部,速度最快,存储最常用的数据和指令。
- 二级缓存(L2 Cache):较大但稍慢,通常与CPU核心共享。
- 三级缓存(L3 Cache):更大、速度较慢,通常在多核心处理器中共享。
5. 总线接口
- 前端总线(Front-Side Bus, FSB):连接CPU与内存和其他系统组件。
- 系统总线:用于CPU与外部设备的通信。
6. 解码与执行单元
- 指令解码单元:将指令翻译为可由ALU和其他单元执行的操作。
- 执行单元:实际执行解码后的指令操作,如算术计算、数据移动等。
7. 分支预测单元
- 分支预测:预测指令流中的分支情况,提高指令执行的效率。
8. 流水线
- 流水线阶段:将指令执行过程分为多个阶段(如取指、解码、执行、写回),允许多条指令同时在不同阶段执行。
9. 中断处理
- 中断控制器:管理来自外部和内部的中断请求,确保及时响应。
10. 时钟生成器
- 时钟发生器:提供时钟信号,协调CPU内部各部分的操作和同步。
这些部分共同工作,使CPU能够高效地执行程序、处理数据,并与计算机系统的其他组件进行协调。
+--------------------------------+
| CPU |
| |
| +--------------------------+ |
| | 控制单元 | |
| | +--------------------+ | |
| | | 指令解码器 | | |
| | +--------------------+ | |
| | | 指令调度器 | | |
| | +--------------------+ | |
| +--------------------------+ |
| |
| +--------------------------+ |
| | 运算单元 | |
| | +--------------------+ | |
| | | 算术逻辑单元 | | |
| | +--------------------+ | |
| | | 浮点单元 | | |
| | +--------------------+ | |
| +--------------------------+ |
| |
| +--------------------------+ |
| | 寄存器 | |
| | +--------------------+ | |
| | | 通用寄存器 | | |
| | | 程序计数器 | | |
| | | 链接寄存器 | | |
| | | 状态寄存器 | | |
| | +--------------------+ | |
| +--------------------------+ |
| |
| +--------------------------+ |
| | 缓存 | |
| | +--------------------+ | |
| | | 一级缓存 (L1) | | |
| | +--------------------+ | |
| | | 二级缓存 (L2) | | |
| | +--------------------+ | |
| | | 三级缓存 (L3) | | |
| | +--------------------+ | |
| +--------------------------+ |
| |
| +--------------------------+ |
| | 总线接口 | |
| | +--------------------+ | |
| | | 前端总线 (FSB) | | |
| | +--------------------+ | |
| | | 系统总线 | | |
| | +--------------------+ | |
| +--------------------------+ |
| |
| +--------------------------+ |
| | 中断处理 | |
| | +--------------------+ | |
| | | 中断控制器 | | |
| | +--------------------+ | |
| +--------------------------+ |
| |
| +--------------------------+ |
| | 时钟生成器 | |
| | +--------------------+ | |
| | | 时钟发生器 | | |
| | +--------------------+ | |
| +--------------------------+ |
+--------------------------------+
1. 通用寄存器(R0-R15)
- R0-R12:通用寄存器,用于存储数据和操作数。这些寄存器可以用于各种计算和数据操作。
- R13:栈指针寄存器(SP,Stack Pointer)。指向当前栈顶,用于栈操作。
- R14:链接寄存器(LR,Link Register)。存储函数调用的返回地址。
- R15:程序计数器(PC,Program Counter)。存储下一条将被执行的指令地址。执行指令时自动更新。
2. 状态寄存器(CPSR和SPSR)
- CPSR(Current Program Status Register):保存当前处理器状态,包括:
- 标志位:如零标志(Z)、进位标志(C)、溢出标志(V)和负标志(N)。
- 控制位:如中断使能位(I、F)、处理器模式(如用户模式、超级模式等)。
- 模式位:控制处理器的工作模式(如ARM模式、Thumb模式)。
- SPSR(Saved Program Status Register):用于保存异常处理程序的状态。当处理器进入中断或异常模式时,CPSR的状态会被保存到SPSR中。恢复状态时,SPSR的内容会被复制回CPSR。
3. 特殊寄存器
- PC(程序计数器):保存当前指令的地址。指令执行后自动更新为下一条指令的地址。
- SP(栈指针):指向当前的栈顶,用于函数调用和局部变量存储。
- LR(链接寄存器):保存函数调用的返回地址,用于函数返回时跳转。
4. 其他寄存器
- 专用寄存器:用于特定任务,如调试和性能计数。
- DBX(Debug Registers):用于调试功能,如设置断点。
- PMCR(Performance Monitor Control Register):用于性能监控和计数。
5. 寄存器使用示例
- 数据操作:R0-R12用于存储操作数和计算结果。
- 函数调用:
- LR保存调用函数的返回地址。
- SP用于管理局部变量和保存函数状态。
- 状态检查:
- CPSR用于检查和控制处理器的状态和模式。
- SPSR用于处理中断和异常。
1. Cortex-A系列(高性能应用处理器):
- 特点:高性能,多核,适用于操作系统和复杂应用处理。
- 应用:智能手机、平板电脑、智能电视等。
- 架构:支持ARMv7-A和ARMv8-A架构,具备高性能浮点运算、NEON SIMD扩展等功能。
2. Cortex-R系列(实时处理器):
- 特点:低延迟,高可靠性,适用于实时计算任务。
- 应用:汽车电子、工业控制、医疗设备等。
- 架构:基于ARMv7-R和ARMv8-R,带有快速中断响应和高安全性。
3. Cortex-M系列(微控制器):
- 特点:低功耗,低成本,简化指令集,适用于嵌入式系统。
- 应用:物联网设备、传感器、家电控制等。
- 架构:基于ARMv6-M、ARMv7-M和ARMv8-M,适合小型嵌入式应用。
1. CPU(中央处理器)
- 功能:执行通用计算任务。
- 应用:电脑、手机、服务器等。
- 特点:多核、多任务、高性能。
2. MPU(微处理器)
- 功能:处理基本运算和控制任务。
- 应用:简单设备(如路由器、家电)。
- 特点:无内部存储,需要外部存储支持。
3. MCU(微控制器)
- 功能:集成CPU、存储器和外设,处理特定控制任务。
- 应用:嵌入式系统、物联网设备。
- 特点:低功耗、低成本。
4. GPU(图形处理器)
- 功能:处理并行图形和数据计算。
- 应用:图形渲染、AI计算。
- 特点:高度并行处理,适合复杂图形和数据密集型任务。
*RAM(随机存取存储器,Random Access Memory)**是一种计算机存储器,用于暂时存储当前正在使用的数据和指令。RAM的读写速度非常快,但断电后数据会丢失。它是计算机和电子设备中重要的工作存储器。
RAM的类型
-
SRAM(静态随机存取存储器)
- 特点:使用触发器存储每一位数据,不需要周期性刷新,速度快,功耗低。
- 应用:用于CPU缓存等高速存储场景。
- 优点:更快的存取速度。
- 缺点:成本高,存储密度低。
-
DRAM(动态随机存取存储器)
- 特点:每个位通过电容存储数据,需要周期性刷新以维持数据。
- 应用:作为计算机主内存使用。
- 优点:比SRAM便宜,存储密度高。
- 缺点:速度比SRAM慢,需要刷新。
DRAM的子类型:
-
SDRAM(同步动态随机存取存储器)
- 特点:与CPU时钟同步工作,速度比传统DRAM更快。
- 应用:常用于现代PC的主内存。
-
DDR SDRAM(双倍数据率同步动态存储器)
- 特点:每个时钟周期传输两次数据,速度更快。
- 版本:DDR、DDR2、DDR3、DDR4、DDR5,每一代速度更快,功耗更低。
**ROM(只读存储器,Read-Only Memory)**是一种非易失性存储器,通常用于存储永久性数据,即使断电也能保持数据。它通常包含系统启动固件、固化的操作程序等数据,无法轻易修改或擦除。
ROM的类型
-
Mask ROM(掩模只读存储器)
- 特点:在生产时通过掩模直接写入数据,数据永久固定,无法更改。
- 应用:早期的嵌入式系统、游戏机卡带等。
- 优点:成本低,量产合适。
- 缺点:数据无法更改,灵活性差。
-
PROM(可编程只读存储器,Programmable ROM)
- 特点:出厂时为空白,用户可以编程一次。编程后,数据不可修改。
- 应用:一次性编程设备,如某些嵌入式系统。
- 优点:用户可以自行编程。
- 缺点:只能编程一次,之后数据无法更改。
-
EPROM(可擦除可编程只读存储器,Erasable Programmable ROM)
- 特点:可以通过紫外线擦除数据,然后重新编程。
- 应用:较早期可重复编程的系统,如旧款嵌入式系统。
- 优点:数据可以擦除并重新编写。
- 缺点:擦除过程需要特殊设备(紫外线灯),操作较繁琐。
-
EEPROM(电可擦除可编程只读存储器,Electrically Erasable Programmable ROM)
- 特点:可以通过电信号擦除和重新编程,无需紫外线。
- 应用:用于存储需要经常更新的小量数据的设备,如BIOS、微控制器的固件。
- 优点:灵活,数据可以反复擦除和编程。
- 缺点:每次写入有写入次数限制(一般为10万到100万次)。
-
Flash ROM(闪存)
- 特点:一种改进型的EEPROM,能够以块为单位擦除和写入数据,读写速度更快,存储密度更高。
- 应用:U盘、固态硬盘、嵌入式设备的存储芯片。
- 优点:速度快,支持大容量存储,反复擦写。
- 缺点:写入次数有限(通常为数千到数百万次)。
特性 NOR Flash NAND Flash 结构 并联存储单元,随机存取 串联存储单元,顺序存取 读取速度 读速度快,支持XIP(直接执行代码) 读取速度较慢,适合顺序读取 写入/擦除速度 写入和擦除慢 写入和擦除快 存储密度 存储密度低,容量较小 存储密度高,适合大容量存储 成本 成本较高,适合小容量需求 成本较低,适合大容量需求 可靠性 误码率低,不易出错 误码率高,需ECC纠正 应用场景 嵌入式系统固件存储、代码执行 大容量存储设备(SSD、U盘、存储卡等)
程序位置:NOR Flash的物理地址通常映射到处理器的启动地址(如 0x0000_0000
),处理器复位后直接从该地址执行代码
IRAM(内部SRAM)的位置
- 大小:4 KB
- 物理地址:
0x4000_0000
到0x4000_0FFF
BGA(球栅阵列封装,Ball Grid Array)
COB(芯片直接封装,Chip on Board)
- **TTL(晶体管-晶体管逻辑,Transistor-Transistor Logic)和CMOS(互补金属氧化物半导体,Complementary Metal-Oxide-Semiconductor)**是两种常见的数字电路技术。
TTL
- 原理:使用双极型晶体管(BJT)进行逻辑运算。
- 特点:
- 速度快:切换速度较快。
- 功耗大:静态功耗较高。
- 耐用性好:抗噪声能力较强。
- 应用:早期计算机、电路系统中常用。
- 原理:使用互补的P型和N型MOSFET进行逻辑运算。
- 特点:
- 低功耗:静态功耗几乎为零。
- 速度较慢:相较TTL,速度稍慢。
- 高集成度:适合大规模集成电路。
- 应用:现代电子设备、微处理器、存储器等。
- TTL:速度快,功耗高,适合抗噪环境。
- CMOS:功耗低,集成度高,广泛应用于现代电子设备。
-
TSOP(薄型小外形封装,Thin Small Outline Package)
- 特点:比SOP更薄,适合高密度布局。
- 应用:用于内存芯片等。
- 特点:引脚为焊球形式分布在芯片底部,适合高引脚数。
- 应用:用于CPU、GPU、内存等高性能芯片。
- 特点:芯片直接粘在PCB上,通过导线连接,封装在树脂中。
- 应用:用于LED、显示屏等低成本设备。
三级存储结构的分布特点
-
L1 Cache
- 位置:CPU内部
- 特点:最小、最快
- 作用:缓存最频繁使用的数据和指令
-
L2 Cache
- 位置:CPU内部或紧邻CPU
- 特点:中等大小、较快
- 作用:缓存更多数据,作为L1和主内存的桥梁
-
L3 Cache
- 位置:CPU芯片内部,核心共享
- 特点:最大、最慢
- 作用:缓存大量数据,减少核心间的数据访问延迟
S3C2440的总线结构
1. 总线类型
- 数据总线:32位宽,用于数据传输。
- 地址总线:32位宽,用于地址传递,支持直接寻址的内存范围。
- 控制总线:用于传输控制信号,如读/写信号、时钟信号、片选信号等。
**2. 总线结构特点
- 系统总线:包括数据总线、地址总线和控制总线,连接CPU、内存和外设。
- 外部总线:用于连接外部存储器(如NAND Flash、NOR Flash)和外部设备(如SDRAM)。
**3. 总线操作
- 总线仲裁:用于管理多个设备对总线的访问,确保数据的正确传输。
- 总线周期:包括地址阶段、数据阶段和控制阶段,用于完成一个读写操作。
**4. 内存总线
- SDRAM总线:用于连接SDRAM,支持高速内存访问。
- NAND Flash总线:用于连接NAND Flash存储器,支持大容量存储。
**5. 外设总线
- SPI总线:用于连接SPI外设,如传感器、通信模块。
- I2C总线:用于连接I2C外设,如EEPROM、RTC模块。
**6. 典型应用
- 嵌入式系统:在智能手机、便携式设备等应用中,S3C2440通过其总线结构高效连接处理器、存储器和外设。
ARM7处理器系列的工作模式包括以下七种
1. 用户模式(User Mode)
- 特点:普通应用程序的运行模式,权限最低。
- 作用:运行用户程序,无法直接访问系统资源或执行特权指令。
2. 快速中断模式(FIQ Mode, Fast Interrupt Request Mode)
- 特点:优先级最高的中断模式,响应时间最短。
- 作用:处理高优先级的中断请求,确保对重要中断的快速响应。
3. 中断模式(IRQ Mode, Interrupt Request Mode)
- 特点:处理普通中断请求,优先级低于FIQ模式。
- 作用:响应外部设备产生的中断,处理标准中断服务。
4. 监控模式(Supervisor Mode, SVC Mode)
- 特点:操作系统内核和系统调用的运行模式,具有较高权限。
- 作用:处理系统调用、异常处理,进行系统级操作。
5. 系统模式(System Mode)
- 特点:类似于用户模式,但具有更高的权限。
- 作用:用于系统内核或需要较高特权的任务,具有特权权限但不完全特权。
6. 中断服务模式(Abort Mode)
- 特点:处理内存访问异常(如预取异常或数据访问异常)的模式。
- 作用:响应和处理内存访问错误,确保系统稳定性。
7. 未定义模式(Undefined Mode, Undef Mode)
- 特点:处理器遇到未定义的指令或非法操作时进入的模式。
- 作用:用于处理未知或非法指令的异常,通常用于引导处理器执行异常处理程序。
ARM9有37个32bit寄存器,contex体系有40个
异常类型
1. 未定义指令异常(Undefined Instruction Exception)
- 触发条件:处理器遇到未定义的指令或无法识别的操作码。
- 处理方式:进入未定义指令模式(Undefined Mode),执行相关的异常处理程序。
2. 预取异常(Prefetch Abort Exception)
- 触发条件:处理器在指令获取阶段访问无效或受保护的内存地址时。
- 处理方式:进入预取异常模式(Prefetch Abort Mode),处理指令获取错误。
3. 数据访问异常(Data Abort Exception)
- 触发条件:处理器在数据访问阶段(读取或写入数据)遇到无效或受保护的内存地址。
- 处理方式:进入数据访问异常模式(Data Abort Mode),处理数据访问错误。
4. 中断请求(IRQ)
- 触发条件:外部设备产生的标准中断请求。
- 处理方式:进入中断请求模式(IRQ Mode),处理外部中断。
5. 快速中断请求(FIQ)
- 触发条件:外部设备产生的高优先级中断请求。
- 处理方式:进入快速中断请求模式(FIQ Mode),以更高的优先级和更快的响应时间处理中断。
6. 复位异常(Reset Exception)
- 触发条件:处理器接收到复位信号(如硬件复位)。
- 处理方式:处理器重新初始化,执行复位处理程序,通常进入系统模式(System Mode)。
7. 软中断(Software Interrupt, SVC)
- 触发条件:通过指令
SVC
(Supervisor Call)触发,通常用于系统调用。 - 处理方式:进入监控模式(Supervisor Mode),用于处理系统调用或请求特权操作。
异常向量表偏移量
-
复位异常(Reset Exception)
- 偏移量:
0x00
- 说明:复位异常向量是异常向量表的第一个条目,当处理器复位时,程序从这个位置开始执行。
- 偏移量:
-
未定义指令异常(Undefined Instruction Exception)
- 偏移量:
0x04
- 说明:处理器遇到未定义的指令时,从这个偏移量处开始执行异常处理程序。
- 偏移量:
-
预取异常(Prefetch Abort Exception)
- 偏移量:
0x08
- 说明:指令获取阶段出现异常时,从这个偏移量处开始执行异常处理程序。
- 偏移量:
-
数据访问异常(Data Abort Exception)
- 偏移量:
0x0C
- 说明:数据访问阶段出现异常时,从这个偏移量处开始执行异常处理程序。
- 偏移量:
-
中断请求(IRQ)
- 偏移量:
0x10
- 说明:处理标准中断请求时,从这个偏移量处开始执行异常处理程序。
- 偏移量:
-
快速中断请求(FIQ)
- 偏移量:
0x14
- 说明:处理高优先级中断请求时,从这个偏移量处开始执行异常处理程序。
- 偏移量:
-
软中断(Software Interrupt, SVC)
- 偏移量:
0x18
- 说明:处理系统调用时,从这个偏移量处开始执行异常处理程序。
- 偏移量:
当前程序状态寄存器(CPSR)的各位
-
N (Negative Flag)
- 位位置:31
- 说明:表示最近运算结果的符号。若结果为负,N位被置为1;否则,N位为0。
-
Z (Zero Flag)
- 位位置:30
- 说明:表示最近运算结果是否为零。若结果为零,Z位被置为1;否则,Z位为0。
-
C (Carry Flag)
- 位位置:29
- 说明:表示运算是否产生了进位或借位。若有进位或借位,C位被置为1;否则,C位为0。
-
V (Overflow Flag)
- 位位置:28
- 说明:表示运算结果是否溢出。若运算结果超出目标寄存器的表示范围,V位被置为1;否则,V位为0。
-
I (Interrupt Disable Flag)
- 位位置:7
- 说明:控制中断的使能。若I位为1,禁用普通中断(IRQ);若I位为0,允许普通中断。
-
F (Fast Interrupt Disable Flag)
- 位位置:6
- 说明:控制快速中断的使能。若F位为1,禁用快速中断(FIQ);若F位为0,允许快速中断。
-
T (Thumb State Flag)
- 位位置:5
- 说明:指示处理器是否处于Thumb指令模式。若T位为1,处理器处于Thumb模式;若T位为0,处理器处于ARM模式。
-
M[4:0] (Mode Bits)
- 位位置:4-0
- 说明:表示处理器当前的工作模式。具体模式包括用户模式、系统模式、监控模式、FIRQ模式、IRQ模式、未定义模式、数据中止模式和指令中止模式等。
S3C2440是一款基于ARM920T核心的微处理器。支持ARM汇编语言和Thumb汇编语言。
常用汇编语法
1. 数据传送(Data Transfer)
-
MOV:将一个值传送到寄存器
MOV R0, #10 ; 将值10传送到寄存器R0
MOV R1, R0 ; 将寄存器R0的值传送到寄存器R1
LDR:从内存加载数据到寄存器
LDR R0, =0x20000000 ; 将内存地址0x20000000的值加载到寄存器R0
LDR R1, [R0, #4] ; 从地址R0 + 4处加载数据到寄存器R1
STR:将寄存器的值存储到内存
STR R0, [R1] ; 将寄存器R0的值存储到内存地址R1
2. 算术操作(Arithmetic Operations)
-
ADD:加法操作
ADD R0, R1, R2 ; R0 = R1 + R2
SUB:减法操作
SUB R0, R1, R2 ; R0 = R1 - R2
MUL:乘法操作
MUL R0, R1, R2 ; R0 = R1 * R2
3. 逻辑操作(Logical Operations)
-
AND:按位与操作
AND R0, R1, R2 ; R0 = R1 & R2
ORR:按位或操作
ORR R0, R1, R2 ; R0 = R1 | R2
EOR:按位异或操作
EOR R0, R1, R2 ; R0 = R1 ^ R2
4. 比较和跳转(Comparison and Branching)
-
CMP:比较操作
CMP R0, R1 ; 比较R0和R1,设置条件标志
BEQ:条件跳转(如果相等)
BEQ label ; 如果上一条CMP指令结果相等,则跳转到label
BNE:条件跳转(如果不等)
BNE label ; 如果上一条CMP指令结果不等,则跳转到label
B:无条件跳转
B label ; 无条件跳转到label
5. 堆栈操作(Stack Operations)
-
PUSH:将寄存器值压入堆栈
PUSH {R0, R1} ; 将寄存器R0和R1的值压入堆栈
POP:从堆栈中弹出值到寄存器
POP {R0, R1} ; 从堆栈中弹出值到寄存器R0和R1
6. 控制寄存器和中断
-
MRS:从程序状态寄存器读取值
MRS R0, CPSR ; 将当前程序状态寄存器的值读取到寄存器R0
MSR:将值写入程序状态寄存器
MSR CPSR, R0 ; 将寄存器R0的值写入当前程序状态寄存器
这段ARM汇编代码使用了一些汇编语言的指令和伪指令,具体如下:
1. AREA
AREA reset, code, readonly
- 功能:定义一个代码区域(代码段)。
- 参数:
reset
:区域的名称。code
:表示这是一个代码段。readonly
:指定该区域是只读的,不允许修改。
2. CODE32
CODE32
- 功能:指定后续的代码使用32位ARM指令集。
- 用途:确保汇编器将代码处理为32位ARM模式指令,而不是16位Thumb模式指令。
3. ENTRY
ENTRY
- 功能:标记程序的入口点。
- 用途:指定程序的执行起始位置,通常用于链接器生成可执行文件时。
4. MOV
MOV r0, #10
MOV r1, #20
MOV r2, #30
- 功能:将立即数加载到寄存器中。
- 参数:
r0
,r1
,r2
:目标寄存器。#10
,#20
,#30
:立即数值,将被加载到对应的寄存器中。
5. END
END
- 功能:标记源文件的结束。
- 用途:指示汇编器这是程序的结束,后续代码将被忽略。
1.区域定义(AREA)
- 功能:定义代码或数据的内存区域。
AREA section_name, code, readonly
参数:
- section_name:区域名称。
- code:表示这是一个代码区域。
- readonly:指定区域为只读。
2.模式设置(CODE32、THUMB、ARM)
- 功能:设置指令集模式。
CODE32 ; 指定使用32位ARM指令 THUMB ; 指定使用16位Thumb指令 ARM ; 切换回ARM模式(适用于较老的ARM汇编)
3.入口点(ENTRY)
- 功能:标记程序的入口点。
ENTRY
4.宏定义和伪指令(宏、定义等)
- 功能:定义常量、宏或程序结构。
MACRO name
; macro body
ENDM
指令后的语法
-
数据定义(数据段)
- 功能:在代码结束后定义数据。
-
.data var1: .word 0x1234 ; 定义一个32位数据
文件结束(END)
- 功能:标记汇编代码的结束。
-
END
原文地址:https://blog.csdn.net/a8687216/article/details/142340869
免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!