嵌入式原理及接口技术课件ch3-第2版-嵌入式系统原理及接口技术_第1页
嵌入式原理及接口技术课件ch3-第2版-嵌入式系统原理及接口技术_第2页
嵌入式原理及接口技术课件ch3-第2版-嵌入式系统原理及接口技术_第3页
嵌入式原理及接口技术课件ch3-第2版-嵌入式系统原理及接口技术_第4页
嵌入式原理及接口技术课件ch3-第2版-嵌入式系统原理及接口技术_第5页
已阅读5页,还剩99页未读 继续免费阅读

下载本文档

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

文档简介

本章重点:⑴ARM指令集概述,ARM指令集全部指令编码及条件域;⑵ARM指令,讲述了ARM指令的编码格式、指令含义、汇编格式和使用举例。。另外,本章指令编码格式、指令汇编格式请直接看教材。嵌入式系统原理及接口技术(第2版)1S3C2410A嵌入式微处理器片内使用了ARM920T内核,因此S3C2410A使用ARM920T所支持的指令系统。ARM920T指令系统的指令集结构版本为v4T,ARM920T指令系统含有v4T以上指令集结构版本的基础指令,在v4T以上指令集结构版本的微处理器中都可以运行。ARM920T处理器支持32位寻址空间。嵌入式系统原理及接口技术(第2版)2ARM920T支持指令长度为32位的ARM指令集和指令长度为16位的Thumb指令集。从功能上讲,Thumb指令集是ARM指令集主要部分的一个子集。ARM920T处理器总是从ARM状态开始,必须用BX指令明确地转换到Thumb状态。嵌入式系统原理及接口技术(第2版)33.1ARM指令集概述3.1.1ARM指令集概述⒈ARM指令分组⑴分支指令⑵数据处理指令⑶状态寄存器访问指令⑷单个寄存器装入或存储指令⑸块数据装入或存储指令⑹协处理器指令嵌入式系统原理及接口技术(第2版)4⒉ARM指令的能力⑴条件执行⑵寄存器访问⑶对在线式桶形移位器(barrelshifter)的访问嵌入式系统原理及接口技术(第2版)5

3.1.2ARM指令集全部指令编码及条件域

1.ARM指令集全部指令编码格式见图3.1。⒉指令编码中的条件域参见图3.1,指令编码格式中的bit[31:28]称为条件域。嵌入式系统原理及接口技术(第2版)6

嵌入式系统原理及接口技术(第2版)7在ARM状态,所有指令都要根据CPSR中的条件码标志和指令中条件域指定的内容,有条件地执行。指令中条件域bit[31:28]确定在哪一种情况下这条指令被执行。如果C、N、Z和V标志的状态满足指令中条件域编码要求,指令被执行;否则指令被忽略。嵌入式系统原理及接口技术(第2版)8有15种可能的条件,每一种由2个字符代替,称为条件码助记符后缀(简称条件码助记符),可以附加在指令助记符后,如表3.1所示。例如在汇编语言中,分支指令B如果附加条件码助记符后缀为EQ,写作BEQ,表示相等(即Z=1)这条指令才执行;如果Z<>1,则这条指令不被执行,指令被忽略。嵌入式系统原理及接口技术(第2版)93.2ARM指令本节讲述的内容和先后次序如下:分支并且转换状态指令(BX);分支、分支并且连接指令(B、BL);数据处理指令;程序状态寄存器传送指令(MRS、MSR);乘、乘累加指令(MUL、MLA);长乘、长乘累加指令(MULL、MLAL);嵌入式系统原理及接口技术(第2版)10单个数据传送指令(LDR、STR);半字、带符号字节/半字传送指令(LDRH、STRH、LDRSB、LDRSH);块数据传送指令(LDM、STM);单个数据交换指令(SWP);软件中断指令(SWI);协处理器介绍;嵌入式系统原理及接口技术(第2版)11协处理器数据操作指令(CDP);协处理器数据传送指令(LDC、STC);协处理器寄存器传送指令(MRC、MCR);未定义指令。指令编码格式中的bit[31:28]为条件域。所有指令都要根据CPSR中的条件码标志和指令中的条件域指定的内容,有条件地执行。为简单起见,以下对各指令介绍时不再重复这部分内容。嵌入式系统原理及接口技术(第2版)123.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版)13⒈指令含义通过拷贝一个通用寄存器Rn的内容到程序计数器PC,指令实现分支功能。这条指令也允许指令集被转换,当这条指令被执行时,Rn的bit[0]位确定后续指令代码被译码作为ARM指令或Thumb指令。嵌入式系统原理及接口技术(第2版)14⒉指令汇编格式⒊使用举例【例3.1】处理器从执行ARM指令代码处分支到标号为Goto_THUMB处,并且执行Thumb指令代码,然后又返回到Back_ARM处,执行ARM指令代码。嵌入式系统原理及接口技术(第2版)15

;假定处理器当前正在执行ARM指令ADRR1,Goto_THUMB+1;将分支目标地址送R1,使R1的bit[0]=1

BXR1;分支并且转换为Thumb状态

CODE16;汇编以下代码为Thumb指令Goto_THUMB;分支目标地址标号

…;Thumb指令代码

ADRR2,Back_ARM;将分支目标地址送R2,并且R2的bit[0]=0

BXR2;分支且转换为ARM状态

…ALIGN;字对齐

CODE32;汇编以下代码为ARM指令Back_ARM;分支目标地址标号

…;ARM指令代码嵌入式系统原理及接口技术(第2版)163.2.2分支、分支并且连接指令(B、BL)分支指令B使程序分支(转移)到确定的地址处执行程序。分支并且连接指令BL除了使程序分支(转移)到确定的地址处执行程序外,还要保存返回地址到LR寄存器,即把BL指令的下一条指令的地址送LR。使用BL指令可以实现子程序调用。上述两条指令分支目标地址处的指令均应该属于ARM指令集,不允许分支到Thumb指令处。嵌入式系统原理及接口技术(第2版)17⒈指令含义对于分支指令B,bit[23:0]是24位带符号的偏移量,将其左移2位,符号位扩展到bit[31:26]形成一个32位数,与PC相加实现分支。因此指令能在±32MB地址范围内实现分支。分支偏移量必须考虑流水线指令预取操作,PC值是当前正在执行指令的地址加8的值。嵌入式系统原理及接口技术(第2版)18对于分支并且连接指令BL,执行指令会将PC值写入当前寄存器组的连接寄存器R14,写入的PC值是经过调整的、跟在分支并且连接指令后的指令的地址,同时R14的bit[1:0]被清0。使用分支并且连接指令BL可以调用一个子程序,为了从子程序返回,如果R14(LR)在子程序中没有被修改,可以使用MOVPC,R14指令实现返回。嵌入式系统原理及接口技术(第2版)19⒉指令汇编格式

⒊使用举例

【例3.2】使用分支指令使部分代码循环5次。MOVR0,#5;R0值为5Loop1

SUBSR0,#1;R0减1送R0,设置标志位

BNELoop1;使用了条件码,不为0则分支到标号;Loop1处嵌入式系统原理及接口技术(第2版)20【例3.3】使用分支并且连接指令调用不同的子程序。CMPR0,#0;比较,设置标志位

BLEQSUBEQROG;相等,则调用SUBEQ

BLGTSUBGTROG;大于,则调用SUBGT

BLSUBLTROG;小于,则调用SUBLT嵌入式系统原理及接口技术(第2版)213.2.3数据处理指令ARM数据处理指令可以分为三类:数据传送指令(如MOV和MVN)、算术逻辑操作指令(如ADD、SUB或AND等)和比较指令(如CMP和TST等)。数据处理指令只能对寄存器的内容进行操作,不允许对存储器中的数据进行操作,也不允许指令直接使用存储器的数据或在寄存器与存储器之间传送数据。嵌入式系统原理及接口技术(第2版)22对于数据传送指令MOV和MVN,指令中指定的目的寄存器内容被覆盖,如果目的寄存器指定了PC,如MOVPC,R14,则可以实现程序的转移。数据传送指令可以实现寄存器到寄存器,立即数到寄存器的传送。嵌入式系统原理及接口技术(第2版)23算术逻辑操作指令通常对指定的两个寄存器(或1个寄存器、1个立即数)进行操作,结果存到第3个寄存器,允许选择修改或不修改CPSR中的条件码标志。比较指令TEQ、TST、CMP和CMN,通常对指定的两个寄存器(或1个寄存器,1个立即数)进行比较,比较结果不保存到寄存器,只影响CPSR中的条件码标志。上述指令通常允许对指定的操作数进行移位操作。嵌入式系统原理及接口技术(第2版)24⒈指令编码格式指令编码格式见教材图3.2。图3.2中,第1操作数总是寄存器Rn。Rd称为目的寄存器,TST、TEQ、CMP和CMN指令不送结果到目的寄存器Rd,其他指令产生的结果送Rd。第2操作数Operand2可以是寄存器Rm的值经过移位产生的32位值,或8位立即数经过循环右移产生的32位的值,指令中bit[25]的值用来选择Rm或8位立即数。嵌入式系统原理及接口技术(第2版)25CPSR中的条件码可能被保护或由指令的结果设置,取决于指令中bit[20]的值。但是对于指令TST、TEQ、CMP和CMN,汇编器产生的指令编码一定会把指令的bit[20]置1,在执行指令时,由测试结果设置CPSR中的条件码标志。嵌入式系统原理及接口技术(第2版)26⒉指令含义⑴各指令含义数据处理指令依指令编码格式中bit[24:21]分为16条指令,包括:数据传送、算术逻辑操作和比较指令。各条指令含义见表3.2。嵌入式系统原理及接口技术(第2版)27⑵指令对CPSR中条件码标志位的影响在逻辑操作(AND、EOR、TST、TEQ、ORR、BIC)和数据传送操作(MOV、MVN)指令中,如果S位被置1(并且Rd不是R15),则CPSR中的V标志位不受影响;C标志位由桶形移位器产生的carryout设置;当指令操作结果为全0时Z标志位被设置;N标志位由指令操作结果的bit[31]的值设置。嵌入式系统原理及接口技术(第2版)28算术操作(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版)29⑶对寄存器Rm内容进行移位,结果作为Operand2的值图3.3嵌入式系统原理及接口技术(第2版)30①使用指令中bit[11:7]指定的移位量对Rm移位

·

逻辑左移(LSL)图3.4逻辑左移(LSL#6)

嵌入式系统原理及接口技术(第2版)31

·

逻辑右移(LSR)图3.5逻辑右移(LSR#6)

嵌入式系统原理及接口技术(第2版)32·

算术右移(ASR)图3.6算术右移(ASR#6)

嵌入式系统原理及接口技术(第2版)33·

循环右移(ROR)图3.7循环右移(ROR#6)

嵌入式系统原理及接口技术(第2版)34图3.8扩展循环右移(RRX)嵌入式系统原理及接口技术(第2版)35在使用指令中bit[11:7]指定对Rm的移位量,bit[6:5]指定移位类型时,指令汇编格式举例见表3.3。嵌入式系统原理及接口技术(第2版)36表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版)37②使用指令中bit[11:8]指定Rs寄存器,且用Rs中最低字节指定移位量参见图3.2和图3.3,由指令中bit[11:8]指定Rs寄存器,移位量保存在Rs寄存器的最低字节,对Rm寄存器的内容进行移位,产生的结果作为Operand2的值。如果Rs中指定的移位次数为0,那么不改变Rm的内容作为Operand2,并且CPSR中C位的值作为carryout,即C位的值不变。如果Rs中最低字节指定的移位次数在1~31之间,进行的移位操作与产生的结果参阅图3.4、3.5、3.6、3.7。嵌入式系统原理及接口技术(第2版)38如果Rs中最低字节指定的移位次数大于、等于32,产生的结果如下:

·

对LSL,如果移位次数等于32,移位结果Operand2为全0,Rm[0]作为carryout。

·

对LSL,如果移位次数大于32,移位结果Operand2为全0,carryout为0。

·

对LSR,如果移位次数等于32,移位结果Operand2为全0,Rm[31]作为carryout。

·

对LSR,如果移位次数大于32,移位结果Operand2为全0,carryout为0。

·

对ASR,如果移位次数大于、等于32,用Rm[31]填充Operand2各位,用Rm[31]作为carryout。嵌入式系统原理及接口技术(第2版)39

·

对ROR,如果移位次数等于32,移位结果Operand2等于Rm的值,carryout等于Rm[31]。

·

对于ROR,如果移位次数大于32,用移位次数重复减32,直到它们的差在1~32之间,用这个值作为移位次数,移位结果如前述。对于上述各种情况,carryout的值,均送往CPSR中的进位标志C。使用Rs指定移位量时,指令中bit[6:5]指定移位类型,指令汇编格式举例见表3.4。嵌入式系统原理及接口技术(第2版)40表3.4用Rs指定Rm的移位量和指令中bit[6:5]指定移位类型举例指定Rm的移位量和移位类型指令举例指令含义Rm,LSLRsADDR0,R1,R2,LSLR3移位量在R3中,R2逻辑左移,加R1,和送R0Rm,LSRRsSUBR0,R1,R2,LSRR4移位量在R4中,R2逻辑右移,从R1中减去,差送R0Rm,ASRRsANDR1,R2,R3,ASRR0移位量在R0中,R3算术右移,和R2逻辑与,结果送R1Rm,RORRsMOVR2,R4,RORR0移位量在R0中,R4循环右移,送R2嵌入式系统原理及接口技术(第2版)41⑷对指令中bit[7:0]指定的8位无符号立即数循环右移参见图3.2,对指令中bit[7:0]指定的8位无符号立即数进行循环右移时,用bit[11:8]指定移位量,它是一个4位无符号整数。进行移位操作时,要把指令中bit[7:0]指定的8位无符号立即数作为最低字节,高位bit[31:8]用0扩展,形成一个32位数,对这个32位数进行循环右移。移位的次数,由指令中bit[11:8]指定的4位无符号数乘以2得到,分别为0,2,4,…30。此外,移位过程可参见图3.7。⑸关于R15和CPSR中的条件码标志嵌入式系统原理及接口技术(第2版)42

⒊指令汇编格式

⒋使用举例⑴数据传送和数据求反传送指令举例嵌入式系统原理及接口技术(第2版)43

MOVSR4,R3,LSL#2;R4等于R3逻辑左移2位的值,设置标志位

MOVSPC,R14;PC=R14,且CPSR=SPSR_<mode>,用于从;异常返回

MOVR15,LR;PC=R14,用于从子程序返回

MVNR0,R1;R1的值求反送R0

MVNR2,#0xf0;R2=0xffffff0f

MVNR0,#0;R0=0xffffffff,即R0=-1嵌入式系统原理及接口技术(第2版)44以下举例见教材⑵算术操作指令举例⑶逻辑操作指令举例⑷比较与测试指令举例⑸使用移位操作的指令举例

⑹程序举例

嵌入式系统原理及接口技术(第2版)45以下举例见教材【例3.4】如果R0=1或者R1=2,则程序分支到标号为Label0处;否则,执行标号为Label1处的代码。【例3.5】求R0的绝对值,再求R1的绝对值,将这两个绝对值相加,和存R2。求绝对值的方法是:当Rn>=0时,Rn的值不变;否则,将Rn的值求补。【例3.6】对于R1中的无符号数,判断其值的不同范围,作不同的计算。嵌入式系统原理及接口技术(第2版)46以下举例见参考书【例3.7】求R0*4+R1*5-R2*7的值,假定它们都是无符号数,运算结果也不会产生进位,结果存R3中。【例3.8】从子程序返回和从异常返回的区别。嵌入式系统原理及接口技术(第2版)47

3.2.4程序状态寄存器传送指令(MRS、MSR)只有程序状态寄存器传送指令MRS、MSR,才允许读/写程序状态寄存器CPSR或SPSR_<mode>。MRS指令读出程序状态寄存器的值送通用寄存器,MSR将通用寄存器的值写入程序状态寄存器。也可以使用通用寄存器的最高4位或立即数的最高4位修改程序状态寄存器的条件码标志。程序中不允许通过MSR指令直接修改CPSR中的T控制位来实现ARM/Thumb状态的转换,只能通过BX指令去实现ARM/Thumb状态的转换。嵌入式系统原理及接口技术(第2版)48

⒈指令编码格式指令编码格式见教材图3.9、3.10和3.11。⒉指令含义MRS指令允许将CPSR或SPSR_<mode>的内容传送到一个通用寄存器。MSR指令允许将一个通用寄存器的内容传送到CPSR或SPSR_<mode>寄存器。MSR指令也允许将一个立即数或寄存器的内容只传送到CPSR或SPSR_<mode>寄存器的条件码标志(N、Z、C和V),而不影响其他控制位。在这种情况下,指定寄存器的最高4位或立即数的最高4位的内容被写入CPSR或SPSR_<mode>的最高4位(条件码标志)。嵌入式系统原理及接口技术(第2版)49

⒊指令汇编格式⒋使用举例在User(用户)方式和特权方式,某些相同格式的指令,产生的作用是不相同的。嵌入式系统原理及接口技术(第2版)50

;在用户方式MSRCPSR,R0;R0[31:28]送CPSR[31:28]

MSRCPSR_flg,R0;R0[31:28]送CPSR[31:28]

MSRCPSR_flg,#0xf0000000;0xf送CPSR[31:28]

MRSR0,CPSR;CPSR[31:0]送R0[31:0]

;在特权方式

MSRCPSR,R0;R0[31:0]送CPSR[31:0]

MSRCPSR_flg,R0;R0[31:28]送CPSR[31:28]

MSRCPSR_flg,#0xf0000000;0xf送CPSR[31:28]

MSRSPSR,R0;R0[31:0]送SPSR_<mode>[31:0]

MSRSPSR_flg,R0;R0[31:28]送SPSR_<mode>[31:28]

MSRSPSR_flg,#0x30000000;0x3送SPSR_flg[31:28]

MRSR1,SPSR;SPSR_<mode>[31:0]送R1[31:0]嵌入式系统原理及接口技术(第2版)51【例3.9】允许FIQ中断,禁止FIQ中断。(见教材)嵌入式系统原理及接口技术(第2版)523.2.5乘、乘累加指令(MUL、MLA)乘指令MUL实现32位数乘32位数,只保留积的低32位,操作数和结果均在指定的寄存器中。乘累加指令MLA实现32位数乘32位数,积的低32位与另外一个32位数累加,结果保留32位。操作数和结果均在指定的寄存器中。嵌入式系统原理及接口技术(第2版)53⒈指令含义乘指令的结果存Rd中,即Rd=Rm*Rs,为了与以后的指令集兼容,Rn应设置为0。乘累加的结果存Rd中,即Rd=Rm*Rs+Rn。

⒉指令汇编格式

⒊使用举例(见教材)嵌入式系统原理及接口技术(第2版)543.2.6长乘、长乘累加指令(MULL、MLAL)长乘指令实现32位数乘32位数,积保留64位,操作数和结果均在指定的寄存器中。长乘累加指令实现32位数乘32位数,积保留64位,与另一个64位数相加,结果保留64位。操作数和结果均在指定的寄存器中。UMULL为无符号数长乘、SMULL为带符号数长乘、UMLAL为无符号数长乘累加、SMLAL为带符号数长乘累加指令。嵌入式系统原理及接口技术(第2版)55⒈指令含义长乘指令64位结果中,高32位存RdHi、低32位存RdLo寄存器中,即RdHi、RdLo=Rm*Rs。长乘累加指令64位结果存RdHi和RdLo中,即RdHi、RdLo=Rm*Rs+RdHi、RdLo。指令中RdHi和RdLo事先要保存进行加法的一个64位操作数,分别保存高、低32位。R15不能使用。RdHi、RdLo和Rm必须指定不同的寄存器。嵌入式系统原理及接口技术(第2版)56

⒉指令汇编格式

⒊使用举例【例3.10】检测长乘指令结果是否超过32位。方法1:

对无符号数32位乘32位运算,指令产生的结果是64位无符号数,如果结果的高32位为全0,那么结果的有效值仅使用低32位即可;如果结果的高32位不为全0,那么结果的有效值应该使用64位。嵌入式系统原理及接口技术(第2版)57

UMULLR1,R2,R3,R4;R2、R1=R3*R4TEQR2,#0;测试结果高32位是否为全0

BNEResult64;不是全0,分支到结果使用64位有效值处;结果有效值使用32位

…Result64

…嵌入式系统原理及接口技术(第2版)58方法2:

对带符号数32位乘32位运算,指令产生的结果是64位带符号数,存于RdHi和RdLo中。如果RdHi为全0,并且RdLo[31]=0,那么结果的有效值仅使用RdLo中的低32位即可;如果RdHi为全1,并且RdLo[31]=1,那么结果的有效值仅使用RdLo中的低32位即可。如果不是这两种情况,那么结果的有效值应该使用64位。(程序见教材)【例3.11】检测长乘累加指令结果是否超过64位。(程序见教材)嵌入式系统原理及接口技术(第2版)593.2.7单个数据传送指令(LDR、STR)执行一条单个数据传送指令只能在存储器和寄存器之间传送一字节或一个字数据。⒈指令编码格式指令编码格式见图3.12。⒉指令含义单个数据传送指令有如下4条:嵌入式系统原理及接口技术(第2版)60LDR指令从存储器指定地址装入一个字数据到目的寄存器。LDRB指令从存储器指定地址装入一字节数据到目的寄存器的bit[7:0],bit[31:8]填0。STR指令保存寄存器一个字数据到存储器指定地址。STRB指令保存寄存器的低8位数据到存储器指定地址。存储器的地址通过计算得到,需要对基址寄存器加偏移量,或从基址寄存器减偏移量产生。嵌入式系统原理及接口技术(第2版)61指令中可以指定回写位,当指令中W=1时,通过计算得到的存储器地址,回写到基址寄存器;W=0时,基址寄存器的值保持原值。⑴偏移量和自动索引⑵传送字节/字⑶使用R15嵌入式系统原理及接口技术(第2版)62⒊指令汇编格式①能产生地址的表达式②先索引寻址③后索引寻址④关于<shift>⑤关于{!}

⒋使用举例嵌入式系统原理及接口技术(第2版)63

LDRR0,[R1,R2];先索引,R1+R2内容作地址,读字数据送R0,不回写LDRR0,[R1,R2]!;先索引,R1+R2内容作地址,读字数据送R0,;R1+R2回写R1

LDRR0,[R1,-R2];先索引,不回写,地址由R1-R2的内容指定

LDRR0,[R1],R2;后索引,R1内容作地址,读字数据送R0,;R1+R2回写R1

STRR0,[R1],#8;后索引,R0数据送以R1内容作地址的存储器单元,;R1+8回写R1

STRR0,[R1,#8];先索引,R0数据写入R1+8作地址的存储器,不回写

LDREQBR1,[R6,#5];条件执行,R6+5内容作地址,读一字节数据送;R1[7:0],R1[31:8]填0STRBR0,[R1,#4];存R0[7:0]到R1+4内容作地址的存储器,不回写嵌入式系统原理及接口技术(第2版)64【例3.12】访问变量。以下程序先取得变量地址,然后读入变量,变量减量,保存。(见教材)嵌入式系统原理及接口技术(第2版)653.2.8半字、带符号字节/半字传送指令(LDRH、STRH、LDRSB、LDRSH)⒈指令编码格式指令编码格式分为两种,一种是偏移量在指定的寄存器中,见图3.18;另一种是把指令中的8位立即数作为偏移量,见图3.19。⒉指令含义半字、带符号字节/半字传送指令允许在寄存器与存储器之间装入和存储半字数据、装入带符号扩展的字节或半字数据:

嵌入式系统原理及接口技术(第2版)66LDRH指令从存储器装入半字数据到寄存器低16位,高16位用0扩展;STRH指令保存寄存器中的低半字数据到存储器;LDRSB指令从存储器装入一字节数据到寄存器bit[7:0],用符号位bit[7]扩展寄存器的bit[31:8];LDRSH指令从存储器装入半字数据到寄存器bit[15:0],用符号位bit[15]扩展寄存器的bit[31:16]。嵌入式系统原理及接口技术(第2版)67传送使用的存储器地址,由基址寄存器加或减一个偏移量计算形成。计算出的地址可以回写/不回写基址寄存器。计算地址可以在数据传送前或传送后进行。嵌入式系统原理及接口技术(第2版)68⑴偏移量和自动索引相对基址寄存器的偏移量,有两种指定方法,一种是指令中指定的8位无符号立即数作为偏移量,另一种是指令中指定寄存器Rm,Rm的值作为偏移量。⑵半字装入和存储指令指令中S=0且H=1时,指令LDRH读存储器半字数据装入寄存器;指令STRH存寄存器半字数据到存储器。当指令中L=1时,表示从存储器装入半字数据到目的寄存器bit[15:0],高16位填0。当指令中L=0时,表示把指定寄存器的bit[15:0]的数据送存储器。嵌入式系统原理及接口技术(第2版)69⑶带符号字节/半字数据装入指令指令中S=1并且H=0时,LDRSB指令装入1字节带符号数,并且扩展符号位。指令中S=1并且H=1时,LDRSH指令装入半字带符号数,并且扩展符号位。当指令中S=1时,指令中的L位不能为0,也就是说带符号字节/半字数据,只能从存储器装入寄存器,不能从寄存器传送到存储器。⑷使用R15如果指定了R15作为基址寄存器Rn,那么不应该指定地址回写。嵌入式系统原理及接口技术(第2版)70

⒊指令汇编格式

①能产生地址的表达式

②先索引寻址

③后索引寻址

④Rn和Rm

⑤关于{!}

嵌入式系统原理及接口技术(第2版)71

LDRHR0,[R1-R2]!;R1-R2内容作地址,装入半字数据到R0低16位,;高16位用0扩展,地址回写R1STRHR2,[R3,#04];R3+04内容作地址,存R2中低16位,不回写

LDRSBR7,[R1],#230;R1内容作地址,装入1字节数据到R7低8位,;符号扩展,R1+230回写R1

LDRNESHR10,[R1];条件执行,R1内容作地址,装入半字数据到;R10低16位,符号扩展

STRHR1,[R0,#2]!;R1中低16位存R0+2地址中,R0+2回写R0⒋使用举例嵌入式系统原理及接口技术(第2版)72

3.2.9块数据传送指令(LDM、STM)块数据传送指令也称为多寄存器装入/存储指令,它可以实现多个寄存器与存储器多个单元之间的数据传送。LDM指令从存储器装入数据到寄存器;STM指令保存寄存器内容到存储器。允许使用一条指令传送16个寄存器中的任何一个子集或全部寄存器,但不允许寄存器的个数为0。LDM/STM指令用于堆栈操作或块数据传送,主要用途为保护现场、块数据复制、参数传送或上下文切换。嵌入式系统原理及接口技术(第2版)73

⒈指令编码格式指令编码格式见图3.15。⒉指令含义块数据传送指令用于装入(LDM)或存储(STM)当前方式可见寄存器组的一个子集或全部寄存器。指令支持所有可能的堆栈方式,维护满或空类型的堆栈,STM指令操作支持存储器地址增大或减小两种方式。块数据传送指令,对于保存和恢复上下文或移动存储器中大的数据块,是非常有效的指令。嵌入式系统原理及接口技术(第2版)74⑴寄存器列表⑵寻址方式传送地址的确定,由基址寄存器Rn的内容、先/后索引位P和加/减位U共同决定。图3.16~图3.19中给出了不同寻址方式寄存器传送的次序、地址的使用方法和传送完成后Rn的值。⑶地址对齐地址通常应该字边界对齐。嵌入式系统原理及接口技术(第2版)75⑷S位的使用在LDM/STM指令中,当S位被设置,它的含义取决于R15是否在传送列表中以及执行的是LDM还是STM指令。如果指令在特权方式被执行,S位才允许被设置。以下三种情况均指在特权方式下指令执行时的含义。①传送列表中有R15并且S位被设置的LDM指令(方式改变)②传送列表中有R15并且S位被设置的STM指令(用户方式寄存器组传送)③传送列表中没有R15并且S位被设置(用户方式寄存器组传送)嵌入式系统原理及接口技术(第2版)76⑸关于使用R15作为基址寄存器⑹基址寄存器在寄存器列表中

⒊指令汇编格式对于LDM/STM指令,如果使用堆栈指针寄存器R13作为基址寄存器,根据不同形式的堆栈要求,指令中的后缀FD、ED、FA和EA分别表示满递减堆栈、空递减堆栈、满递增堆栈和空递增堆栈。其中F表示满堆栈、E表示空堆栈、A表示递增、D表示递减,具体含义如下:

嵌入式系统原理及接口技术(第2版)77满堆栈:堆栈指针指向栈中最后一项。空堆栈:堆栈指针指向栈中下一个可用空间。递增:STM指令使堆栈向存储器地址增大方向生长。递减:STM指令使堆栈向存储器地址减小方向生长。递增或递减方式的地址修改偏移量为4。嵌入式系统原理及接口技术(第2版)78另外,如果LDM/STM指令不使用R13作为基址寄存器,也可以从存储器读块数据到寄存器列表或将指定的寄存器列表内容送存储器。指令后缀IA、IB、DA和DB定义了先/后索引和增量/减量位。其中I表示增量,D表示减量;A表示后索引,B表示先索引。IA、IB、DA和DB分别对应后索引增量、先索引增量、后索引减量和先索引减量寻址方式,详见表3.5。增量或减量的地址修改偏移量为4。嵌入式系统原理及接口技术(第2版)79表3.5块数据传送指令不使用R13作为基址寄存器的寻址方式指令后缀寻址方式地址计算方法IA后索引增量存储器与寄存器之间传送一个字数据后,地址加4IB先索引增量存储器与寄存器之间传送一个字数据前,地址加4DA后索引减量存储器与寄存器之间传送一个字数据后,地址减4DB先索引减量存储器与寄存器之间传送一个字数据前,地址减4嵌入式系统原理及接口技术(第2版)80⒋使用举例

LDMFDSP!,{R1,R2,R3};将SP指向的存储器单元多字数据,装入到;R1、R2和R3,满递减堆栈,回写SPSTMIAR0,{R0-R15};保存全部寄存器内容到R0指向的存储器单元,;R0值不变

LDMFDSP!,{R15};将SP指向的存储器单元字数据,装入到R15,;不改变CPSR,回写SP

LDMFDSP!,{R15}^;将SP指向的存储器单元字数据,装入R15,同时;将SPSR_<mode>的值送CPSR,回写SP,;只允许在特权方式使用

STMFDR13,{R0-R14}^;用户方式寄存器R0-R14的内容存入堆栈,;只允许在特权方式使用嵌入式系统原理及接口技术(第2版)81【例3.13】如下子程序首先在分支前,保存工作寄存器R0-R7和连接寄存器R14的值到堆栈,然后BL指令分支到另外的程序,破坏了原R14的值,之后LDMED指令从堆栈出栈到工作寄存器R0-R7,将原R14连接寄存器的值出栈到R15(PC),实现了从这个子程序返回的目的。(见教材)【例3.14】将存储器源数据缓冲区SrcBuff的8个字传送到目的数据缓冲区DstBuff。(见教材)嵌入式系统原理及接口技术(第2版)82

3.2.10单个数据交换指令(SWP)单个数据交换指令允许寄存器与存储器之间交换字节/字数据。SWP指令为字交换指令,允许读出存储器中指定地址的一个字数据,装入一个寄存器,而将另一个寄存器的内容写入存储器的同一个地址中。SWPB指令为字节交换指令,允许读出存储器中指定地址的一字节数据,装入一个寄存器的低8位,而将另一个寄存器低8位的内容写入存储器的同一个地址中。SWP和SWPB指令中,允许两个寄存器有相同的寄存器名,这样指令的功能就变成了一个寄存器与存储器确定单元之间的字/字节数据交换。嵌入式系统原理及接口技术(第2版)83⒈指令含义数据交换指令执行是由一个存储器读和跟随着的一个存储器写操作共同完成的。它们被绑在一起,直到这两个操作完成前,处理器不能被中断。与此同时存储器管理器被告知,把这两个操作看作是不可分隔的。嵌入式系统原理及接口技术(第2版)84交换的地址由基址寄存器Rn的内容确定。处理器首先读交换地址确定的存储器的内容,然后写源寄存器Rm的内容到同一内存地址单元,从存储器读出的内容保存到目的寄存器Rd。源寄存器和目的寄存器可以指定为同一个寄存器,这时指定的寄存器的内容写入存储器,而从存储器读出的数据装入同一个寄存器。

⒉指令汇编格式嵌入式系统原理及接口技术(第2版)85

使用举例SWPR1,R2,[R3];地址在R3中,读存储器内容装入R1,存R2的内容;到R3确定的存储器地址中,字交换

SWPBR3,R4,[R5];地址在R5中,装入一字节到R3,存R4[7:0];到R5确定的存储器地址中

SWPEQR1,R1,[R2];条件执行。条件成立时,将R1的内容与R2作为;地址的存储器单元的内容作字交换嵌入式系统原理及接口技术(第2版)863.2.11软件中断指令(SWI)软件中断指令也称软中断指令,执行SWI指令引起中断产生。⒈指令编码格式指令编码格式见图3.20。⒉指令含义软件中断指令作为一种控制方法,用来实现从用户方式进入(转换)到管理方式。在其他方式也可以使用SWI指令,处理器同样进入到管理方式。嵌入式系统原理及接口技术(第2版)87

执行SWI指令引起软件中断陷阱被产生,这将改变处理器方式,PC被强制成固定值0x08,CPSR被存到SPSR_svc。进入软件中断陷阱时,首先将PC值保存到R14_svc中,保存的PC值被调整到跟随在SWI指令后的那一个字的地址。从管理方式返回时,使用MOVSPC,R14_svc指令,返回到调用程序断点处并恢复CPSR。

⒊指令汇编格式

⒋使用举例嵌入式系统原理及接口技术(第2版)88

①只使用中断立即数传送信息SWI0;中断立即数为0SWI0x123456;中断立即数为0x123456②使用中断立即数传送中断请求类型,参数通过寄存器传送MOVR0,#34;子功能号为34SWI12;中断类型号为12③指令中24位中断立即数被忽略,由寄存器传送参数MOVR0,#12;中断类型号

MOVR1,#34;子功能号

SWI0;中断立即数将被忽略嵌入式系统原理及接口技术(第2版)89【例3.15】用SWI指令的bit[23:0]给管理方式的代码传送信息。假定由SWI指令bit[23:8]表示中断类型号,进入管理方式后,由这个类型号转换成相应的地址偏移量,据此查找对应的中断例程入口地址。同时假定bit[7:0]作为传送给管理方式的数据。(见教材)嵌入式系统原理及接口技术(第2版)90

3.2.12协处理器介绍ARM体系结构允许使用协处理器来扩展指令集。常用的协处理器有控制片内功能的系统协处理器、用于浮点运算的ARM协处理器等。允许各生产厂商根据需要开发自己的专用协处理器,与ARM处理器配合工作。ARM协处理器有自己专用的寄存器组。

ARM全部协处理器指令只能与数据处理和数据传送有关。数据处理与传送指令有不同的指令格式嵌入式系统原理及接口技术(第2版)91ARM920T处理器最多支持16个协处理器。在程序执行过程中,ARM执行的协处理器指令,要指定某一个协处理器进行某种操作,其他协处理器将忽略这条指令。当一个协处理器硬件不能执行属于它的协处理器指令时,ARM920T产生一个未定义指令异常中断。

因此对于随后介绍的全部协处理器指令,在S3C2410A中将引起未定义指令陷阱被产生。这些协处理器指令,能够由未定义指令陷阱程序来仿真。嵌入式系统原理及接口技术(第2版)923.2.13协处理器数据操作指令(CDP)协处理器数据操作指令CDP用于通知协处理器执行某些协处理器的内部操作。协处理器执行结果无需返回ARM920T,AR

温馨提示

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

评论

0/150

提交评论