第1章概述续表1-2操作汇编指令保存基址寄存器地址与12位立即数偏移的和LDRSB.W<Rxf>,[<Rn>,#<offset_12>]的地址处的带符号字节[7:0]保存基址寄存器地址的8位立即数偏移的地LDRSB.W <Rxf>. [<Rn>], #+/-<offset_8>址处的带符号字节[7:0],后索引保存基址寄存器地址的8位立即数偏移的地LDRSB.W <Rxf>,[<Rn>, #<+/-<offset_8>]!址处的带符号字节[7:0],前索引保存寄存器地址左移0,1,2或3个位置后的LDRSB.W<Rxf>,[<Rn>,<Rm>1,LSL#<shif>]地址处的带符号字节[7:0]保存PC地址的12位立即数偏移的地址处的LDRSB.W <Rxf>,[PC, #+/-<offset_12>]带符号字节保存基址寄存器地址与12位立即数偏移的和LDRSH.W<Rxf>,[<Rn>,#<offset 12>]的地址处的带符号半字[15;0]保存基址寄存器地址的8位立即数偏移的地LDRSH.W <Rxf>. [<Rn>], #+/-<offset_8>址处的带符号半字[15:0],后索引保存基址寄存器地址的8位立即数偏移的地LDRSH.W <Rxf>,[<Rn>,#<+/-<offset_8>]!址处的带符号半字[15:0],前索引保存寄存器地址左移0,1,2或3个位置后的LDRSH.W <Rxf>,[<Rn>,<Rm>(, LSL #<shif>]]地址处的带符号半字[15:0]保存PC地址的12位立即数偏移的地址处的LDRSH.W<Rxf>,[PC,#+/-<offset_12>]带符号半字逻辑左移,移位次数由寄存器中的值标识LSL(S).W <Rd>,<Rn>,<Rm>逻辑右移,移位次数由寄存器中的值标识LSR(S).W<Rd>,<Rn>,<Rm>将两个带符号或无符号的寄存器值相乘,并MLA.W <Rd>,<Rn>,<Rm>, <Racc>将低32位与寄存器值相加将两个带符号或无符号的寄存器值相乘,并MLS.W<Rd>,<Rn>,<Rm>,<Racc>将低32位与寄存器值相减将12位立即数传送到寄存器中MOV(S).W<Rd>,#<modify_constant(immed_12)>MOV(S).W<Rd>,<Rm>(,<shif>)将移位后的寄存器值传送到寄存器中将16位立即数传送到寄存器的高半字[31:16]MOVT.W<Rd>,#<immed_16>中将16位立即数传送到寄存器的低半字[15:0]MOVW.W<Rd>,#<immed_16>中,并将高半字[31:16]清零将状态传送到寄存器中MRS<c><Rd>,<psr>MSR<c><psr>_<fields>,<Rn>传送到状态寄存器中将两个带符号或不带符号的寄存器值相乘MUL.W<Rd>,<Rn>,<Rm>无操作NOP.W将寄存器值与12位立即数作逻辑“或非”操ORN(S).W<Rd>,<Rn>,#<modify_constant(immed_12)>作将寄存器值与移位后的寄存器值作逻辑“或ORN[S.W<Rd>,<Rn>,<Rm>/,<shift>非”操作将寄存器值与12位立即数作逻辑“或”操作ORR(S).W<Rd>,<Rn>,#<modify_constant(immed_12)14
第 1 章 概述 14 续表 1-2 操作 汇编指令 保存基址寄存器地址与12位立即数偏移的和 的地址处的带符号字节[7:0] LDRSB.W <Rxf>, [<Rn>, #<offset_12>] 保存基址寄存器地址的8位立即数偏移的地 址处的带符号字节[7:0],后索引 LDRSB.W <Rxf>. [<Rn>], #+/-<offset_8> 保存基址寄存器地址的8位立即数偏移的地 址处的带符号字节[7:0],前索引 LDRSB.W <Rxf>, [<Rn>, #<+/–<offset_8>]! 保存寄存器地址左移0,1,2或3个位置后的 地址处的带符号字节[7:0] LDRSB.W <Rxf>, [<Rn>, <Rm>{, LSL #<shift>}] 保存PC地址的12位立即数偏移的地址处的 带符号字节 LDRSB.W <Rxf>, [PC, #+/–<offset_12>] 保存基址寄存器地址与12位立即数偏移的和 的地址处的带符号半字[15:0] LDRSH.W <Rxf>, [<Rn>, #<offset_12>] 保存基址寄存器地址的8位立即数偏移的地 址处的带符号半字[15:0],后索引 LDRSH.W <Rxf>. [<Rn>], #+/-<offset_8> 保存基址寄存器地址的8位立即数偏移的地 址处的带符号半字[15:0],前索引 LDRSH.W <Rxf>, [<Rn>, #<+/–<offset_8>]! 保存寄存器地址左移0,1,2或3个位置后的 地址处的带符号半字[15:0] LDRSH.W <Rxf>, [<Rn>, <Rm>{, LSL #<shift>}] 保存PC地址的12位立即数偏移的地址处的 带符号半字 LDRSH.W <Rxf>, [PC, #+/–<offset_12>] 逻辑左移,移位次数由寄存器中的值标识 LSL{S}.W <Rd>, <Rn>, <Rm> 逻辑右移,移位次数由寄存器中的值标识 LSR{S}.W <Rd>, <Rn>, <Rm> 将两个带符号或无符号的寄存器值相乘,并 将低32位与寄存器值相加 MLA.W <Rd>, <Rn>, <Rm>, <Racc> 将两个带符号或无符号的寄存器值相乘,并 将低32位与寄存器值相减 MLS.W <Rd>, <Rn>, <Rm>, <Racc> 将12位立即数传送到寄存器中 MOV{S}.W <Rd>, #<modify_constant(immed_12)> 将移位后的寄存器值传送到寄存器中 MOV{S}.W <Rd>, <Rm>{, <shift>} 将16位立即数传送到寄存器的高半字[31:16] 中 MOVT.W <Rd>, #<immed_16> 将16位立即数传送到寄存器的低半字[15:0] 中,并将高半字[31:16]清零 MOVW.W <Rd>, #<immed_16> 将状态传送到寄存器中 MRS<c> <Rd>, <psr> 传送到状态寄存器中 MSR<c> <psr>_<fields>,<Rn> 将两个带符号或不带符号的寄存器值相乘 MUL.W <Rd>, <Rn>, <Rm> 无操作 NOP.W 将寄存器值与12位立即数作逻辑“或非”操 作 ORN{S}.W <Rd>, <Rn>, #<modify_constant(immed_12)> 将寄存器值与移位后的寄存器值作逻辑“或 非”操作 ORN[S}.W <Rd>, <Rn>, <Rm>{, <shift>} 将寄存器值与12位立即数作逻辑“或”操作 ORR{S}.W <Rd>, <Rn>, #<modify_constant(immed_12)
第1章概述续表1-2操作汇编指令将寄存器值与移位后的寄存器值作逻辑“或”ORR(S).W<Rd>,<Rn>,<Rm>I,<shift>)操作将位顺序逆向RBIT.W <Rd>,<Rm>将字内的字节逆向REV.W<Rd>,<Rm>将每个半字内的字节逆向REV16.W <Rd>,<Rn>将低半字内的字节逆向并用符号扩展REVSH.W<Rd>,<Rn>循环右移,移位次数取决于寄存器中的值ROR(S).W<Rd>,<Rn>,<Rm>寄存器值与12位立即数相减RSB(S).W<Rd>,<Rn>,#<modify_constant(immed_12)>寄存器值与移位后的寄存器值相减RSB(S).W <Rd>,<Rn>,<Rm>(,<shift>)寄存器值与12位立即数及C位相减SBC(S).W<Rd>,<Rn>,#<modify_constant(immed_12)>SBC(S).W<Rd>,<Rn>,<Rm>[,<shift>)寄存器值与移位后的寄存器值及C位相减将所选的位复制到寄存器中并用符号扩展SBFX.W<Rd>,<Rn>,#<Isb>,#<width>带符号除法SDIV<c><Rd>,<Rn>,<Rm>发送事件SEV<c>将带符号半字相乘并用符号扩展到2个寄存SMLAL.W <RdLo>,<RdHi>, <Rn>,<Rm>器值两个带符号寄存器值相乘SMULL.W <RdLo>,<RdHi>,<Rn>,<Rm>带符号饱和操作SSAT<c><Rd>,#<imm>,<Rn>I,<shift>)多个寄存器字保存到连续的存储单元中STM(IA|DB).W <Rn>(!), <registers>寄存器字保存到寄存器地址与12位立即数偏STR.W<Rx>,[<Rn>,#<offset_12>]移的和的地址中寄存器字保存到寄存器地址的8位立即数偏STR.W <Rxf>,[<Rn>], #+/-<offset_8>移的地址中,后索引寄存器字保存到寄存器地址移位0,1,2或3STR.W<Rxf>,[<Rn>,<Rm>(,LSL#<shif>]个位置的地址中寄存器字保存到寄存器地址的8位立即数偏STR(T).W<Rxf>,[<Rn>,#+/-<offset_8>(])移的地址中,前索引寄存器字节[7:0]保存到寄存器地址的8位立STRB(T).W<Rxf>,[<Rn>, #+/-<offset_8>](0)即数偏移的地址中,前索引寄存器字节[7:0]保存到寄存器地址与12位立STRB.W<Rxf>,[<Rn>,#<offset_12>]即数偏移的和的地址中寄存器字节[7:0]保存到寄存器地址的8位立STRB.W <Rxf>,[<Rn>], #+/-<offset_8>即数偏移的地址中,后索引寄存器字节保存到寄存器地址移位0,1,2STRB.W<Rxf>,[<Rn>,<Rm>L, LSL #<shift>}]或3个位置的地址中存储双字,前索引STRD.W<Rxf>,<Rxf2>, [<Rn>, #+/-<offset_8> * 4](1]存储双字,后索引STRD.W<Rxf>,<Rxf2>,[<Rn>],#+/-<offset 8>*4寄存器半字[15:0]保存到寄存器地址与12位STRH.W <Rxf>,[<Rn>, #<offset_12>]立即数偏移的和的地址中寄存器半字保存到寄存器地址移位0,1,2STRH.W<Rxf>,[<Rn>,<Rm>(,LSL#<shift>]]或3个位置的地址中15
第 1 章 概述 15 续表 1-2 操作 汇编指令 将寄存器值与移位后的寄存器值作逻辑“或” 操作 ORR{S}.W <Rd>, <Rn>, <Rm>{, <shift>} 将位顺序逆向 RBIT.W <Rd>, <Rm> 将字内的字节逆向 REV.W <Rd>, <Rm> 将每个半字内的字节逆向 REV16.W <Rd>, <Rn> 将低半字内的字节逆向并用符号扩展 REVSH.W <Rd>, <Rn> 循环右移,移位次数取决于寄存器中的值 ROR{S}.W <Rd>, <Rn>, <Rm> 寄存器值与12位立即数相减 RSB{S}.W <Rd>, <Rn>, #<modify_constant(immed_12)> 寄存器值与移位后的寄存器值相减 RSB{S}.W <Rd>, <Rn>, <Rm>{, <shift>} 寄存器值与12位立即数及C位相减 SBC{S}.W <Rd>, <Rn>, #<modify_constant(immed_12)> 寄存器值与移位后的寄存器值及C位相减 SBC{S}.W <Rd>, <Rn>, <Rm>{, <shift>} 将所选的位复制到寄存器中并用符号扩展 SBFX.W <Rd>, <Rn>, #<lsb>, #<width> 带符号除法 SDIV<c> <Rd>,<Rn>,<Rm> 发送事件 SEV<c> 将带符号半字相乘并用符号扩展到2个寄存 器值 SMLAL.W <RdLo>, <RdHi>, <Rn>, <Rm> 两个带符号寄存器值相乘 SMULL.W <RdLo>, <RdHi>, <Rn>, <Rm> 带符号饱和操作 SSAT <c> <Rd>, #<imm>, <Rn>{, <shift>} 多个寄存器字保存到连续的存储单元中 STM{IA|DB}.W <Rn>{!}, <registers> 寄存器字保存到寄存器地址与12位立即数偏 移的和的地址中 STR.W <Rxf>, [<Rn>, #<offset_12>] 寄存器字保存到寄存器地址的8位立即数偏 移的地址中,后索引 STR.W <Rxf>, [<Rn>], #+/–<offset_8> 寄存器字保存到寄存器地址移位0,1,2或3 个位置的地址中 STR.W <Rxf>, [<Rn>, <Rm>{, LSL #<shift>}] 寄存器字保存到寄存器地址的8位立即数偏 移的地址中,前索引 STR{T}.W <Rxf>, [<Rn>, #+/–<offset_8>]{!} 寄存器字节[7:0]保存到寄存器地址的8位立 即数偏移的地址中,前索引 STRB{T}.W <Rxf>, [<Rn>, #+/–<offset_8>]{!} 寄存器字节[7:0]保存到寄存器地址与12位立 即数偏移的和的地址中 STRB.W <Rxf>, [<Rn>, #<offset_12>] 寄存器字节[7:0]保存到寄存器地址的8位立 即数偏移的地址中,后索引 STRB.W <Rxf>, [<Rn>], #+/–<offset_8> 寄存器字节保存到寄存器地址移位0,1,2 或3个位置的地址中 STRB.W <Rxf>, [<Rn>, <Rm>{, LSL #<shift>}] 存储双字,前索引 STRD.W <Rxf>, <Rxf2>, [<Rn>, #+/–<offset_8> * 4]{!} 存储双字,后索引 STRD.W <Rxf>, <Rxf2>, [<Rn>], #+/–<offset_8> * 4 寄存器半字[15:0]保存到寄存器地址与12位 立即数偏移的和的地址中 STRH.W <Rxf>, [<Rn>, #<offset_12>] 寄存器半字保存到寄存器地址移位0,1,2 或3个位置的地址中 STRH.W <Rxf>, [<Rn>, <Rm>{, LSL #<shift>}]
第1章概述续表 1-2操作汇编指令寄存器半字保存到寄存器地址的8位立即数STRH(T).W <Rxf>,[<Rn>,#+/-<offset_8>](1)偏移的地址中,前索引寄存器半字保存到寄存器地址的8位立即数STRH.W<Rxf>,[<Rn>],#+/-<offset_8>偏移的地址中,后索引寄存器值与12位立即数相减SUB(S).W<Rd>,<Rn>,#<modify_constant(immed_12)>寄存器值与移位后的寄存器值相减SUB(S).W<Rd>,<Rn>,<Rm>1,<shift>)寄存器值与12位立即数相减SUBW.W<Rd>,<Rn>,#<immed_12>将字节符号扩展到32位SXTB.W<Rd>,<Rm>(,<rotation>)将半字符号扩展到32位SXTH.W<Rd>,<Rm>(,<rotation>)表格分支字节TBB[<Rn>,<Rm>]表格分支半字TBH [<Rn>,<Rm>, LSL #1]寄存器值与12位立即数作逻辑“异或”操作TEQ.W<Rn>,#<modify_constant(immed_12)>寄存器值与移位后的寄存器值作逻辑“异或”TEQ.W <Rn>, <Rm>(, <shift)操作寄存器值与12位立即数作逻辑“与”操作TST.W<Rn>,#<modify_constant(immed_12)>寄存器值与移位后的寄存器值作逻辑“与”TST.W <Rn>,<Rm>(,<shif>)操作将寄存器的位区复制到寄存器中,美并用零扩UBFX.W<Rd>,<Rn>,#<lsb>,#<width>展到32位无符号除法UDIV<c><Rd>,<Rn>,<Rm>两个无符号寄存器值相乘并与两个寄存器值UMLAL.W<RdLo>, <RdHi>, <Rn>,<Rm>相加两个无符号寄存器值相乘UMULL.W <RdLo>, <RdHi>,<Rn>,<Rm>无符号饱和操作USAT<c><Rd>,#<imm>,<Rn>(,<shif>)将无符号字节复制到寄存器中并用零扩展到UXTB.W<Rd>,<Rm>I,<rotation>}32位将无符号半字复制到寄存器中并用零扩展到UXTH.W<Rd>,<Rm>(,<rotation>32位WFE.W等待事件等待中断WFI.W16
第 1 章 概述 16 续表 1-2 操作 汇编指令 寄存器半字保存到寄存器地址的8位立即数 偏移的地址中,前索引 STRH{T}.W <Rxf>, [<Rn>, #+/–<offset_8>]{!} 寄存器半字保存到寄存器地址的8位立即数 偏移的地址中,后索引 STRH.W <Rxf>, [<Rn>], #+/–<offset_8> 寄存器值与12位立即数相减 SUB{S}.W <Rd>, <Rn>, #<modify_constant(immed_12)> 寄存器值与移位后的寄存器值相减 SUB{S}.W <Rd>, <Rn>, <Rm>{, <shift>} 寄存器值与12位立即数相减 SUBW.W <Rd>, <Rn>, #<immed_12> 将字节符号扩展到32位 SXTB.W <Rd>, <Rm>{, <rotation>} 将半字符号扩展到32位 SXTH.W <Rd>, <Rm>{, <rotation>} 表格分支字节 TBB [<Rn>, <Rm>] 表格分支半字 TBH [<Rn>, <Rm>, LSL #1] 寄存器值与12位立即数作逻辑“异或”操作 TEQ.W <Rn>, #<modify_constant(immed_12)> 寄存器值与移位后的寄存器值作逻辑“异或” 操作 TEQ.W <Rn>, <Rm>{, <shift} 寄存器值与12位立即数作逻辑“与”操作 TST.W <Rn>, #<modify_constant(immed_12)> 寄存器值与移位后的寄存器值作逻辑“与” 操作 TST.W <Rn>, <Rm>{, <shift>} 将寄存器的位区复制到寄存器中,并用零扩 展到32位 UBFX.W <Rd>, <Rn>, #<lsb>, #<width> 无符号除法 UDIV<c> <Rd>,<Rn>,<Rm> 两个无符号寄存器值相乘并与两个寄存器值 相加 UMLAL.W <RdLo>, <RdHi>, <Rn>, <Rm> 两个无符号寄存器值相乘 UMULL.W <RdLo>, <RdHi>, <Rn>, <Rm> 无符号饱和操作 USAT <c> <Rd>, #<imm>, <Rn>{, <shift>} 将无符号字节复制到寄存器中并用零扩展到 32位 UXTB.W <Rd>, <Rm>{, <rotation>} 将无符号半字复制到寄存器中并用零扩展到 32位 UXTH.W <Rd>, <Rm>{, <rotation>} 等待事件 WFE.W 等待中断 WFI.W
第2章编程模型(programmer'smodel)第2章编程模型(programmer'smodel)本章将描述Cortex-M3处理器的编程模型,包含以下内容:·关于编程模型特权访问和用户访问.·寄存器数据类型.存储器格式.指令集.2.1关于编程模型Cortex-M3处理器采用ARMv7-M架构。它包括所有的16位thumb指令集和基本的32位thumb-2指令集架构。Cortex-M3处理器不能执行ARM指令。Thumb指令集是ARM指令集的子集,重新被编码为16位。它支持较高的代码密度以及16位或小于16位的存储器数据总线系统。Thumb-2在thumb指令集架构(ISA)上进行了大量的改进,它与thumb相比,代码密度更高,并且通过使用16/32位指令,提供更高的性能。2.1.1工作模式Cortex-M3处理器支持两种工作模式,线程模式和处理模式:在复位时处理器进入线程模式,异常返回时也会进入该模式。特权和用户(非特权)·代码能够在线程模式下运行。。出现异常时处理器进入处理模式,在处理模式中,所有代码都是特权访问的。2.1.2工作状态Cortex-M3处理器有两种工作状态:。Thumb状态:这是16位和32位半字对齐的thumb和thumb-2指令的正常执行状态。。调试状态:处理器停机调试时进入该状态。2.2特权访问和用户访问代码可以是特权执行或非特权执行。非特权执行时对有些资源的访问受到限制或不允许访问。特权执行可以访问所有资源。处理模式始终是特权访问,线程模式可以是特权或非特权访问。线程模式在复位之后为特权访问,但可通过MSR指令清零CONTROL[O],将它配置为用户(非特权)访问。用户访问禁止:。部分指令的使用,例如设置FAULTMASK和PRIMASK的CPS指令。·对系统控制空间(SCS)的大部分寄存器的访问。17
第 2 章 编程模型(programmer's model) 17 第2章 编程模型(programmer's model) 本章将描述 Cortex-M3 处理器的编程模型,包含以下内容: z 关于编程模型 z 特权访问和用户访问 z 寄存器 z 数据类型 z 存储器格式 z 指令集 2.1 关于编程模型 Cortex-M3 处理器采用 ARM v7-M 架构。它包括所有的 16 位 thumb 指令集和基本的 32 位 thumb-2 指令集架构。Cortex-M3 处理器不能执行 ARM 指令。 Thumb 指令集是 ARM 指令集的子集,重新被编码为 16 位。它支持较高的代码密度以 及 16 位或小于 16 位的存储器数据总线系统。 Thumb-2 在 thumb 指令集架构(ISA)上进行了大量的改进,它与 thumb 相比,代码密 度更高,并且通过使用 16/32 位指令,提供更高的性能。 2.1.1 工作模式 Cortex-M3 处理器支持两种工作模式,线程模式和处理模式: z 在复位时处理器进入线程模式,异常返回时也会进入该模式。特权和用户(非特权) 代码能够在线程模式下运行。 z 出现异常时处理器进入处理模式,在处理模式中,所有代码都是特权访问的。 2.1.2 工作状态 Cortex-M3 处理器有两种工作状态: z Thumb 状态:这是 16 位和 32 位半字对齐的 thumb 和 thumb-2 指令的正常执行状态。 z 调试状态:处理器停机调试时进入该状态。 2.2 特权访问和用户访问 代码可以是特权执行或非特权执行。非特权执行时对有些资源的访问受到限制或不允许 访问。特权执行可以访问所有资源。处理模式始终是特权访问,线程模式可以是特权或非特 权访问。 线程模式在复位之后为特权访问,但可通过 MSR 指令清零 CONTROL[0],将它配置为 用户(非特权)访问。用户访问禁止: z 部分指令的使用,例如设置 FAULTMASK 和 PRIMASK 的 CPS 指令。 z 对系统控制空间(SCS)的大部分寄存器的访问
第2章编程模型(programmer'smodel)当线程模式从特权访问变为用户访问后,本身不能回到特权访问。只有处理操作能够改变线程模式的访问特权。处理模式始终是特权访问的。2.2.1主堆栈和进程堆栈结束复位后,所有代码都使用主堆栈。异常处理程序(例如SVC)可以通过改变其在退出时使用的EXCRETURN值来改变线程模式使用的堆栈。所有异常继续使用主堆栈,堆栈指针r13是分组寄存器,在SP_main和SP_process之间切换。在任何时候,进程堆栈和主堆栈中只有一个是可见的,由r13指示。除了使用从处理模式退出时的EXCRETURN的值外,在线程模式中,使用MSR指令对CONTROL[1]执行写操作也可以从主堆栈切换到进程堆栈。2.3寄存器Cortex-M3处理器有以下32位寄存器:13个通用寄存器,r0~r12分组的堆栈指针别名,SP_process和SPmain·链接寄存器,r14?程序计数器,r15·。1个程序状态寄存器,xPSR图2-1显示了Cortex-M3的寄存器集。rorl12r3低寄存器r4r5r6r7r8r9rlo高寄存器rllr12r13(SP)SPprocessSP mainr14(LR)r15(PC)XPSR程序状态寄存器图2-1Cortex-M3的寄存器集2.3.1通用寄存器通用寄存器r0-r12没有在结构上定义特殊的用法。大多数指定通用寄存器的指令都能够使用r0-r12。低寄存器寄存器r0-r7可以被指定通用寄存器的所有指令访问。高寄存器寄存器r8-r12可以被指定通用寄存器的所有32位指令访问。18
第 2 章 编程模型(programmer's model) 18 当线程模式从特权访问变为用户访问后,本身不能回到特权访问。只有处理操作能够改 变线程模式的访问特权。处理模式始终是特权访问的。 2.2.1 主堆栈和进程堆栈 结束复位后,所有代码都使用主堆栈。异常处理程序(例如 SVC)可以通过改变其在 退出时使用的 EXC_RETURN 值来改变线程模式使用的堆栈。所有异常继续使用主堆栈,堆 栈指针 r13 是分组寄存器,在 SP_main 和 SP_process 之间切换。在任何时候,进程堆栈和主 堆栈中只有一个是可见的,由 r13 指示。 除了使用从处理模式退出时的 EXC_RETURN 的值外,在线程模式中,使用 MSR 指令 对 CONTROL[1]执行写操作也可以从主堆栈切换到进程堆栈。 2.3 寄存器 Cortex-M3 处理器有以下 32 位寄存器: z 13 个通用寄存器,r0~r12 z 分组的堆栈指针别名,SP_process 和 SP_main z 链接寄存器,r14 z 程序计数器,r15 z 1 个程序状态寄存器,xPSR 图 2-1 显示了 Cortex-M3 的寄存器集。 图 2-1 Cortex-M3 的寄存器集 2.3.1 通用寄存器 通用寄存器 r0-r12 没有在结构上定义特殊的用法。大多数指定通用寄存器的指令都能够 使用 r0-r12。 低寄存器 寄存器 r0-r7 可以被指定通用寄存器的所有指令访问。 高寄存器 寄存器 r8-r12 可以被指定通用寄存器的所有 32 位指令访问