文库网
ImageVerifierCode 换一换
首页 文库网 > 资源分类 > PPT文档下载
分享到微信 分享到微博 分享到QQ空间

嵌入式原理及接口技术课件ch3-第2版-嵌入式系统原理及接口技术.ppt

  • 资源ID:20014198       资源大小:1.41MB        全文页数:104页
  • 资源格式: PPT        下载积分:10文币
微信登录下载
快捷下载 游客一键下载
账号登录下载
三方登录下载: QQ登录 微博登录
二维码
扫码关注公众号登录
下载资源需要10文币
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。
如填写123,账号就是123,密码也是123。
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 
账号:
密码:
验证码:   换一换
  忘记密码?
    
友情提示
2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

嵌入式原理及接口技术课件ch3-第2版-嵌入式系统原理及接口技术.ppt

1、本章重点本章重点:ARM指令集概述,ARM指令集全部指令编码及条件域;ARM指令,讲述了ARM指令的编码格式、指令含义、汇编格式和使用举例。另外,本章指令编码格式、指令汇编格式请直接看教材。嵌入式系统原理及接口技术(第2版)1nS3C2410A嵌入式微处理器片内使用了ARM920T内核,因此S3C2410A使用ARM920T所支持的指令系统。ARM920T指令系统的指令集结构版本为v4T,ARM920T指令系统含有v4T以上指令集结构版本的基础指令,在v4T以上指令集结构版本的微处理器中都可以运行。nARM920T处理器支持32位寻址空间。嵌入式系统原理及接口技术(第2版)2nARM920T支

2、持指令长度为32位的ARM指令集和指令长度为16位的Thumb指令集。从功能上讲,Thumb指令集是ARM指令集主要部分的一个子集。ARM920T处理器总是从ARM状态开始,必须用BX指令明确地转换到Thumb状态。嵌入式系统原理及接口技术(第2版)33.1 ARM指令集概述 3.1.1 ARM指令集概述 ARM指令分组 分支指令 数据处理指令 状态寄存器访问指令 单个寄存器装入或存储指令 块数据装入或存储指令 协处理器指令 嵌入式系统原理及接口技术(第2版)4 ARM指令的能力 条件执行 寄存器访问 对在线式桶形移位器(barrel shifter)的访问嵌入式系统原理及接口技术(第2版)5

3、 3.1.2 ARM指令集全部指令编码及条件域 1.ARM指令集全部指令编码格式见图3.1。指令编码中的条件域 参见图3.1,指令编码格式中的bit31:28称为条件域。嵌入式系统原理及接口技术(第2版)6 嵌入式系统原理及接口技术(第2版)7n在ARM状态,所有指令都要根据CPSR中的条件码标志和指令中条件域指定的内容,有条件地执行。指令中条件域bit31:28确定在哪一种情况下这条指令被执行。如果C、N、Z和V标志的状态满足指令中条件域编码要求,指令被执行;否则指令被忽略。嵌入式系统原理及接口技术(第2版)8n有15种可能的条件,每一种由2个字符代替,称为条件码助记符后缀(简称条件码助记符

4、),可以附加在指令助记符后,如表3.1所示。n例如在汇编语言中,分支指令B如果附加条件码助记符后缀为EQ,写作BEQ,表示相等(即Z=1)这条指令才执行;如果Z1,则这条指令不被执行,指令被忽略。嵌入式系统原理及接口技术(第2版)93.2 ARM指令本节讲述的内容和先后次序如下:n分支并且转换状态指令(BX);n分支、分支并且连接指令(B、BL);n数据处理指令;n程序状态寄存器传送指令(MRS、MSR);n乘、乘累加指令(MUL、MLA);n长乘、长乘累加指令(MULL、MLAL);嵌入式系统原理及接口技术(第2版)10n单个数据传送指令(LDR、STR);n半字、带符号字节半字传送指令(L

5、DRH、STRH、LDRSB、LDRSH);n块数据传送指令(LDM、STM);n单个数据交换指令(SWP);n软件中断指令(SWI);n协处理器介绍;嵌入式系统原理及接口技术(第2版)11n协处理器数据操作指令(CDP);n协处理器数据传送指令(LDC、STC);n协处理器寄存器传送指令(MRC、MCR);n未定义指令。指令编码格式中的bit31:28为条件域。所有指令都要根据CPSR中的条件码标志和指令中的条件域指定的内容,有条件地执行。为简单起见,以下对各指令介绍时不再重复这部分内容。嵌入式系统原理及接口技术(第2版)12 3.2.1 分支并且转换状态指令(BX)n 分支并且转换状态指令

6、BX,在指令中指定了一个Rn寄存器,将Rn内容拷贝到PC,同时使PC0=0;把Rn0的值送CPSR的T位。如果Rn0=1,则T=1,将处理器状态转换成Thumb状态,把目标地址处的代码解释为Thumb代码;如果Rn0=0,则T=0,将处理器状态转换成ARM状态,把目标地址处的代码解释为ARM代码。嵌入式系统原理及接口技术(第2版)13 指令含义 通过拷贝一个通用寄存器Rn的内容到程序计数器PC,指令实现分支功能。这条指令也允许指令集被转换,当这条指令被执行时,Rn的bit0位确定后续指令代码被译码作为ARM指令或Thumb指令。嵌入式系统原理及接口技术(第2版)14 指令汇编格式 使用举例 【

7、例3.1】处理器从执行ARM指令代码处分支到标号为Goto_THUMB处,并且执行Thumb 指令代码,然后又返回到Back_ARM处,执行ARM指令代码。嵌入式系统原理及接口技术(第2版)15;假定假定处处理器当前正在理器当前正在执执行行ARM指令指令 ADR R1,Goto_THUMB+1;将分支目将分支目标标地址送地址送R1,使,使R1的的bit0=1 BX R1;分支并且分支并且转换为转换为Thumb状状态态 CODE16;汇编汇编以下代以下代码为码为Thumb指令指令Goto_THUMB;分支目分支目标标地址地址标标号号 ;Thumb指令代指令代码码 ADR R2,Back_ARM;

8、将分支目将分支目标标地址送地址送R2,并且,并且R2的的bit0=0 BX R2;分支且分支且转换为转换为ARM状状态态 ALIGN;字字对齐对齐 CODE32;汇编汇编以下代以下代码为码为ARM指令指令Back_ARM;分支目分支目标标地址地址标标号号 ;ARM指令代指令代码码嵌入式系统原理及接口技术(第2版)16 3.2.2 分支、分支并且连接指令(B、BL)n分支指令B使程序分支(转移)到确定的地址处执行程序。n分支并且连接指令BL除了使程序分支(转移)到确定的地址处执行程序外,还要保存返回地址到LR寄存器,即把BL指令的下一条指令的地址送LR。使用BL指令可以实现子程序调用。n上述两条

9、指令分支目标地址处的指令均应该属于ARM指令集,不允许分支到Thumb指令处。嵌入式系统原理及接口技术(第2版)17 指令含义 对于分支指令B,bit23:0是24位带符号的偏移量,将其左移2位,符号位扩展到bit31:26形成一个32位数,与PC相加实现分支。因此指令能在32MB地址范围内实现分支。分支偏移量必须考虑流水线指令预取操作,PC值是当前正在执行指令的地址加8的值。嵌入式系统原理及接口技术(第2版)18n对于分支并且连接指令BL,执行指令会将PC值写入当前寄存器组的连接寄存器R14,写入的PC值是经过调整的、跟在分支并且连接指令后的指令的地址,同时R14的bit1:0被清0。n 使

10、用分支并且连接指令BL可以调用一个子程序,为了从子程序返回,如果R14(LR)在子程序中没有被修改,可以使用MOV PC,R14指令实现返回。嵌入式系统原理及接口技术(第2版)19 指令汇编格式 使用举例【例3.2】使用分支指令使部分代码循环5次。MOV R0,#5;R0值为值为5Loop1 SUBS R0,#1;R0减减1送送R0,设设置置标标志位志位 BNE Loop1;使用了条件使用了条件码码,不,不为为0则则分支到分支到标标号号;Loop1处处嵌入式系统原理及接口技术(第2版)20【例3.3】使用分支并且连接指令调用不同的子程序。CMP R0,#0;比比较较,设设置置标标志位志位 BL

11、EQ SUBEQROG;相等,相等,则调则调用用SUBEQ BLGT SUBGTROG;大于,大于,则调则调用用SUBGT BL SUBLTROG;小于,小于,则调则调用用SUBLT嵌入式系统原理及接口技术(第2版)21 3.2.3 数据处理指令n ARM数据处理指令可以分为三类:数据传送指令(如MOV和MVN)、算术逻辑操作指令(如ADD、SUB或AND等)和比较指令(如CMP和TST等)。n 数据处理指令只能对寄存器的内容进行操作,不允许对存储器中的数据进行操作,也不允许指令直接使用存储器的数据或在寄存器与存储器之间传送数据。嵌入式系统原理及接口技术(第2版)22n对于数据传送指令MOV和

12、MVN,指令中指定的目的寄存器内容被覆盖,如果目的寄存器指定了PC,如MOV PC,R14,则可以实现程序的转移。n数据传送指令可以实现寄存器到寄存器,立即数到寄存器的传送。嵌入式系统原理及接口技术(第2版)23n 算术逻辑操作指令通常对指定的两个寄存器(或1个寄存器、1个立即数)进行操作,结果存到第3个寄存器,允许选择修改或不修改CPSR中的条件码标志。n比较指令TEQ、TST、CMP和CMN,通常对指定的两个寄存器(或1个寄存器,1个立即数)进行比较,比较结果不保存到寄存器,只影响CPSR中的条件码标志。n上述指令通常允许对指定的操作数进行移位操作。嵌入式系统原理及接口技术(第2版)24

13、指令编码格式n指令编码格式见教材图3.2。n图3.2中,第1操作数总是寄存器Rn。Rd称为目的寄存器,TST、TEQ、CMP和CMN指令不送结果到目的寄存器Rd,其他指令产生的结果送Rd。n第2操作数Operand2可以是寄存器Rm的值经过移位产生的32位值,或8位立即数经过循环右移产生的32位的值,指令中bit25的值用来选择Rm或8位立即数。嵌入式系统原理及接口技术(第2版)25n CPSR中的条件码可能被保护或由指令的结果设置,取决于指令中bit20的值。但是对于指令TST、TEQ、CMP和CMN,汇编器产生的指令编码一定会把指令的bit20置1,在执行指令时,由测试结果设置CPSR中的

14、条件码标志。嵌入式系统原理及接口技术(第2版)26 指令含义 各指令含义n 数据处理指令依指令编码格式中bit24:21分为16条指令,包括:数据传送、算术逻辑操作和比较指令。各条指令含义见表3.2。嵌入式系统原理及接口技术(第2版)27 指令对CPSR中条件码标志位的影响n在逻辑操作(AND、EOR、TST、TEQ、ORR、BIC)和数据传送操作(MOV、MVN)指令中,如果S位被置1(并且Rd不是R15),则CPSR中的V标志位不受影响;C标志位由桶形移位器产生的carry out设置;当指令操作结果为全0时Z标志位被设置;N标志位由指令操作结果的bit31的值设置。嵌入式系统原理及接口技

15、术(第2版)28n算术操作(SUB、RSB、ADD、ADC、SBC、RSC、CMP、CMN)指令中,每个操作数被看作32位整数(无符号数或带符号数的2的补码),如果指令中S位被置1(并且Rd不是R15),在发生溢出时,CPSR中的V标志位被设置;C标志位由ALU的bit31产生的进位设置;如果指令操作结果为全0时,Z标志位被设置;N标志位将被设置成指令操作结果的bit31的值。嵌入式系统原理及接口技术(第2版)29 对寄存器Rm内容进行移位,结果作为Operand2的值图3.3嵌入式系统原理及接口技术(第2版)30 使用指令中bit11:7指定的移位量对Rm移位 逻辑左移(LSL)图3.4 逻

16、辑左移(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版)35n在使用指令中bit11:7指定对Rm的移位量,bit6:5指定移位类型时,指令汇编格式举例见表3.3。嵌入式系统原理及接口技术(第2版)36表3.3 指令bit11:7和bit6:5指定Rm移位量和

17、移位类型举例 指定对Rm的移位量和移位类型指 令 举 例指 令 含 义Rm,LSL#5bit_shift_ImmADD R0,R2,R3,LSL#1 R3的值逻辑左移1位,加R2,和送R0Rm,LSR#5bit_shift_ImmSUB R0,R2,R3,LSR#2R3的值逻辑右移2位,从R2中减去,差送R0Rm,ASR#5bit_shift_ImmMOV R1,R0,ASR#2R0的值算术右移2位,送R1Rm,ROR#5bit_shift_ImmSUB R1,R2,R4,ROR#6R4的值循环右移6位,从R2中减去,差送R1Rm,RRXAND R2,R3,R4,RRXR4的值扩展循环右移,和

18、R3与的结果送R2嵌入式系统原理及接口技术(第2版)37 使用指令中bit11:8指定Rs寄存器,且用Rs中最低字节指定移位量n参见图3.2和图3.3,由指令中bit11:8指定Rs寄存器,移位量保存在Rs寄存器的最低字节,对Rm寄存器的内容进行移位,产生的结果作为Operand2的值。n如果Rs中指定的移位次数为0,那么不改变Rm的内容作为Operand2,并且CPSR中C位的值作为carry out,即C位的值不变。n如果Rs中最低字节指定的移位次数在131之间,进行的移位操作与产生的结果参阅图3.4、3.5、3.6、3.7。嵌入式系统原理及接口技术(第2版)38n如果Rs中最低字节指定的

19、移位次数大于、等于32,产生的结果如下:对LSL,如果移位次数等于32,移位结果Operand2为全0,Rm0作为carry out。对LSL,如果移位次数大于32,移位结果Operand2为全0,carry out为0。对LSR,如果移位次数等于32,移位结果Operand2为全0,Rm31作为carry out。对LSR,如果移位次数大于32,移位结果Operand2为全0,carry out为0。对ASR,如果移位次数大于、等于32,用Rm31填充Operand2各位,用Rm31作为carry out。嵌入式系统原理及接口技术(第2版)39 对ROR,如果移位次数等于32,移位结果Ope

20、rand2等于Rm的值,carry out等于Rm31。对于ROR,如果移位次数大于32,用移位次数重复减32,直到它们的差在132之间,用这个值作为移位次数,移位结果如前述。n对于上述各种情况,carry out的值,均送往CPSR中的进位标志C。n使用Rs指定移位量时,指令中bit6:5指定移位类型,指令汇编格式举例见表3.4。嵌入式系统原理及接口技术(第2版)40表3.4 用Rs指定Rm的移位量和指令中bit6:5指定移位类型举例指定Rm的移位量和移位类型指 令 举 例指 令 含 义Rm,LSL RsADD R0,R1,R2,LSL R3 移位量在R3中,R2逻辑左移,加R1,和送R0R

21、m,LSR RsSUB R0,R1,R2,LSR R4移位量在R4中,R2逻辑右移,从R1中减去,差送R0Rm,ASR RsAND R1,R2,R3,ASR R0移位量在R0中,R3算术右移,和R2逻辑与,结果送R1Rm,ROR RsMOV R2,R4,ROR R0移位量在R0中,R4循环右移,送R2嵌入式系统原理及接口技术(第2版)41 对指令中bit7:0指定的8位无符号立即数循环右移n参见图3.2,对指令中bit7:0指定的8位无符号立即数进行循环右移时,用bit11:8指定移位量,它是一个4位无符号整数。n进行移位操作时,要把指令中bit7:0指定的8位无符号立即数作为最低字节,高位b

22、it31:8用0扩展,形成一个32位数,对这个32位数进行循环右移。移位的次数,由指令中bit11:8指定的4位无符号数乘以2得到,分别为0,2,4,30。此外,移位过程可参见图3.7。关于R15和CPSR中的条件码标志嵌入式系统原理及接口技术(第2版)42 指令汇编格式 使用举例 数据传送和数据求反传送指令举例嵌入式系统原理及接口技术(第2版)43 MOVS R4,R3,LSL#2;R4等于等于R3逻辑逻辑左移左移2位的位的值值,设设置置标标志位志位 MOVS PC,R14;PC=R14,且,且CPSR=SPSR_,用于从,用于从;异常返回;异常返回 MOV R15,LR;PC=R14,用于

23、从子程序返回,用于从子程序返回 MVN R0,R1;R1的的值值求反送求反送R0 MVN R2,#0 xf0;R2=0 xffffff0f MVN R0,#0;R0=0 xffffffff,即,即R0=-1嵌入式系统原理及接口技术(第2版)44 以下举例见教材 算术操作指令举例 逻辑操作指令举例 比较与测试指令举例 使用移位操作的指令举例 程序举例 嵌入式系统原理及接口技术(第2版)45 以下举例见教材 【例3.4】如果R0=1或者R1=2,则程序分支到标号为Label0处;否则,执行标号为Label1处的代码。【例3.5】求R0的绝对值,再求R1的绝对值,将这两个绝对值相加,和存R2。求绝对

24、值的方法是:当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)n只有程序状态寄存器传送指令MRS、MSR,才允许读写程序状态寄存器CPSR或SPSR_。MRS指令读出程序状态寄存器的值送通用寄存器,MSR将通用寄存器的值写入程序状

25、态寄存器。也可以使用通用寄存器的最高4位或立即数的最高4位修改程序状态寄存器的条件码标志。n程序中不允许通过MSR指令直接修改CPSR中的T控制位来实现ARMThumb状态的转换,只能通过BX指令去实现ARMThumb状态的转换。嵌入式系统原理及接口技术(第2版)48 指令编码格式 指令编码格式见教材图3.9、3.10和3.11。指令含义nMRS指令允许将CPSR或SPSR_的内容传送到一个通用寄存器。nMSR指令允许将一个通用寄存器的内容传送到CPSR或SPSR_寄存器。nMSR指令也允许将一个立即数或寄存器的内容只传送到CPSR或SPSR_寄存器的条件码标志(N、Z、C和V),而不影响其他

26、控制位。在这种情况下,指定寄存器的最高4位或立即数的最高4位的内容被写入CPSR或SPSR_的最高4位(条件码标志)。嵌入式系统原理及接口技术(第2版)49 指令汇编格式 使用举例 在User(用户)方式和特权方式,某些相同格式的指令,产生的作用是不相同的。嵌入式系统原理及接口技术(第2版)50 ;在用在用户户方式方式 MSR CPSR,R0;R031:28送送CPSR31:28 MSR CPSR_flg,R0;R031:28送送CPSR31:28 MSR CPSR_flg,#0 xf0000000;0 xf送送CPSR31:28 MRS R0,CPSR;CPSR31:0送送R031:0 ;在

27、特在特权权方式方式 MSR CPSR,R0;R031:0送送CPSR31:0 MSR CPSR_flg,R0;R031:28送送CPSR31:28 MSR CPSR_flg,#0 xf0000000;0 xf送送CPSR31:28 MSR SPSR,R0;R031:0送送SPSR_31:0 MSR SPSR_flg,R0;R031:28送送SPSR_31:28 MSR SPSR_flg,#0 x30000000;0 x3送送SPSR_flg31:28 MRS R1,SPSR;SPSR_31:0送送R131:0嵌入式系统原理及接口技术(第2版)51 【例3.9】允许FIQ中断,禁止FIQ中断。(

28、见教材)嵌入式系统原理及接口技术(第2版)52 3.2.5 乘、乘累加指令(MUL、MLA)n乘指令MUL实现32位数乘32位数,只保留积的低32位,操作数和结果均在指定的寄存器中。n乘累加指令MLA实现32位数乘32位数,积的低32位与另外一个32位数累加,结果保留32位。操作数和结果均在指定的寄存器中。嵌入式系统原理及接口技术(第2版)53 指令含义n乘指令的结果存Rd中,即Rd=Rm*Rs,为了与以后的指令集兼容,Rn应设置为0。n乘累加的结果存Rd中,即Rd=Rm*Rs+Rn。指令汇编格式 使用举例(见教材)嵌入式系统原理及接口技术(第2版)54 3.2.6 长乘、长乘累加指令(MUL

29、L、MLAL)n长乘指令实现32位数乘32位数,积保留64位,操作数和结果均在指定的寄存器中。n长乘累加指令实现32位数乘32位数,积保留64位,与另一个64位数相加,结果保留64位。操作数和结果均在指定的寄存器中。nUMULL为无符号数长乘、SMULL为带符号数长乘、UMLAL为无符号数长乘累加、SMLAL为带符号数长乘累加指令。嵌入式系统原理及接口技术(第2版)55 指令含义n长乘指令64位结果中,高32位存RdHi、低32位存RdLo寄存器中,即RdHi、RdLo=Rm*Rs。n长乘累加指令64位结果存RdHi和RdLo中,即RdHi、RdLo=Rm*Rs+RdHi、RdLo。n指令中R

30、dHi和RdLo事先要保存进行加法的一个64位操作数,分别保存高、低32位。nR15不能使用。nRdHi、RdLo和Rm必须指定不同的寄存器。嵌入式系统原理及接口技术(第2版)56 指令汇编格式 使用举例 【例3.10】检测长乘指令结果是否超过32位。方法1:对无符号数32位乘32位运算,指令产生的结果是64位无符号数,如果结果的高32位为全0,那么结果的有效值仅使用低32位即可;如果结果的高32位不为全0,那么结果的有效值应该使用64位。嵌入式系统原理及接口技术(第2版)57 UMULL R1,R2,R3,R4;R2、R1=R3*R4 TEQ R2,#0 ;测试结测试结果高果高32位是否位是

31、否为为全全0 BNE Result64;不是全不是全0,分支到,分支到结结果使用果使用64位有效位有效值处值处 ;结结果有效果有效值值使用使用32位位 Result64 嵌入式系统原理及接口技术(第2版)58 方法2:对带符号数32位乘32位运算,指令产生的结果是64位带符号数,存于RdHi和RdLo中。如果RdHi为全0,并且RdLo31=0,那么结果的有效值仅使用RdLo中的低32位即可;如果RdHi为全1,并且RdLo31=1,那么结果的有效值仅使用RdLo中的低32位即可。如果不是这两种情况,那么结果的有效值应该使用64位。(程序见教材)【例3.11】检测长乘累加指令结果是否超过64位

32、。(程序见教材)嵌入式系统原理及接口技术(第2版)59 3.2.7 单个数据传送指令(LDR、STR)n 执行一条单个数据传送指令只能在存储器和寄存器之间传送一字节或一个字数据。指令编码格式 指令编码格式见图3.12。指令含义 单个数据传送指令有如下4条:嵌入式系统原理及接口技术(第2版)60nLDR指令从存储器指定地址装入一个字数据到目的寄存器。n LDRB指令从存储器指定地址装入一字节数据到目的寄存器的bit7:0,bit31:8填0。n STR指令保存寄存器一个字数据到存储器指定地址。n STRB指令保存寄存器的低8位数据到存储器指定地址。存储器的地址通过计算得到,需要对基址寄存器加偏移

33、量,或从基址寄存器减偏移量产生。嵌入式系统原理及接口技术(第2版)61 指令中可以指定回写位,当指令中W=1时,通过计算得到的存储器地址,回写到基址寄存器;W=0时,基址寄存器的值保持原值。偏移量和自动索引 传送字节字 使用R15嵌入式系统原理及接口技术(第2版)62 指令汇编格式 能产生地址的表达式 先索引寻址 后索引寻址 关于 关于!使用举例嵌入式系统原理及接口技术(第2版)63 LDR R0,R1,R2;先索引,先索引,R1+R2内容作地址,内容作地址,读读字数据送字数据送R0,不回写,不回写 LDR R0,R1,R2!;先索引,先索引,R1+R2内容作地址,内容作地址,读读字数据送字数

34、据送R0,;R1+R2回写回写R1 LDR R0,R1,-R2;先索引,不回写,地址由先索引,不回写,地址由R1-R2的内容指定的内容指定 LDR R0,R1,R2;后索引,后索引,R1内容作地址,内容作地址,读读字数据送字数据送R0,;R1+R2回写回写R1 STR R0,R1,#8;后索引,后索引,R0数据送以数据送以R1内容作地址的存内容作地址的存储储器器单单元,元,;R1+8回写回写R1 STR R0,R1,#8;先索引,先索引,R0数据写入数据写入R1+8作地址的存作地址的存储储器,不回写器,不回写 LDREQB R1,R6,#5;条件条件执执行,行,R6+5内容作地址,内容作地址,

35、读读一字一字节节数据送数据送;R17:0,R131:8填填0 STRB R0,R1,#4;存存R07:0到到R1+4内容作地址的存内容作地址的存储储器,不回写器,不回写嵌入式系统原理及接口技术(第2版)64 【例3.12】访问变量。以下程序先取得变量地址,然后读入变量,变量减量,保存。(见教材)嵌入式系统原理及接口技术(第2版)65 3.2.8 半字、带符号字节半字传送指令(LDRH、STRH、LDRSB、LDRSH)指令编码格式 指令编码格式分为两种,一种是偏移量在指定的寄存器中,见图3.18;另一种是把指令中的8位立即数作为偏移量,见图3.19。指令含义 半字、带符号字节半字传送指令允许在

36、寄存器与存储器之间装入和存储半字数据、装入带符号扩展的字节或半字数据:嵌入式系统原理及接口技术(第2版)66nLDRH指令从存储器装入半字数据到寄存器低16位,高16位用0扩展;nSTRH指令保存寄存器中的低半字数据到存储器;nLDRSB指令从存储器装入一字节数据到寄存器bit7:0,用符号位bit7扩展寄存器的bit31:8;nLDRSH指令从存储器装入半字数据到寄存器bit15:0,用符号位bit15扩展寄存器的bit31:16。嵌入式系统原理及接口技术(第2版)67 传送使用的存储器地址,由基址寄存器加或减一个偏移量计算形成。计算出的地址可以回写不回写基址寄存器。计算地址可以在数据传送前

37、或传送后进行。嵌入式系统原理及接口技术(第2版)68 偏移量和自动索引 相对基址寄存器的偏移量,有两种指定方法,一种是指令中指定的8位无符号立即数作为偏移量,另一种是指令中指定寄存器Rm,Rm的值作为偏移量。半字装入和存储指令 指令中S=0且H=1时,指令LDRH读存储器半字数据装入寄存器;指令STRH存寄存器半字数据到存储器。当指令中L=1时,表示从存储器装入半字数据到目的寄存器bit15:0,高16位填0。当指令中L=0时,表示把指定寄存器的bit15:0的数据送存储器。嵌入式系统原理及接口技术(第2版)69 带符号字节半字数据装入指令n指令中S=1并且H=0时,LDRSB指令装入1字节带

38、符号数,并且扩展符号位。n指令中S=1并且H=1时,LDRSH指令装入半字带符号数,并且扩展符号位。n当指令中S=1时,指令中的L位不能为0,也就是说带符号字节半字数据,只能从存储器装入寄存器,不能从寄存器传送到存储器。使用R15n如果指定了R15作为基址寄存器Rn,那么不应该指定地址回写。嵌入式系统原理及接口技术(第2版)70 指令汇编格式 能产生地址的表达式 先索引寻址 后索引寻址 Rn和Rm 关于!嵌入式系统原理及接口技术(第2版)71 LDRH R0,R1-R2!;R1-R2内容作地址,装入半字数据到内容作地址,装入半字数据到R0低低16位,位,;高高16位用位用0扩扩展,地址回写展,

39、地址回写R1 STRH R2,R3,#04;R3+04内容作地址,存内容作地址,存R2中低中低16位,不回写位,不回写 LDRSB R7,R1,#230;R1内容作地址,装入内容作地址,装入1字字节节数据到数据到R7低低8位,位,;符号符号扩扩展,展,R1+230回写回写R1 LDRNESH R10,R1;条件条件执执行,行,R1内容作地址,装入半字数据到内容作地址,装入半字数据到;R10低低16位,符号位,符号扩扩展展 STRH R1,R0,#2!;R1中低中低16位存位存R0+2地址中,地址中,R0+2回写回写R0 使用举例嵌入式系统原理及接口技术(第2版)72 3.2.9 块数据传送指令

40、(LDM、STM)块数据传送指令也称为多寄存器装入存储指令,它可以实现多个寄存器与存储器多个单元之间的数据传送。LDM指令从存储器装入数据到寄存器;STM指令保存寄存器内容到存储器。允许使用一条指令传送16个寄存器中的任何一个子集或全部寄存器,但不允许寄存器的个数为0。LDMSTM指令用于堆栈操作或块数据传送,主要用途为保护现场、块数据复制、参数传送或上下文切换。嵌入式系统原理及接口技术(第2版)73 指令编码格式 指令编码格式见图3.15。指令含义 块数据传送指令用于装入(LDM)或存储(STM)当前方式可见寄存器组的一个子集或全部寄存器。指令支持所有可能的堆栈方式,维护满或空类型的堆栈,S

41、TM指令操作支持存储器地址增大或减小两种方式。块数据传送指令,对于保存和恢复上下文或移动存储器中大的数据块,是非常有效的指令。嵌入式系统原理及接口技术(第2版)74 寄存器列表 寻址方式n 传送地址的确定,由基址寄存器Rn的内容、先后索引位P和加减位U共同决定。n 图3.16图3.19中给出了不同寻址方式寄存器传送的次序、地址的使用方法和传送完成后Rn的值。地址对齐n 地址通常应该字边界对齐。嵌入式系统原理及接口技术(第2版)75 S位的使用n在LDMSTM指令中,当S位被设置,它的含义取决于R15是否在传送列表中以及执行的是LDM还是STM指令。如果指令在特权方式被执行,S位才允许被设置。以

42、下三种情况均指在特权方式下指令执行时的含义。传送列表中有R15并且S位被设置的LDM指令(方式改变)传送列表中有R15并且S位被设置的STM指令(用户方式寄存器组传送)传送列表中没有R15并且S位被设置(用户方式寄存器组传送)嵌入式系统原理及接口技术(第2版)76 关于使用R15作为基址寄存器 基址寄存器在寄存器列表中 指令汇编格式n 对于LDMSTM指令,如果使用堆栈指针寄存器R13作为基址寄存器,根据不同形式的堆栈要求,指令中的后缀FD、ED、FA和EA分别表示满递减堆栈、空递减堆栈、满递增堆栈和空递增堆栈。其中F表示满堆栈、E表示空堆栈、A表示递增、D表示递减,具体含义如下:嵌入式系统原

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

44、量寻址方式,详见表3.5。n增量或减量的地址修改偏移量为4。嵌入式系统原理及接口技术(第2版)79表3.5 块数据传送指令不使用R13作为基址寄存器的寻址方式指 令 后 缀寻 址 方 式地 址 计 算 方 法IA后索引增量存储器与寄存器之间传送一个字数据后,地址加4IB先索引增量存储器与寄存器之间传送一个字数据前,地址加4DA后索引减量存储器与寄存器之间传送一个字数据后,地址减4DB先索引减量存储器与寄存器之间传送一个字数据前,地址减4嵌入式系统原理及接口技术(第2版)80 使用举例 LDMFD SP!,R1,R2,R3;将将SP指向的存指向的存储储器器单单元多字数据,装入到元多字数据,装入到

45、;R1、R2和和R3,满递满递减堆减堆栈栈,回写,回写SP STMIA R0,R0-R15;保存全部寄存器内容到保存全部寄存器内容到R0指向的存指向的存储储器器单单元,元,;R0值值不不变变 LDMFD SP!,R15;将将SP指向的存指向的存储储器器单单元字数据,装入到元字数据,装入到R15,;不改不改变变CPSR,回写,回写SP LDMFD SP!,R15;将将SP指向的存指向的存储储器器单单元字数据,装入元字数据,装入R15,同,同时时;将将SPSR_的的值值送送CPSR,回写,回写SP,;只允只允许许在特在特权权方式使用方式使用 STMFD R13,R0-R14;用用户户方式寄存器方式

46、寄存器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)n单个数

47、据交换指令允许寄存器与存储器之间交换字节字数据。nSWP指令为字交换指令,允许读出存储器中指定地址的一个字数据,装入一个寄存器,而将另一个寄存器的内容写入存储器的同一个地址中。n SWPB指令为字节交换指令,允许读出存储器中指定地址的一字节数据,装入一个寄存器的低8位,而将另一个寄存器低8位的内容写入存储器的同一个地址中。nSWP和SWPB指令中,允许两个寄存器有相同的寄存器名,这样指令的功能就变成了一个寄存器与存储器确定单元之间的字字节数据交换。嵌入式系统原理及接口技术(第2版)83 指令含义n数据交换指令执行是由一个存储器读和跟随着的一个存储器写操作共同完成的。它们被绑在一起,直到这两个操

48、作完成前,处理器不能被中断。与此同时存储器管理器被告知,把这两个操作看作是不可分隔的。嵌入式系统原理及接口技术(第2版)84n交换的地址由基址寄存器Rn的内容确定。处理器首先读交换地址确定的存储器的内容,然后写源寄存器Rm的内容到同一内存地址单元,从存储器读出的内容保存到目的寄存器Rd。源寄存器和目的寄存器可以指定为同一个寄存器,这时指定的寄存器的内容写入存储器,而从存储器读出的数据装入同一个寄存器。指令汇编格式嵌入式系统原理及接口技术(第2版)85 使用举例 SWP R1,R2,R3;地址在地址在R3中,中,读读存存储储器内容装入器内容装入R1,存,存R2的内容的内容;到到R3确定的存确定的

49、存储储器地址中,字交器地址中,字交换换 SWPB R3,R4,R5;地址在地址在R5中,装入一字中,装入一字节节到到R3,存,存R47:0;到到R5确定的存确定的存储储器地址中器地址中 SWPEQ R1,R1,R2;条件条件执执行。条件成立行。条件成立时时,将,将R1的内容与的内容与R2作作为为;地址的存地址的存储储器器单单元的内容作字交元的内容作字交换换嵌入式系统原理及接口技术(第2版)86 3.2.11 软件中断指令(SWI)n软件中断指令也称软中断指令,执行SWI指令引起中断产生。指令编码格式n指令编码格式见图3.20。指令含义n软件中断指令作为一种控制方法,用来实现从用户方式进入(转换

50、)到管理方式。在其他方式也可以使用SWI指令,处理器同样进入到管理方式。嵌入式系统原理及接口技术(第2版)87 n执行SWI指令引起软件中断陷阱被产生,这将改变处理器方式,PC被强制成固定值0 x08,CPSR被存到SPSR_svc。n进入软件中断陷阱时,首先将PC值保存到R14_svc中,保存的PC值被调整到跟随在SWI指令后的那一个字的地址。从管理方式返回时,使用MOVS PC,R14_svc指令,返回到调用程序断点处并恢复CPSR。指令汇编格式 使用举例嵌入式系统原理及接口技术(第2版)88 只使用中断立即数传送信息 SWI 0 ;中断立即数为0 SWI 0 x123456 ;中断立即数


注意事项

本文(嵌入式原理及接口技术课件ch3-第2版-嵌入式系统原理及接口技术.ppt)为本站会员(bubibi)主动上传,文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知文库网(点击联系客服),我们立即给予删除!




关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

文库网用户QQ群:731843829  微博官方号:文库网官方   知乎号:文库网

Copyright© 2025 文库网 wenkunet.com 网站版权所有世界地图

经营许可证编号:粤ICP备2021046453号   营业执照商标

1.png 2.png 3.png 4.png 5.png 6.png 7.png 8.png 9.png 10.png