ARM基础知识点及简单汇编语法

计算机最小系统是一个能启动并运行基本功能的系统,其组成包括:

  1. 处理器(CPU):执行指令的核心组件。
  2. 内存
    • RAM:存储运行中的程序和数据。
    • ROM:存储引导程序或固件。
  3. 存储:用于存储操作系统和应用程序的设备,如闪存。
  4. 输入输出接口:基本的通信接口,如串行接口(UART)和GPIO(通用输入输出)。
  5. 电源:提供稳定的电力供应。
  6. 基本软件
    • 引导加载程序:初始化系统并加载操作系统。
    • 操作系统:提供任务调度和资源管理功能。

系统级芯片(SoC,System on Chip)是一个集成了多种功能的单芯片解决方案,常用于嵌入式系统和移动设备。一个典型的SoC包含以下几个主要部分:

  1. 中央处理器(CPU)

    • 功能:执行计算和控制任务。可以是单核或多核处理器。
  2. 图形处理单元(GPU)

    • 功能:处理图形渲染和计算任务,适用于图形密集型应用。
  3. 内存

    • RAM(随机存取存储器):用于存储正在执行的程序和数据。
    • ROM(只读存储器):用于存储固件和引导程序。
  4. 存储控制器

    • 功能:管理外部存储设备,如闪存、硬盘或SD卡。
  5. 输入输出接口

    • 常见接口:USB、UART、SPI、I2C、GPIO等。
    • 功能:用于与外部设备和传感器通信。
  6. 无线通信模块

    • 功能:支持无线通信技术,如Wi-Fi、蓝牙、蜂窝网络(4G/5G)等。
  7. 音频处理单元

    • 功能:处理音频输入输出,支持音频编解码。
  8. 视频处理单元

    • 功能:处理视频编解码、视频输出等。
  9. 电源管理模块(PMIC)

    • 功能:管理电源供应,控制电压和功耗。
  10. 传感器接口

    • 功能:接口用于连接各种传感器,如加速度计、陀螺仪等。
  11. 安全模块

    • 功能:提供加密和数据保护功能,确保系统安全。
  12. 接口控制器

    • 功能:管理各种接口的通信协议和数据传输
cpp 复制代码
+--------------------------------+
|              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能够高效地执行程序、处理数据,并与计算机系统的其他组件进行协调。

cpp 复制代码
+--------------------------------+
|             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的类型

  1. SRAM(静态随机存取存储器)

    • 特点:使用触发器存储每一位数据,不需要周期性刷新,速度快,功耗低。
    • 应用:用于CPU缓存等高速存储场景。
    • 优点:更快的存取速度。
    • 缺点:成本高,存储密度低。
  2. DRAM(动态随机存取存储器)

    • 特点:每个位通过电容存储数据,需要周期性刷新以维持数据。
    • 应用:作为计算机主内存使用。
    • 优点:比SRAM便宜,存储密度高。
    • 缺点:速度比SRAM慢,需要刷新。
DRAM的子类型:
  1. SDRAM(同步动态随机存取存储器)

    • 特点:与CPU时钟同步工作,速度比传统DRAM更快。
    • 应用:常用于现代PC的主内存。
  2. DDR SDRAM(双倍数据率同步动态存储器)

    • 特点:每个时钟周期传输两次数据,速度更快。
    • 版本:DDR、DDR2、DDR3、DDR4、DDR5,每一代速度更快,功耗更低。

**ROM(只读存储器,Read-Only Memory)**是一种非易失性存储器,通常用于存储永久性数据,即使断电也能保持数据。它通常包含系统启动固件、固化的操作程序等数据,无法轻易修改或擦除。

ROM的类型

  1. Mask ROM(掩模只读存储器)

    • 特点:在生产时通过掩模直接写入数据,数据永久固定,无法更改。
    • 应用:早期的嵌入式系统、游戏机卡带等。
    • 优点:成本低,量产合适。
    • 缺点:数据无法更改,灵活性差。
  2. PROM(可编程只读存储器,Programmable ROM)

    • 特点:出厂时为空白,用户可以编程一次。编程后,数据不可修改。
    • 应用:一次性编程设备,如某些嵌入式系统。
    • 优点:用户可以自行编程。
    • 缺点:只能编程一次,之后数据无法更改。
  3. EPROM(可擦除可编程只读存储器,Erasable Programmable ROM)

    • 特点:可以通过紫外线擦除数据,然后重新编程。
    • 应用:较早期可重复编程的系统,如旧款嵌入式系统。
    • 优点:数据可以擦除并重新编写。
    • 缺点:擦除过程需要特殊设备(紫外线灯),操作较繁琐。
  4. EEPROM(电可擦除可编程只读存储器,Electrically Erasable Programmable ROM)

    • 特点:可以通过电信号擦除和重新编程,无需紫外线。
    • 应用:用于存储需要经常更新的小量数据的设备,如BIOS、微控制器的固件。
    • 优点:灵活,数据可以反复擦除和编程。
    • 缺点:每次写入有写入次数限制(一般为10万到100万次)。
  5. Flash ROM(闪存)

    • 特点:一种改进型的EEPROM,能够以块为单位擦除和写入数据,读写速度更快,存储密度更高。

    • 应用:U盘、固态硬盘、嵌入式设备的存储芯片。

    • 优点:速度快,支持大容量存储,反复擦写。

    • 缺点 :写入次数有限(通常为数千到数百万次)。

      特性 NOR Flash NAND Flash
      结构 并联存储单元,随机存取 串联存储单元,顺序存取
      读取速度 读速度快,支持XIP(直接执行代码) 读取速度较慢,适合顺序读取
      写入/擦除速度 写入和擦除慢 写入和擦除快
      存储密度 存储密度低,容量较小 存储密度高,适合大容量存储
      成本 成本较高,适合小容量需求 成本较低,适合大容量需求
      可靠性 误码率低,不易出错 误码率高,需ECC纠正
      应用场景 嵌入式系统固件存储、代码执行 大容量存储设备(SSD、U盘、存储卡等)

程序位置 :NOR Flash的物理地址通常映射到处理器的启动地址(如 0x0000_0000),处理器复位后直接从该地址执行代码

IRAM(内部SRAM)的位置

  • 大小:4 KB
  • 物理地 0x4000_00000x4000_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、显示屏等低成本设备。

三级存储结构的分布特点

  1. L1 Cache

    • 位置:CPU内部
    • 特点:最小、最快
    • 作用:缓存最频繁使用的数据和指令
  2. L2 Cache

    • 位置:CPU内部或紧邻CPU
    • 特点:中等大小、较快
    • 作用:缓存更多数据,作为L1和主内存的桥梁
  3. 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),用于处理系统调用或请求特权操作。

异常向量表偏移量

  1. 复位异常(Reset Exception)

    • 偏移量0x00
    • 说明:复位异常向量是异常向量表的第一个条目,当处理器复位时,程序从这个位置开始执行。
  2. 未定义指令异常(Undefined Instruction Exception)

    • 偏移量0x04
    • 说明:处理器遇到未定义的指令时,从这个偏移量处开始执行异常处理程序。
  3. 预取异常(Prefetch Abort Exception)

    • 偏移量0x08
    • 说明:指令获取阶段出现异常时,从这个偏移量处开始执行异常处理程序。
  4. 数据访问异常(Data Abort Exception)

    • 偏移量0x0C
    • 说明:数据访问阶段出现异常时,从这个偏移量处开始执行异常处理程序。
  5. 中断请求(IRQ)

    • 偏移量0x10
    • 说明:处理标准中断请求时,从这个偏移量处开始执行异常处理程序。
  6. 快速中断请求(FIQ)

    • 偏移量0x14
    • 说明:处理高优先级中断请求时,从这个偏移量处开始执行异常处理程序。
  7. 软中断(Software Interrupt, SVC)

    • 偏移量0x18
    • 说明:处理系统调用时,从这个偏移量处开始执行异常处理程序。

当前程序状态寄存器(CPSR)的各位

  1. N (Negative Flag)

    • 位位置:31
    • 说明:表示最近运算结果的符号。若结果为负,N位被置为1;否则,N位为0。
  2. Z (Zero Flag)

    • 位位置:30
    • 说明:表示最近运算结果是否为零。若结果为零,Z位被置为1;否则,Z位为0。
  3. C (Carry Flag)

    • 位位置:29
    • 说明:表示运算是否产生了进位或借位。若有进位或借位,C位被置为1;否则,C位为0。
  4. V (Overflow Flag)

    • 位位置:28
    • 说明:表示运算结果是否溢出。若运算结果超出目标寄存器的表示范围,V位被置为1;否则,V位为0。
  5. I (Interrupt Disable Flag)

    • 位位置:7
    • 说明:控制中断的使能。若I位为1,禁用普通中断(IRQ);若I位为0,允许普通中断。
  6. F (Fast Interrupt Disable Flag)

    • 位位置:6
    • 说明:控制快速中断的使能。若F位为1,禁用快速中断(FIQ);若F位为0,允许快速中断。
  7. T (Thumb State Flag)

    • 位位置:5
    • 说明:指示处理器是否处于Thumb指令模式。若T位为1,处理器处于Thumb模式;若T位为0,处理器处于ARM模式。
  8. M[4:0] (Mode Bits)

    • 位位置:4-0
    • 说明:表示处理器当前的工作模式。具体模式包括用户模式、系统模式、监控模式、FIRQ模式、IRQ模式、未定义模式、数据中止模式和指令中止模式等。

S3C2440是一款基于ARM920T核心的微处理器。支持ARM汇编语言和Thumb汇编语言。

常用汇编语法

1. 数据传送(Data Transfer)

  • MOV:将一个值传送到寄存器
cpp 复制代码
MOV R0, #10        ; 将值10传送到寄存器R0
MOV R1, R0         ; 将寄存器R0的值传送到寄存器R1

LDR:从内存加载数据到寄存器

cpp 复制代码
LDR R0, =0x20000000 ; 将内存地址0x20000000的值加载到寄存器R0
LDR R1, [R0, #4]   ; 从地址R0 + 4处加载数据到寄存器R1

STR:将寄存器的值存储到内存

cpp 复制代码
STR R0, [R1]       ; 将寄存器R0的值存储到内存地址R1

2. 算术操作(Arithmetic Operations)

  • ADD:加法操作
cpp 复制代码
ADD R0, R1, R2     ; R0 = R1 + R2

SUB:减法操作

cpp 复制代码
SUB R0, R1, R2     ; R0 = R1 - R2

MUL:乘法操作

cpp 复制代码
MUL R0, R1, R2     ; R0 = R1 * R2

3. 逻辑操作(Logical Operations)

  • AND:按位与操作
cpp 复制代码
AND R0, R1, R2     ; R0 = R1 & R2

ORR:按位或操作

cpp 复制代码
ORR R0, R1, R2     ; R0 = R1 | R2

EOR:按位异或操作

cpp 复制代码
EOR R0, R1, R2     ; R0 = R1 ^ R2

4. 比较和跳转(Comparison and Branching)

  • CMP:比较操作
cpp 复制代码
CMP R0, R1         ; 比较R0和R1,设置条件标志

BEQ:条件跳转(如果相等)

cpp 复制代码
BEQ label          ; 如果上一条CMP指令结果相等,则跳转到label

BNE:条件跳转(如果不等)

cpp 复制代码
BNE label          ; 如果上一条CMP指令结果不等,则跳转到label

B:无条件跳转

cpp 复制代码
B label            ; 无条件跳转到label

5. 堆栈操作(Stack Operations)

  • PUSH:将寄存器值压入堆栈

    cpp 复制代码
    PUSH {R0, R1}      ; 将寄存器R0和R1的值压入堆栈

    POP:从堆栈中弹出值到寄存器

cpp 复制代码
POP {R0, R1}       ; 从堆栈中弹出值到寄存器R0和R1

6. 控制寄存器和中断

  • MRS:从程序状态寄存器读取值

    cpp 复制代码
    MRS R0, CPSR       ; 将当前程序状态寄存器的值读取到寄存器R0

    MSR:将值写入程序状态寄存器

    cpp 复制代码
    MSR CPSR, R0       ; 将寄存器R0的值写入当前程序状态寄存器

这段ARM汇编代码使用了一些汇编语言的指令和伪指令,具体如下:

1. AREA

cpp 复制代码
AREA reset, code, readonly
  • 功能:定义一个代码区域(代码段)。
  • 参数
    • reset:区域的名称。
    • code:表示这是一个代码段。
    • readonly:指定该区域是只读的,不允许修改。
  1. CODE32
cpp 复制代码
CODE32
  • 功能:指定后续的代码使用32位ARM指令集。
  • 用途:确保汇编器将代码处理为32位ARM模式指令,而不是16位Thumb模式指令。
  1. ENTRY
cpp 复制代码
ENTRY
  • 功能:标记程序的入口点。
  • 用途:指定程序的执行起始位置,通常用于链接器生成可执行文件时。
  1. MOV
cpp 复制代码
MOV r0, #10
MOV r1, #20
MOV r2, #30
  • 功能:将立即数加载到寄存器中。
  • 参数
    • r0, r1, r2:目标寄存器。
    • #10, #20, #30:立即数值,将被加载到对应的寄存器中。
  1. END
cpp 复制代码
END
  • 功能:标记源文件的结束。
  • 用途:指示汇编器这是程序的结束,后续代码将被忽略。

1.区域定义(AREA)

  • 功能:定义代码或数据的内存区域。
cpp 复制代码
AREA section_name, code, readonly

参数

  • section_name:区域名称。
  • code:表示这是一个代码区域。
  • readonly:指定区域为只读。

2.模式设置(CODE32、THUMB、ARM)

  • 功能 :设置指令集模式。

    cpp 复制代码
    CODE32          ; 指定使用32位ARM指令
    THUMB           ; 指定使用16位Thumb指令
    ARM             ; 切换回ARM模式(适用于较老的ARM汇编)

    3.入口点(ENTRY)

  • 功能:标记程序的入口点。

cpp 复制代码
ENTRY

4.宏定义和伪指令(宏、定义等)

  • 功能:定义常量、宏或程序结构。
cpp 复制代码
MACRO name
    ; macro body
ENDM

指令后的语法

  1. 数据定义(数据段)

    • 功能:在代码结束后定义数据。
    cpp 复制代码
    .data
    var1: .word 0x1234 ; 定义一个32位数据

    文件结束(END)

    • 功能:标记汇编代码的结束。
    cpp 复制代码
    END
相关推荐
我们的五年9 分钟前
【Linux课程学习】:进程程序替换,execl,execv,execlp,execvp,execve,execle,execvpe函数
linux·c++·学习
IT果果日记30 分钟前
ubuntu 安装 conda
linux·ubuntu·conda
Python私教33 分钟前
ubuntu搭建k8s环境详细教程
linux·ubuntu·kubernetes
羑悻的小杀马特1 小时前
环境变量简介
linux
小陈phd1 小时前
Vscode LinuxC++环境配置
linux·c++·vscode
是阿建吖!1 小时前
【Linux】进程状态
linux·运维
明明跟你说过2 小时前
Linux中的【tcpdump】:深入介绍与实战使用
linux·运维·测试工具·tcpdump
Komorebi.py3 小时前
【Linux】-学习笔记05
linux·笔记·学习
Mr_Xuhhh3 小时前
重生之我在学环境变量
linux·运维·服务器·前端·chrome·算法
内核程序员kevin6 小时前
TCP Listen 队列详解与优化指南
linux·网络·tcp/ip