动易网站后台,网站的建设方式,wordpress主题配置,辽宁省品牌建设的建议文章目录 上一篇Thumb指令集概述Thumb指令详细介绍数据处理指令数据存储指令转移指令异常中断指令 下一篇 上一篇
嵌入式系统复习–ARM指令集(二)
Thumb指令集概述
在编写Thumb指令时#xff0c;先要用伪指令CODE16声明#xff08;ADS的编译环境下#xff09;#xff0c… 文章目录 上一篇Thumb指令集概述Thumb指令详细介绍数据处理指令数据存储指令转移指令异常中断指令 下一篇 上一篇
嵌入式系统复习–ARM指令集(二)
Thumb指令集概述
在编写Thumb指令时先要用伪指令CODE16声明ADS的编译环境下而且在ARM指令中要使用BX指令跳转到Thumb指令以切换处理器状态。
Thumb指令集特点
采用16位二进制编码而ARM指令是32位Thumb是压缩指令先动态解压缩然后作为标准的ARM指令执行由CPSR的T位决定指令流。T置位执行Thumb指令流T清0执行ARM指令流Thumb指令集没有协处理器指令、信号量指令、乘加指令、64位乘法指令以及访问CPSR和SPSR的指令而且指令的第2操作数受到限制除了分支指令B有条件执行功能外其他指令均无条件执行大多数Thumb数据处理指令采用2地址格式 Thumb指令与ARM指令的异同
Thumb中也是采用Load/Store结构有数据处理、数据传送及流控制指令大多数Thumb指令是无条件执行的除转移指令B而所有ARM指令都是条件执行。许多Thumb数据处理指令采用2地址格式即目的寄存器与源寄存器相同而大多数ARM数据处理指令采用的是3地址格式所有异常都会返回ARM模式状态由于ARM微处理器字传送地址必须被4整除字对准半字传送地址必须可被2整除即半字对准但是Thumb是2个字节所以进入异常Thumb的自然偏移与ARM不同
进入和退出Thumb模式的方式
进入方式BX和利用异常返回到Thumb退出方式BX和利用异常进入Thumb
Thumb指令详细介绍
数据处理指令
低寄存器指的是R0~R7, 高寄存器指的是R8 ~ R15 算术运算指令 ADD与SUB–低寄存器加法和减法 句法 op Rd, Rn, Rm
op Rd, Rn, #expr3
op Rd, #expr8用法指令中Rd、Rn、Rm必须是低寄存器R0~R7。指令更新NZCV标志 ADD–高或低寄存器 句法 ADD Rd, Rm用法Rd - Rd Rm Rd和Rm是低寄存器时更新标记NZCV ADD与SUB–SP 句法 ADD SP, #expr
SUB SP, #expr用法SP - SP expr 不影响条件标志码 ADD – PC或SP偏移量 句法 ADD Rd, Rp, #expr
Rp为 SP或PC用法Rd - Rp #expr 不影响条件标志码 ADC、SBC、MUL 带进位位的加法、带进位位的减法、乘法 句法 op Rd, Rm用法 ADC: Rd - Rd Rm C
SBC: Rd - Rd - Rm - (1 - C) 借位
MUL: Rd - Rd * Rm限制Rd和Rm必须是低寄存器R0~R7 ADC和SBC影响NZCV MUL影响NZ AND、ORR、EOR和BIC(按位逻辑运算) 句法 op Rd, Rm用法EOR异或BICRd AND NOT Rm 必须是低寄存器影响NZ标志 ASR、LSL、LSR、和ROR 算术右移、逻辑左移、逻辑右移、循环右移 句法 op Rd, Rs
op Rd, Rm, #expr
Rd、Rs、Rm必须是R0~R7范围内的寄存器CMP和CMN比较和比较负值 句法 CMP Rn, #expr
CMP Rn, Rm
CMN Rn, Rm用法 只更新条件码标志不存放结果 CMP: Rn - expr(或Rm CMNRm Rn 其中CMP Rn, Rm指令允许使用高寄存器 MOV、MVN和NEG传送、传送非、取反 句法 MOV Rd, #expr
MOV Rd, Rm
MVN Rd, Rm
NEG Rd, Rm用法 MOV: Rd - #expr(或Rm MVN: Rd - NOT Rm NEG: Rd - Rm * (-1) TST测试 句法 TST Rn, Rm用法 Rm AND Rn, 丢弃结果更新条件码标志NZ Rn、Rm必须在R0~R7范围内
数据存储指令
单寄存器数据存储指令LDR和STR 汇编格式op Rd, [Rn, #off5] // op LDR | LDRB | STR | STRB
op Rd, [Rn, #off5] // op LDRH | STRH
op Rd, [Rn, Rm] // op LDR | LDRH | LDRSH | LDRB | LDRSB | STR | STRH | STRB
op Rd, [PC, #off8]
op Rd, [SP, #off8] // op LDR | STR 该两条指令偏移量为8位多寄存器数据存储指令 汇编格式LDMIA Rn!, {reg list}
STMIA Rn!, {reg list}
POP {reg list {, PC}}
PUSH {reg list {, LR}}转移指令
汇编格式
B cond label //目标为Thumb代码
B label //目标为Thumb代码
BL label //目标为Thumb代码
BLX label //目标为ARM代码
B{L}X Rm //目标为ARM或Thumb代码B分支指令Thumb中唯一可条件执行的指令BL带链接的长分支BX分支指令并可选择地切换指令集BLX带链接分支并可选择地交换指令集
异常中断指令
Thumb软件中断指令 汇编格式SWI 8位立即数 //八位立即数为数学表达式取值为0~255内的整数断点中断 汇编格式BKPT immed_8下一篇
未完待续