第6章(Thumb指令集及其伪指令)_第1页
第6章(Thumb指令集及其伪指令)_第2页
第6章(Thumb指令集及其伪指令)_第3页
第6章(Thumb指令集及其伪指令)_第4页
第6章(Thumb指令集及其伪指令)_第5页
已阅读5页,还剩38页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第6章Thumb指令集及其伪指令一.Thumb指令系统概述1.1Thumb的特点为了兼容数据总线宽度为16位的应用系统,ARM体系结构支持Thumb指令集。它是ARM指令集的一个子集,自身不是一个完整的体系结构,不能指望处理器只执行Thumb指令而不支持ARM指令集。一般而言,Thumb指令用来实现通用功能,必要时借助完善的ARM指令集。和ARM指令集相比,Thumb有许多自身的特点:

•代码尺寸更小,可以节省系统的存储空间;

•针对的是32位的CPU,比纯16位的指令集效率更高;

•所使用的编程模型和ARM指令集相似,只要遵循一定的调用规则,Thumb子程序和ARM子程序可以互相调用;

•为实现16位的指令长度舍弃了ARM指令集的一些特性(大多数为无条件执行/数据处理指令的目的寄存器和其中一个源寄存器相同);

•一般情况下,Thumb指令和ARM指令的时间效率和空间效率关系如下:

a.空间效率----Thumb代码所需的存储空间约为ARM代码的60%-70%,Thumb代码使用的指令数约比ARM代码多30%-40%b.时间效率----若使用32位的存储器ARM代码比Thumb代码快约40%,若使用16位的存储器Thumb代码比ARM代码快约40%-50%c.功耗----使用Thumb代码的存储器功耗降低约30%因此,两种指令集各有优点。若对系统的性能有较高要求可以使用32位的存储系统和ARM指令集;若对系统的成本和功耗有较高要求则可以使用16位的存储系统和Thumb指令集;若二者结合使用则会取得更好的效果。1.2Thumb-2指令集

•2003年底ARM公司发布了新的ARMThumb-2内核技术,该技术的存储空间比ARM少26%,速度比Thumb快25%;

•Thumb-2是一种新的混合型指令集,兼有16位和32位指令,能更好地平衡代码密度和性能;

•Thumb-2指令集结构包含了新的指令种类。二.Thumb指令集详述2.1Thumb指令和ARM指令的区别

•在编写Thumb指令时可以使用CODE16声明;

•除跳转指令B外,其余指令均为无条件执行;

•数据处理指令:

a.采用2地址格式----其中一个寄存器既是源寄存器又是目的寄存器(也是大多数Thumb指令采用的);

b.Thumb状态下数据处理指令访问R8-R15会受到一定限制(只有MOV、ADD和CMP可以);

c.使用R0-R7的数据处理指令总是更新条件标志位,访问R8-R15的数据处理指令不能更新条件标志位;

d.加载和存储指令只能访问R0-R7,且访问普通存储区只能使用LDMIA和STMIA,访问堆栈区只能使用PUSH和POP(堆栈为满递减堆栈);

e.Thumb指令集没有协处理器指令、状态寄存器访问指令、乘加指令、64位乘法指令。2.2跳转指令

2.2.1B•格式:B{cond}label•说明:若使用了{cond}则label的范围为-257~+256B,否则跳转范围为±2KB。

•举例:BEQLOOP1

2.2.2BL•格式:Blabel•说明:机器级的跳转范围为±4MB,必要时链接器插入代码允许更长的转移。

•举例:BLDELAY1

2.2.3BX•格式:BXRm•说明:若Rm[0]=0,则Rm[1]必须为零,处理器将目标代码当作ARM指令对待。

•举例:ADRR0,ArmFun

BXR0。2.3软中断指令

•格式:SWIimmed_8•说明:

1.immed_8为8位立即数,取值范围是0-255,异常中断服务程序要通过读取SWI指令而取得该立即数;

2.SWI进行参数传递的方法有2种:

a.立即数指明用户请求的服务类型,参数通过寄存器传递

MOVR0,#34;设置功能号为34SWI18;调用18号软中断

b.立即数被忽略,服务类型由R0来决定,参数通过其他寄存器传递

MOVR0,#18;调用18号软中断

MOVR1,#34;设置功能号为34SWI02.4数据处理指令

2.4.1数据传送指令

2.4.1.1MOV(可以使用R8-R15)•格式:MOVRd,#expr8MOVRd,Rm•说明:

a.参数限制:

a-1.MOVRd,#expr8时Rd为R0~R7,#expr8为0~255a-2.MOVRd,Rm时Rd和Rm可以为R8~R15

b.对条件标志位的影响:

b-1.MOVRd,#expr8更新N和Zb-2.MOVRd,Rm指令,当Rd或Rm是R8~R15时不影响条件标志位,当Rd和Rm都是R0~R7时影响N和Z,清除C和V•举例:

MOVR1,#0x10MOVR0,R8MOVPC,LR2.4.1.2MVN•格式:MVNRd,Rm•说明:

a.参数限制:Rd和Rm为R0~R7b.对条件标志位的影响:更新N和Z•举例:MVNR1,R22.4.1.3NEG•格式:NEGRd,Rm

;Rm乘以-1后传送到Rd•说明:

a.参数限制:Rd和Rm为R0~R7b.对条件标志位的影响:更新N、Z、C和V•举例:NEGR1,R02.4.2算术和逻辑运算指令

2.4.2.1ADD

a.低寄存器的ADD指令•格式:ADDRd,Rn,RmADDRd,Rn,#expre3ADDRd,#expre8•说明:

a.参数限制:

a-1.Rd、Rn和Rm均为R0~R7a-2.#expre3取0~7,#expre8取0~255

b.对条件标志位的影响:更新N、Z、C和V•举例:ADDR1,R1,R0ADDR2,R2,#7ADDR3,#200b.高或低寄存器的ADD指令(可以使用R8-R15)•格式:ADDRd,Rm•说明:

a.参数限制:Rd和Rm均为R0~R15b.对条件标志位的影响:Rd和Rm均为R0~R7时更新N、Z、C和V,其他情况不影响

•举例:ADDR3,R8c.PC或SP相对偏移的ADD指令•格式:ADDRd,Rp,#expr8•说明:

a.参数限制:Rd为R0~R7,Rp为PC或SP,expr为0~1020b.对条件标志位的影响:不影响条件标志位

•举例:ADDR1,SP,#1000d.SP操作的ADD指令(SP充当目的寄存器)•格式:ADDSP,#expr8ADDSP,SP,#expr8•说明:

a.参数限制:expr为-508~+508之间的4的整数倍的数

b.对条件标志位的影响:不影响条件标志位

•举例:ADDSP,SP,#-5002.4.2.2ADC•格式:ADCRd,Rm•说明:

a.参数限制:Rd和Rm均为R0~R7b.对条件标志位的影响:更新N、Z、C和V•举例(实现64位加法):

ADDR0,R2ADCR1,R32.4.2.3SUB

a.低寄存器的SUB指令•格式:SUBRd,Rn,RmSUBRd,Rn,#expre3SUBRd,#expre8•说明:

a.参数限制:

a-1.Rd、Rn和Rm均为R0~R7a-2.#expre3取0~7,#expre8取0~255b.对条件标志位的影响:更新N、Z、C和V•举例:SUBR0,R2,R1SUBR2,R1,#1SUBR3,#200b.SP操作的SUB指令•格式:SUBSP,#expr8SUBSP,SP,#expr8•说明:

a.参数限制:expr为-508~+508之间的4的整数倍的数

b.对条件标志位的影响:不影响条件标志位

•举例:SUBSP,#3802.4.2.4SBC•格式:SUBRd,Rm•说明:

a.参数限制:Rd和Rm均为R0~R7b.对条件标志位的影响:更新N和Z•举例:SUBR0,R2SBCR1,R32.4.2.5MUL•格式:MULRd,Rm•说明:

a.参数限制:Rd和Rm均为R0~R7b.对条件标志位的影响:更新N和Z•举例:MULR0,R12.4.2.6AND•格式:ANDRd,Rm•说明:

a.参数限制:Rd和Rm均为R0~R7b.对条件标志位的影响:更新N和Z•举例:MOVR1,#0x0FANDR0,R12.4.2.7ORR•格式:ORRRd,Rm•说明:

a.参数限制:Rd和Rm均为R0~R7b.对条件标志位的影响:更新N和Z•举例:MOVR1,#0x03ORRR0,R12.4.2.8EOR•格式:EORRd,Rm•说明:

a.参数限制:Rd和Rm均为R0~R7b.对条件标志位的影响:更新N和Z•举例:MOVR2,#0xF0EORR3,R22.4.2.9BIC•格式:BICRd,Rm•说明:

a.参数限制:Rd和Rm均为R0~R7b.对条件标志位的影响:更新N和Z•举例:MOVR1,#0x80BICR3,R12.4.3移位指令

2.4.3.1ASR•格式:ASRRd,RsASRRd,Rm,#expr•说明:

a.参数限制:Rd、Rs和Rm均为R0~R7,#expr为1~32b.对条件标志位的影响:更新N、Z和C(若位移量为零则不影响C)•举例:ASRR1,R2ASRR3,R1,#22.4.3.2LSL•格式:LSLRd,RsLSLRd,Rm,#expr•说明:

a.参数限制:Rd、Rs和Rm均为R0~R7,#expr为1~31b.对条件标志位的影响:更新N、Z和C(若位移量为零则不影响C)c.若位移量为32,则Rd清零,最后移出的位保留在C中;若位移量大于32,则Rd和C均被清零•举例:LSLR6,R7LSLR1,R6,#22.4.3.3LSR•格式:LSRRd,RsLSRRd,Rm,#expr•说明:

a.参数限制:Rd、Rs和Rm均为R0~R7,#expr为1~32b.对条件标志位的影响:更新N、Z和C(若位移量为零则不影响C)c.若位移量为32,则Rd清零,最后移出的位保留在C中;若位移量大于32,则Rd和C均被清零•举例:LSRR3,R0LSRR5,R2,#22.4.3.4ROR•格式:RORRd,Rs•说明:

a.参数限制:Rd和Rs均为R0~R7b.对条件标志位的影响:更新N、Z和C(若位移量为零则不影响C)•举例:RORR2,R32.4.4比较指令

2.4.4.1CMP(可以使用R8-R15)•格式:CMPRn,RmCMPRn,#expr8•说明:

a.参数限制:a-1.CMPRn,#expr8时Rn为R0~R7a-2.CMPRn,Rm时Rn为R0~R15a-3.Rm为R0~R15,#expr8为0~255b.对条件标志位的影响:更新N、Z、C和V•举例:CMPR1,#10CMPR3,R12.4.4.2CMN•格式:CMNRn,Rm•说明:

a.参数限制:Rn和Rm均为R0~R7b.对条件标志位的影响:更新N、Z、C和V•举例:CMNR0,R22.4.4.3TST•格式:TSTRn,Rm•说明:

a.参数限制:Rn和Rm均为R0~R7b.对条件标志位的影响:更新N、Z、C和V•举例:MOVR2,#0x01TSTR0,R22.4.5小结2.5加载/存储指令2.5.1LDR和STRa-1.立即数偏移的LDR和STR指令•格式:

LDRRd,[Rn,#immed_5×4];加载字

STRRd,[Rn,#immed_5×4];存储字LDRHRd,[Rn,#immed_5×2];加载半字STRHRd,[Rn,#immed_5×2];存储半字LDRBRd,[Rn,#immed_5×1];加载字节STRBRd,[Rn,#immed_5×1];存储字节

•说明:Rd和Rn为R0~R7,#immed_5×N是无符号的立即数表达式,取值为(0~31)×N(B)•举例:

LDRR0,[R1,#0x4]STRR3,[R4]a-2.寄存器偏移的LDR和STR指令•格式:

LDRRd,[Rn,Rm]STRRd,[Rn,Rm]LDRHRd,[Rn,Rm]STRHRd,[Rn,Rm]LDRBRd,[Rn,Rm]STRBRd,[Rn,Rm]LDRSHRd,[Rn,Rm]LDRSBRd,[Rn,Rm]•说明:Rd、Rn和Rm为R0~R7,偏移量是有符号/无符号的

•举例:

LDRR0,[R1,R3]STRR3,[R4,R5]a-3.PC或SP相对偏移的LDR和STR指令•格式:

LDRRd,[PC,#immed_8×4];程序代码不写只读

LDRRd,labelLDRRd,[SP,#immed_8×4]STRRd,[SP,#immed_8×4];堆栈有写有读•说明:a-1.Rd为R0~R7,#immed_8×N是无符号的立即数表达式,取值为(0~255)×4(B)a-2.label取值范围为1KB•举例:

LDRR0,[PC,#0x08]LDRR7,LOCALDATSTRR3,[SP,#1020]2.5.2LDMIA和STMIA•格式:

LDMIARn!,{reglist}STMIARn!,{reglist}•说明:a-1.Rn和{reglist}为R0~R7a-2.若Rn在寄存器列表中,则对于LDMIA而言Rn的最终值是加载的值而不是增加后的地址;对于STMIA而言Rn为寄存器列表中的最低数字寄存器时,Rn存储的值为Rn的初值,否则不可预知

•举例:

LDMIAR0!,{R2-R7}STMIAR1!,{R2-R7}2.5.3PUSH和POP•格式:

PUSH{reglist[,LR]}POP{reglist[,PC]}•说明:{reglist}为R0

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论