基本信息
文件名称:ARM Cortex-M 系列:ARM Cortex-M3 系列_(3).指令集与编程模型.docx
文件大小:24.83 KB
总页数:21 页
更新时间:2025-06-11
总字数:约8.88千字
文档摘要

PAGE1

PAGE1

指令集与编程模型

指令集概述

ARMCortex-M3处理器使用的是Thumb-2指令集,这是一种混合指令集,结合了16位Thumb指令集和32位ARM指令集的优势。Thumb-2指令集在保持代码密度的同时,提供了高性能的特性,使得Cortex-M3处理器能够在嵌入式系统中高效运行。

Thumb-2指令集的特点

代码密度高:Thumb-2指令集通过使用16位和32位指令的混合,可以在大多数情况下生成比纯32位ARM指令集更紧凑的代码。

性能优越:尽管代码密度高,Thumb-2指令集仍然保持了高性能,特别是在关键路径和循环中。

兼容性好:Thumb-2指令集向下兼容Thumb指令集,可以在现有Thumb代码基础上进行优化和扩展。

可读性强:Thumb-2指令集的设计使得汇编代码更易读和理解。

指令集类型

16位Thumb指令:主要用于简单操作和控制流。

32位ARM指令:用于复杂操作和高性能计算。

编程模型

ARMCortex-M3处理器的编程模型包括了多个寄存器和状态寄存器,这些寄存器用于存储数据、地址和状态信息,是处理器执行指令的基础。

寄存器

通用寄存器:

R0-R12:16位或32位通用寄存器,用于存储数据和地址。

R13(SP):堆栈指针寄存器,用于管理堆栈。

R14(LR):链接寄存器,用于存储子程序返回地址。

R15(PC):程序计数器,指向当前执行的指令地址。

状态寄存器:

CPSR(CurrentProgramStatusRegister):当前程序状态寄存器,包含条件标志、中断禁止位、模式位等。

SPSR(SavedProgramStatusRegister):保存的程序状态寄存器,用于在异常处理过程中保存CPSR的内容。

特殊功能寄存器:

MSP(MainStackPointer):主堆栈指针。

PSP(ProcessStackPointer):进程堆栈指针。

PRIMASK:中断禁止寄存器,用于禁止高优先级中断。

FAULTMASK:故障禁止寄存器,用于禁止所有故障中断。

BASEPRI:基优先级寄存器,用于屏蔽低优先级中断。

CONTROL:控制寄存器,用于选择堆栈指针和特权模式。

寄存器使用示例

通用寄存器

;将R0的值加1,结果存回R0

ADDR0,R0,#1

;将R1的值复制到R2

MOVR2,R1

;将立即数10存入R3

LDRR3,=10

堆栈指针寄存器

;使用主堆栈指针(MSP)

PUSH{R0-R3,LR};将R0-R3和LR压入堆栈

POP{R0-R3,LR};从堆栈弹出R0-R3和LR

;使用进程堆栈指针(PSP)

PUSH{R0-R3,LR}!;将R0-R3和LR压入堆栈,并更新PSP

POP{R0-R3,LR}!;从堆栈弹出R0-R3和LR,并更新PSP

状态寄存器

CPSR

;读取CPSR并存入R0

MRSR0,CPSR

;将R0的值写入CPSR

MSRCPSR,R0

PRIMASK

;禁止高优先级中断

CPSIDi

;使能高优先级中断

CPSIEi

控制寄存器

CONTROL

;选择使用主堆栈指针(MSP)

LDRR0,=0x00;将0x00存入R0

MSRCONTROL,R0;将R0的值写入CONTROL寄存器

;选择使用进程堆栈指针(PSP)

LDRR0,=0x02;将0x02存入R0

MSRCONTROL,R0;将R0的值写入CONTROL寄存器

指令格式

Thumb-2指令集支持多种指令格式,包括16位和32位指令。这些指令格式的设计使得指令集更加灵活和高效。

16位指令格式

数据处理指令:

ADD:加法指令

SUB:减法指令

MOV:移动指令

控制转移指令:

B:分支指令

BL:带链接的分支指令

加载/存储指令:

LDR:加载指令

STR:存储指令

16位指令示例

;将R1的值加1,结果存回R1

ADDR1,R1,#1

;将R2的值减2,结果存回R2

SUBR2,R2,#2

;将立即数