资源描述
第,3,章,ARM,指令系统,ARM,原理及应用,上讲知识回顾,异常,6,种异常响应过程及返回方法;,本讲学习内容,1,、,ARM,指令系统版本(了解),2,、,ARM,微处理器格式,3,、,ARM,微处理器指令的寻址方式,4,、,6,种异常响应过程及返回方法;,第三章,ARM指令系统,本章学习要求:,要求了解指令系统的格式,掌握,ARM,微处理器指令的寻址方式,掌握一些常用的,ARM,指令的使用方法,3.1 ARM,指令系统版本,ARM,公司从最初的开发到现在,,ARM,指令集结构有了巨大的改进,并在不断完善和发展。为了清楚地表达每个,ARM,内核所使用的指令集,,ARM,公司定义了一系列的指令集体系结构版本,以,vx,表示某种,版本。,(,V1,,,V2,,,V3,,,V4,,,V5,,,V6,),指令系统概念,指令:,是规定计算机进行某种操作的命令。,指令系统:,计算机能够执行的各种指令的集合。,3.2 ARM 微处理器指令格式,1)所有指令都是32位的。,(1)大多数指令都在单周期内完成。,(2)所有指令都可以条件执行。,(3)ARM指令为load/store类型。,(4)基本指令仅36条,分成五类。,(5)有9种寻址方式。,(6)指令集可以通过协处理器扩展。,1.ARM指令特点,2)ARM指令是加载/存储(Load/Store)型:,指令集仅能处理寄存器中的数据,处理结果都要放回寄存器中,对系统存储器的访问则需要通过专门的,加载/存储,指令来完成。,3)ARM指令可以分为五大类:,数据处理指令、存储器访问指令、分支指令、协处理器指令、杂项指令。,4)ARM指令有9种寻址方式:,寄存器寻址、立即寻址、寄存器偏移寻址、寄存器间接寻址、基址寻址、堆栈寻址、多寄存器寻址、块拷贝寻址、相对寻址。,2.ARM指令格式,1)ARM处理器是基于RISC原理设计的.,2)具有32位ARM指令集和16位Thumb指令集,3)ARM指令集效率高,但是代码密度低,4)Thumb指令集具有更好的代码密度,却仍然保持ARM的大多数性能上的优势,它是ARM指令集的子集。,5),所有,ARM,指令都是可以有条件执行的,而,Thumb,指令仅有一条指令具备条件执行功能。,6)ARM,程序和,Thumb,程序可相互调用,相互之间的状态切换开销几乎为零。,ARM指令字长为固定的32位。一条典型的ARM指令编码格式如下:,ARM指令的语法格式如下:,S ,其中,符号“”内的项是必须的,符号“”内的项是可选的。,是指令操作码,是必须的,如ADDS,SUBNES等。,为指令执行条件码,是可选的,如EQ,NE等,如果不写则使用默认条件AL(无条件执行)。,S,为是否影响CPSR寄存器的值,书写时影响CPSR,否则不影响。,Rd,为目标寄存器编码。,Rn,为第一个操作数的寄存器编码。,operand2,为第二个操作数。,Arm,指令中,操作码(,opcode,)、目的操作数(,Rd,)、源操作数,1,(,Rn,)是必须的字段。,条件码(,cond,)、符号位标记(,s,)源操作数,2,(,oprand2,)是可选的。,其中,Rd,和,Rn,必须是寄存器,因此,Arm,的“立即数”只能存储在,oprand2,。,3.ARM指令条件码,当处理器工作在,ARM,状态时,几乎所有的指令,都根据,CPSR,中条件码的状态和指令的条件域有条件地执行。当指令的执行条件满足时,指令被执行,否则被忽略。,每一条ARM指令包含,4位的条件码,,位于指令的最高4位31:28。条件码共有,16,种,每种条件码可用两个字符表示,这两个字符可以加在指令助记符后面和指令同时使用。如:跳转指令B可以加上后缀EQ变为BEQ表示“相等则跳转”,即当CPSR中的,Z,标志,置位,时发生,跳转,。,对于 Thumb 指令集,只有 B 指令具有条件码执行功能,此指令条件码同表 3.3.1,但如果为无条件执行时,条件码助记符“AL”不能在指令中书写。,寻址方式,定义,:,处理器根据指令中给出的,地址,/,信息,,寻找,操作数,/,物理地址,的方式。,ARM指令系统的寻址方式分为9种,有的,分为7种的等,下面介绍,7种寻址方式,:,3.3 ARM指令的主要寻址方式,1.,立即寻址(,立即数寻址,),定义:,操作数本身就在指令中给出,只要取出指令也就取到了操作数。这个操作数被称为立即数,对应的寻址方式也就叫做,立即寻址。,ADD R0,,,R0,,,1,;,R0R0,1,MOV R0,,,0 x3f,;,R0,0 x3f,注意:,书写,立即数时,要求以,“,”,为前缀。,十六进制数,后加,0 x,或,&,如,#0 x3f,#&3f.,二进制数,后加,0b,如,#0b1011,十进制数,,#,后加,0d,或缺省,如,#0d678,#789,在指令格式中,第二个操作数有12位,:,因此有效立即数,immediate,可以表示成:,=immed_8,循环右移(,2,rot,),4 bit 移位值(0-15)乘于2,得到一个范围在0-30,步长为 2的移位值。,因此,将ARM中的立即数,称为8位位图,。,记住一条准则:“最后8位移动偶数位”得到立即数。,Immed_8,rot,12 11 8 7 0,Shifter ROR,immediate,用,12,位第二操作数来表示一个,32,位立即数时,采用的是将,8,位数通过移位的方式来实现的,。,12bit,空间中,低,8,字节存储,8,位位图,高,4,字节存储循环右移的次数。,4,字节只能表示,24=16,种移动次数,但是由于常数表达式定义中,移位限定为偶数次,因此这,4,个字节刚好能表示,0,、,2,、,4,、,6,、,832,位,16,个数字!,ANDR1,R2,#0 xff,当处理器处理这条指令的第二操作数,0 xff,时,因为,0 xff,为,8,位二进制数,所以处理器就将其直接放进,8,位“基本”数中,而,4,位“移位”数则为,0.,ANDR1,R2,#0 x104,当处理器处理这条指令的第二操作数,0 x104,时,因为此时,0 x104,已经超过了,8,位二进制数,所以处理器就要将其“改造”一下,我们先把,0 x104,转换成二进制,0000,0000,0000,0000,0000,000100000100,我们可以看到,这个数是,0000,0000,0000,0000,0000,0000,01000001,通过循环右移,30,位得到的。,思考:,ANDR1,R2,#0 xff000000,2.寄存器寻址,寄存器寻址,利用寄存器中的数值作为操作数,。,(,这种,寻址方式是各类微处理器经常采用的一种方式,也是一种执行效率较高的,寻址方式。,),两种,具体形式:,寄存器寻址、寄存器移位,寻址。,一、寄存器寻址,如指令:,ADDR0,,,R1,,,R2,;,R0R1,R2,二、寄存器移位寻址,1)寄存器移位寻址,当第二操作数为寄存器型时,在执行寄存器寻址操作时,也可以对第二操作数寄存器进行移位,此时,第二操作数,形式为:,MOV Rd,Rn,Rm,,其中:,Rm,称为第二操作数寄存器,用来指定移位类型和移位位数,有两种形式:,5,位立即数(其值小于,32,),寄存器,(,用,Rs,表示,),(其值小于,32,),在指令执行时将寄存器移位后的内容作为第二操作数参与,运算。,例如,指令:,ADD R3,,,R2,,,R1,,,LSR#2,;,R3R2+(R1,右移,2,位,),ADD R3,,,R2,,,R1,,,LSR R0,;,R3R2+(R1,右移,R0,位,),2),第二操作数移位方式,共有,6,种移位方式:,LSL,逻辑左移,LSR,逻辑右移,ASL,算术左移,ASR,算术右移,ROR,循环右移,RRX,带扩展的循环右移,(,1,),LSL,:逻辑左移,,空出的最低有效位用,0,填充。,0,31 0,0,(2)LSR:逻辑右移,,空出的最高有效位用0填充。,31 0,SUB R3,R2,R1,LSL#2;R3R2-(R1左移2位),SUB R3,R2,R1,LSR R0;R3R2-(R1右移R0位),0,(,3,),ASL,:算术左移,,由于左移空出的有效位用,0,填充,因此它与,LSL,同义。,(,4,),ASR,:算术右移,(Arithmetic Shift Right),。算术移位的对象是带符号数,移位过程中必须保持操作数的符号不变。如果源操作数是正数,空出的最高有效位用,0,填充,如果是负数用,1,填充。,ADD R3,R2,,R1,ASL#2,;R3R2+(R1左移,2,位),SUB R3,R2,,R1,ASR R3,;R3R2-(R1算术右移,R3,位),30,0,(,5,),ROR,:循环右移,(Rotate Right),,移出的字的最低有效位依次填入空出的最高有效位。,31,0,(,6,),RRX,:带进位位的循环右移,(Rotate Right Extended),。将寄存器的内容,循环右移,1,位,,空位用原来,C,标志位填充。,31 0,C,SUB R3,R2,,R1,ROR#2,;R3R2+(R1循环右移,2,位),SUB R3,R2,,R1,RRX R0,;R3R2-(R1带进位位循环右移,R0,位),3)第二操作数的移位位数,移位位数可以用立即数方式或者寄存器方式给出,,其值均小于32,应为0-31。,如下所示:,ADD R3,R2,,R1,LSR#2,;R3,R2+(R1右移2位),ADD R3,R2,,R1,LSR R4,;R3,R2+(R1右移R4位),寄存器R1的内容分别逻辑右移2位、R4位,再与寄存器R2的内容相加,结果放入R3中。,3.寄存器间接寻址,就是以,寄存器中的值作为操作数的地址,,而操作数本身存放在存储单元中。例如以下指令:,LDRR0,,,R1;R0R1,STRR0,,,R1;R1R0,指令,1,将,以,R1,的值为地址的存储单元中的内容加载到寄存器,R0,中。,指令,2,将,R0,的内容存储到以,R1,的值为地址的存储单元中。,R1,基址寄存器,R1,的内容,基地址,
展开阅读全文