第3章ARM920T指令系统嵌入式系统原理及接口技术(第2版)1本章重点:⑴ARM指令集概述,ARM指令集全部指令编码及条件域;⑵ARM指令,讲述了ARM指令的编码格式、指令含义、汇编格式和使用举例。。另外,本章指令编码格式、指令汇编格式请直接看教材。嵌入式系统原理及接口技术(第2版)2S3C2410A嵌入式微处理器片内使用了ARM920T内核,因此S3C2410A使用ARM920T所支持的指令系统。ARM920T指令系统的指令集结构版本为v4T,ARM920T指令系统含有v4T以上指令集结构版本的基础指令,在v4T以上指令集结构版本的微处理器中都可以运行。ARM920T处理器支持32位寻址空间。嵌入式系统原理及接口技术(第2版)3ARM920T支持指令长度为32位的ARM指令集和指令长度为16位的Thumb指令集。从功能上讲,Thumb指令集是ARM指令集主要部分的一个子集。ARM920T处理器总是从ARM状态开始,必须用BX指令明确地转换到Thumb状态。嵌入式系统原理及接口技术(第2版)43.1ARM指令集概述3.1.1ARM指令集概述⒈ARM指令分组⑴分支指令⑵数据处理指令⑶状态寄存器访问指令⑷单个寄存器装入或存储指令⑸块数据装入或存储指令⑹协处理器指令嵌入式系统原理及接口技术(第2版)5⒉ARM指令的能力⑴条件执行⑵寄存器访问⑶对在线式桶形移位器(barrelshifter)的访问嵌入式系统原理及接口技术(第2版)63.1.2ARM指令集全部指令编码及条件域1.ARM指令集全部指令编码格式见图3.1。⒉指令编码中的条件域参见图3.1,指令编码格式中的bit[31:28]称为条件域。嵌入式系统原理及接口技术(第2版)7嵌入式系统原理及接口技术(第2版)8在ARM状态,所有指令都要根据CPSR中的条件码标志和指令中条件域指定的内容,有条件地执行。指令中条件域bit[31:28]确定在哪一种情况下这条指令被执行。如果C、N、Z和V标志的状态满足指令中条件域编码要求,指令被执行;否则指令被忽略。嵌入式系统原理及接口技术(第2版)9有15种可能的条件,每一种由2个字符代替,称为条件码助记符后缀(简称条件码助记符),可以附加在指令助记符后,如表3.1所示。例如在汇编语言中,分支指令B如果附加条件码助记符后缀为EQ,写作BEQ,表示相等(即Z=1)这条指令才执行;如果Z1,则这条指令不被执行,指令被忽略。嵌入式系统原理及接口技术(第2版)103.2ARM指令本节讲述的内容和先后次序如下:分支并且转换状态指令(BX);分支、分支并且连接指令(B、BL);数据处理指令;程序状态寄存器传送指令(MRS、MSR);乘、乘累加指令(MUL、MLA);长乘、长乘累加指令(MULL、MLAL);嵌入式系统原理及接口技术(第2版)11单个数据传送指令(LDR、STR);半字、带符号字节/半字传送指令(LDRH、STRH、LDRSB、LDRSH);块数据传送指令(LDM、STM);单个数据交换指令(SWP);软件中断指令(SWI);协处理器介绍;嵌入式系统原理及接口技术(第2版)12协处理器数据操作指令(CDP);协处理器数据传送指令(LDC、STC);协处理器寄存器传送指令(MRC、MCR);未定义指令。指令编码格式中的bit[31:28]为条件域。所有指令都要根据CPSR中的条件码标志和指令中的条件域指定的内容,有条件地执行。为简单起见,以下对各指令介绍时不再重复这部分内容。嵌入式系统原理及接口技术(第2版)133.2.1分支并且转换状态指令(BX)分支并且转换状态指令BX,在指令中指定了一个Rn寄存器,将Rn内容拷贝到PC,同时使PC[0]=0;把Rn[0]的值送CPSR的T位。如果Rn[0]=1,则T=1,将处理器状态转换成Thumb状态,把目标地址处的代码解释为Thumb代码;如果Rn[0]=0,则T=0,将处理器状态转换成ARM状态,把目标地址处的代码解释为ARM代码。嵌入式系统原理及接口技术(第2版)14⒈指令含义通过拷贝一个通用寄存器Rn的内容到程序计数器PC,指令实现分支功能。这条指令也允许指令集被转换,当这条指令被执行时,Rn的bit[0]位确定后续指令代码被译码作为ARM指令或Thumb指令。嵌入式系统原理及接口技术(第2版)15⒉指令汇编格式⒊使用举例【例3.1】处理器从执行ARM指令代码处分支到标号为Goto_THUMB处,并且执行Thumb指令代码,然后又返回到Back_ARM处,执行ARM指令代码。嵌入式系统原理及接口技术(第2版)16;假定处理器当前正在执行ARM指令ADRR1,Goto_THUMB+1;将分支目标地址送R1,使R1的bit[0]=1BXR1;分支并且转换为Thumb状态…CODE16;汇编以下代码为Thumb指令Goto_THUMB;分支目标地址标号…;Thumb指令代码ADRR2,Back_ARM;将分支目标地址送R2,并且R2的bit[0]=0BXR2;分支且转换为ARM状态…ALIGN;字对齐CODE32;汇编以下代码为ARM指令Back_ARM;分支目标地址标号…;ARM指令代码嵌入式系统原理及接口技术(第2版)173.2.2分支、分支并且连接指令(B、BL)分支指令B使程序分支(转移)到确定的地址处执行程序。分支并且连接指令BL除了使程序分支(转移)到确定的地址处执行程序外,还要保存返回地址到LR寄存器,即把BL指令的下一条指令的地址送LR。使用BL指令可以实现子程序调用。上述两条指令分支目标地址处的指令均应该属于ARM指令集,不允许分支到Thumb指令处。嵌入式系统原理及接口技术(第2版)18⒈指令含义对于分支指令B,bit[23:0]是24位带符号的偏移量,将其左移2位,符号位扩展到bit[31:26]形成一个32位数,与PC相加实现分支。因此指令能在±32MB地址范围内实现分支。分支偏移量必须考虑流水线指令预取操作,PC值是当前正在执行指令的地址加8的值。嵌入式系统原理及接口技术(第2版)19对于分支并且连接指令BL,执行指令会将PC值写入当前寄存器组的连接寄存器R14,写入的PC值是经过调整的、跟在分支并且连接指令后的指令的地址,同时R14的bit[1:0]被清0。使用分支并且连接指令BL可以调用一个子程序,为了从子程序返回,如果R14(LR)在子程序中没有被修改,可以使用MOVPC,R14指令实现返回。嵌入式系统原理及接口技术(第2版)20⒉指令汇编格式⒊使用举例【例3.2】使用分支指令使部分代码循环5次。MOVR0,#5;R0值为5Loop1SUBSR0,#1;R0减1送R0,设置标志位BNELoop1;使用了条件码,不为0则分支到标号;Loop1处嵌入式系统原理及接口技术(第2版)21【例3.3】使用分支并且连接指令调用不同的子程序。CMPR0,#0;比较,设置标志位BLEQSUBEQROG;相等,则调用SUBEQBLGTSUBGTROG;大于,则调用SUBGTBLSUBLTROG;小于,则调用SUBLT嵌入式系统原理及接口技术(第2版)223.2.3数据处理指令ARM数据处理指令可以分为三类:数据传送指令(如MOV和MVN)、算术逻辑操作指令(如ADD、SUB或AND等)和比较指令(如CMP和TST等)。数据处理指令只能对寄存器的内容进行操作,不允许对存储器中的数据进行操作,也不允许指令直接使用存储器的数据或在寄存器与存储器之间传送数据。嵌入式系统原理及接口技术(第2版)23对于数据传送指令MOV和MVN,指令中指定的目的寄存器内容被覆盖,如果目的寄存器指定了PC,如MOVPC,R14,则可以实现程序的转移。数据传送指令可以实现寄存器到寄存器,立即数到寄存器的传送。嵌入式系统原理及接口技术(第2版)24算术逻辑操作指令通常对指定的两个寄存器(或1个寄存器、1个立即数)进行操作,结果存到第3个寄存器,允许选择修改或不修改CPSR中的条件码标志。比较指令TEQ、TST、CMP和CMN,通常对指定的两个寄存器(或1个寄存器,1个立即数)进行比较,比较结果不保存到寄存器,只影响CPSR中的条件码标志。上述指令通常允许对指定的操作数进行移位操作。嵌入式系统原理及接口技术(第2版)25⒈指令编码格式指令编码格式见教材图3.2。图3.2中,第1操作数总是寄存器Rn。Rd称为目的寄存器,TST、TEQ、CMP和CMN指令不送结果到目的寄存器Rd,其他指令产生的结果送Rd。第2操作数Operand2可以是寄存器Rm的值经过移位产生的32位值,或8位立即数经过循环右移产生的32位的值,指令中bit[25]的值用来选择Rm或8位立即数。嵌入式系统原理及接口技术(第2版)26CPSR中的条件码可能被保护或由指令的结果设置,取决于指令中bit[20]的值。但是对于指令TST、TEQ、CMP和CMN,汇编器产生的指令编码一定会把指令的bit[20]置1,在执行指令时,由测试结果设置CPSR中的条件码标志。嵌入式系统原理及接口技术(第2版)27⒉指令含义⑴各指令含义数据处理指令依指令编码格式中bit[24:21]分为16条指令,包括:数据传送、算术逻辑操作和比较指令。各条指令含义见表3.2。嵌入式系统原理及接口技术(第2版)28⑵指令对CPSR中条件码标志位的影响在逻辑操作(AND、EOR、TST、TEQ、ORR、BIC)和数据传送操作(MOV、MVN)指令中,如果S位被置1(并且Rd不是R15),则CPSR中的V标志位不受影响;C标志位由桶形移位器产生的carryout设置;当指令操作结果为全0时Z标志位被设置;N标志位由指令操作结果的bit[31]的值设置。嵌入式系统原理及接口技术(第2版)29算术操作(SUB、RSB、ADD、ADC、SBC、RSC、CMP、CMN)指令中,每个操作数被看作32位整数(无符号数或带符号数的2的补码),如果指令中S位被置1(并且Rd不是R15),在发生溢出时,CPSR中的V标志位被设置;C标志位由ALU的bit[31]产生的进位设置;如果指令操作结果为全0时,Z标志位被设置;N标志位将被设置成指令操作结果的bit[31]的值。嵌入式系统原理及接口技术(第2版)30⑶对寄存器Rm内容进行移位,结果作为Operand2的值图3.3嵌入式系统原理及接口技术(第2版)31①使用指令中bit[11:7]指定的移位量对Rm移位·逻辑左移(LSL)图3.4逻辑左移(LSL#6)嵌入式系统原理及接口技术(第2版)32·逻辑右移(LSR)图3.5逻辑右移(LSR#6)嵌入式系统原理及接口技术(第2版)33·算术右移(ASR)图3.6算术右移(ASR#6)嵌入式系统原理及接口技术(第2版)34·循环右移(ROR)图3.7循环右移(ROR#6)嵌入式系统原理及接口技术(第2版)35图3.8扩展循环右移(RRX)嵌入式系统原理及接口技术(第2版)36在使用指令中bit[11:7]指定对Rm的移位量,bit[6:5]指定移位类型时,指令汇编格式举例见表3.3。嵌入式系统原理及接口技术(第2版)37表3.3指令bit[11:7]和bit[6:5]指定Rm移位量和移位类型举例指定对Rm的移位量和移位类型指令举例指令含义Rm,LSL#5bit_shift_ImmADDR0,R2,R3,LSL#1R3的值逻辑左移1位,加R2,和送R0Rm,LSR#5bit_shift_ImmSUBR0,R2,R3,LSR#2R3的值逻辑右移2位,从R2中减去,差送R0Rm,ASR#5bit_shift_ImmMOVR1,R0,ASR#2R0的值算术右移2位,送R1Rm,ROR#5bit_shift_ImmSUBR1,R2,R4,ROR#6R4的值循环右移6位,从R2中减去,差送R1Rm,RRXANDR2,R3,R4,RRXR4的值扩展循环右移,和R3与的结果送R2嵌入式系统原理及接口技术(第2版)38②使用指令