第3章 Thumb-2指令系统
- 格式:pptx
- 大小:772.60 KB
- 文档页数:47
ARM ® 和 Thumb ®-2 指令集 快速参考卡进位相对于当前指令的范围为 0-4095加倍:(进位)(进位)的范围为 0-4095,Rd[15:0加倍:(当前模式),Rd[23:16,Rd[7:0] := R ,Rd[15:0],Rd[23:1,Rd[7:0] := R ,Rd[15:0],Rd[15:0]。
<sat> 的,。
<sat> 的。
<sat 。
<sat>,。
<sat>。
<sat>(如果 Rm 请参阅移位为 S不受影响,imm16,imm16 范围为与 MOV{S 与 MOV{S}与 MOV{S}与 MOV{S 与 MOV{S}标记标记CPSR 标记CPSR 标记复制 ( Rn[width+复制 ( 0 )sh 的范围为 0-3。
,。
sh 的范围为 0-3。
sh 的范围为 1-sh 的范围为 0-3。
,的范围为 0-3。
的范围为 0-3。
sh 的范围为的范围为 0-3。
的范围为 0-3。
,。
sh 的范围为。
sh 的范围为,。
sh 的范围为。
sh 的范围为。
sh 的范围为,Rd[,R ±32MB (T2: ±16MB Rm[0] 为 0,目标T ,则后续指,T: -252 - +256B )的选择方法与 GE + 4-130)。
为 1,更改为 Th 。
跳转范围为 4-。
跳转范围为 4-512。
BE (大端)或 LE (小5T :当 [address][0] 为CPSR := SPSR 。
仅Rd 、Rn 不中。
仅限特权模式。
Rd1、Rd2[Rn] := Rm[7:0],清除独,清除独占标记Rd := 0。
否则,否则,为 -255 到的范围为 0 到 3的倍数。
0 到 1020 范围16 位的位域。
,Rd := temp 0 到 1020 范围SMI 。
SWI 。
NOP 。
NOP 。
Thumb-2指令集Thumb-2真不愧是一个突破性的指令集。
它强大,它易用,它轻佻,它高效。
Thumb-2是16位Thumb指令集的一个超集,在Thumb-2中,16位指令首次与32位指令并存,结果在Thumb状态下可以做的事情一下子丰富了许多,同样工作需要的指令周期数也明显下降。
从图中可见,Cortex-M3勇敢地拒绝了32位ARM指令集,却把自己的处理能力以身相许般地全托给Thumb-2指令集。
这可能有些令人意外,但事实上这却见证了Cortex-M3的用情专一:在内核水平上,就已经为适应单片机和小内存器件而抉择、取舍过了。
但她没有嫁错郎,因为Thumb-2完全胜任在这个领域挑大梁。
不过,这也意味着Cortex-M3作为新生代处理器,不是向后兼容的。
因此,为ARM7写的ARM汇编语言程序不能直接移植到CM3上来。
不过,CM3支持绝大多数传统的Thumb指令,因此用Thumb指令写的汇编程序就从善如流了。
在支持了both 16位和32位指令之后,就无需烦心地把处理器状态在Thumb和ARM之间来回的切换了。
这种事在ARM7和ARM9是司空见惯的,尤其是在使用大型条件嵌套,以及执行复杂运算的时候,能精妙地移形换影于不同状态之间,那可是当年要成为大虾的基本功。
Cortex-M3是ARMv7架构的掌上明珠。
和曾经红透整个业界的老一辈ARM7相比,Cortex-M3则是新生代的偶像,处处闪耀着青春的光芒活力。
比如,硬件除法器被带到CM3中;乘法方面,也有好几条新指令闪亮登场,用于提升data-crunching的性能。
CM3的出现,还在ARM处理器中破天荒地支持了“非对齐数据访问支持”。
[摘要]主要是介绍ARM CPU中的THUMB-2功能,相对于THUMB的比较THUMB-2指令集的扩展,THUMB-2的新指令带来的好处,新指令对性能和代码密度的改进。
如今的嵌入式系统开发者要面对各种复杂的挑战,其中就包括了如何在代码性能和系统成本之间进行平衡。
Thumb-2汇编伪操作命令集1.符号定义伪操作(定义变量,变量赋值,寄存器取别名相关)操作符功能语法格式LCLA定义一个局部的算术变量并初始化为0LCLA变量名(定义的)LCLL定义一个局部的逻辑变量并初始化为FALSE(false)LCLL变量名(定义的)LCLS定义一个局部的字符串变量并初始化为空串LCLS变量名(定义的)GBLA定义一个全局的算术变量并初始化为0GBLA变量名(定义的)GBLL定义一个全局的逻辑变量并初始化为FALSE(false)GBLL变量名(定义的)GBLS定义一个全局的字符串变量并初始化为空串GBLS变量名(定义的)SETA给一个算术变量(全局或局部)赋值变量名SETA变量值SETL给一个逻辑变量(全局或局部)赋值变量名SETL变量值SETS给一个字符串变量(全局或局部)赋值变量名SETS变量值RLIST给一个通用寄存器列表定义名称(定义的)名称RLIST{寄存器列表}VFP矢量浮点预算SN给一个单精度VFP寄存器定义名称(定义的)名称SN VFP寄存器编号DN给一个双精度VFP寄存器定义名称(定义的)名称DN VFP寄存器编号FN FPA给一个FPA浮点寄存器定义名称(定义的)名称FN FPA浮点寄存器编号CP给一个协处理器定义名称(定义的)名称CP协处理器编号CN给一个协处理器的寄存器定义名称(定义的)名称CN协处理器寄存器编号注意:1.(与RLIST相关)在LDM/STM指令中,寄存器列表中的寄存器访问次序总是先访问编号低的寄存器再访问编号高的寄存器。
2.(与SN,DN相关)VFP寄存器编号:单精度寄存器编号范围0-31,双精度寄存器编号范围0-15。
(D0-D15),(S0-S15)不能再用,因为汇编器已经预先定义了。
3.(与FN相关)FPA否点寄存器编号范围0-7。
(F0-F7)不能再用,因为汇编器已经预先定义了。
4.(与CP相关)协处理器编号范围0-15。