ARM体系结构与结构---第三章备份

上传人:飞*** 文档编号:7517295 上传时间:2017-08-10 格式:PPT 页数:168 大小:1.49MB
返回 下载 相关 举报
ARM体系结构与结构---第三章备份_第1页
第1页 / 共168页
ARM体系结构与结构---第三章备份_第2页
第2页 / 共168页
ARM体系结构与结构---第三章备份_第3页
第3页 / 共168页
ARM体系结构与结构---第三章备份_第4页
第4页 / 共168页
ARM体系结构与结构---第三章备份_第5页
第5页 / 共168页
点击查看更多>>
资源描述

《ARM体系结构与结构---第三章备份》由会员分享,可在线阅读,更多相关《ARM体系结构与结构---第三章备份(168页珍藏版)》请在金锄头文库上搜索。

1、第3章 ARM指令系统,第3章 目录,指令集介绍ARM指令集Thumb指令集,简单的ARM程序,;文件名:TEST1.S ;功能:实现两个寄存器相加 ;说明:使用软件仿真调试 AREAExample1,CODE,READONLY ;声明代码段Example1 ENTRY ;标识程序入口 CODE32 ;声明32位ARM指令START MOVR0,#0 ;设置参数 MOVR1,#10LOOPBLADD_SUB ;调用子程序ADD_SUB BLOOP ;跳转到LOOPADD_SUB ADDSR0,R0,R1 ;R0 = R0 + R1 MOVPC,LR ;子程序返回 END ;文件结束,使用“;”

2、进行注释,标号顶格写,实际代码段,声明文件结束,简单的ARM程序,;文件名:TEST1.S ;功能:实现两个寄存器相加 ;说明:使用软件仿真调试 AREAExample1,CODE,READONLY ;声明代码段Example1 ENTRY ;标识程序入口 CODE32 ;声明32位ARM指令START MOVR0,#0 ;设置参数 MOVR1,#10LOOPBLADD_SUB ;调用子程序ADD_SUB BLOOP ;跳转到LOOPADD_SUB ADDSR0,R0,R1 ;R0 = R0 + R1 MOVPC,LR ;子程序返回 END ;文件结束,ARM指令小节目录,1.指令格式2.条件

3、码3.存储器访问指令4.数据处理指令5.乘法指令6.ARM分支指令7.协处理器指令8.杂项指令9.伪指令,ARM指令小节目录,1.指令格式2.条件码3.存储器访问指令4.数据处理指令5.乘法指令6.ARM分支指令7.协处理器指令8.杂项指令9.伪指令,ARM指令的基本格式如下:,3.2 指令集介绍,ARM指令集指令格式, S ,其中号内的项是必须的,号内的项是可选的。各项的说明如下:,opcode:指令助记符;cond:执行条件;S:是否影响CPSR寄存器的值;Rd:目标寄存器; Rn:第1个操作数的寄存器;operand2:第2个操作数;,3.2 指令集介绍,ARM指令集存储器访问指令,AR

4、M处理器是典型的RISC处理器,对存储器(RAM/ROM)的访问只能使用加载和存储指令实现。 存储器访问指令分为单寄存器操作指令和多寄存器操作指令。,3.2 指令集介绍,ARM指令集存储器访问指令,包括:单寄存器操作指令:LDR/STR SWP多寄存器操作指令:LDM/STM,LDR/STR指令用于对内存变量的访问、内存缓冲区数据的访问、查表、外围部件的控制操作等。若使用LDR指令加载数据到PC寄存器,则实现程序跳转功能。,3.2 指令集介绍,ARM存储器访问指令单寄存器操作指令,LDR指令的格式为:LDR条件 目的寄存器,STR指令的格式为:STR条件 源寄存器,LDR指令用于从存储器中将一

5、个32位的字数据传送到目的寄存器中。当程序计数器PC作为目的寄存器时,指令从存储器中读取的字数据被当作目的地址,从而可以实现程序流程的跳转。该指令在程序设计中比较常用,且寻址方式灵活多样。,ARM存储器访问指令单寄存器操作指令,用于将存储器中的一个字或半字或字节数据传送到寄存器。常用的加载指令如下:LDR字数据加载指令LDRB字节数据加载指令LDRH半字数据加载指令LDRSB有符号字节数据加载指令LDRSH有符号半字数据加载指令Byte HalfSign,3.2 指令集介绍,ARM存储器访问指令单寄存器加载,用于将寄存器中的一个字或半字或字节数据传送到存储器。常用的存储指令如下:STR字数据存

6、储指令STRB字节数据存储指令STRH半字数据存储指令STR R1, R2,R5!;R1 R2+R5 R2R2+R5STRB R5 , SP,R3;R5的最低字节 SP+R3STRH R5 , SP,R3;R5的最低半字 SP+R3,3.2 指令集介绍,ARM存储器访问指令单寄存器存储,ARM存储器访问指令单寄存器操作指令,LDR/STR指令寻址非常灵活,它由两部分组成,其中一部分为一个基址寄存器,可以为任一个通用寄存器;另一部分为一个地址偏移量。地址偏移量有以下3种格式: 立即数。如:LDR R1,R0,#0x12 寄存器。如:LDR R1,R0,R2 寄存器及移位常数。如:LDR R1,R

7、0,R2,LSL #2,ARM存储器访问指令单寄存器操作指令,从寻址方式的地址计算方法分,加载/存储指令有以下4种格式: 零偏移如:LDR Rd,Rn 前索引偏移如:LDR Rd,Rn,#0x04!后索引偏移如:LDR Rd,Rn,#0x04程序相对偏移如:LDR Rd,labe1 注意:大多数情况下,必须保证字数据操作的地址是32位对齐的。,LDR和STR指令应用示例: 1.加载字指令LDRLDRR0,R1;将存储器地址为R1的字数据读入寄存器R0LDR R0,R1,R2;将存储器地址为R1+R2的字数据读入寄存器R0LDR R0,R1,8;将存储器地址为R1+8的字数据读入寄存器R0LDR

8、 R0,R1,R2!;将存储器地址为R1+R2的字数据读入寄存器R0, 并将新地址R1R2写入R1LDR R0,R1,8!;将存储器地址为R1+8的字数据读入寄存器R0, 并将新地址R18写入R1LDR R0,R1,R2,LSL2!;将存储器地址为R1R24的字数据读 入寄存器R0,并将新地址R1R24写入R1LDR R0,R1,R2;将存储器地址为R1的字数据读入寄存器R0, 并将新地址R1R2写入R1LDR R0,R1,R2,LSL2 ;将存储器地址为R1的字数据读入寄存器R0,并将新地址R1R24写入R1,ARM存储器访问指令单寄存器操作指令,LDRB指令的格式为:LDR条件B 目的寄存

9、器,LDRB用于从存储器中将一个8位的字节数据传送到目的寄存器中,同时将寄存器的高24位清零。该指令通常用于从存储器中读取8位的字节数据到通用寄存器,然后对数据进行处理。LDRSB指令的格式为:LDR条件SB 目的寄存器,LDRSB指令用于从存储器中将一个8位的有符号字节数据传送到目的寄存器中,同时用符号位扩展到32位。该指令通常用于从存储器中读取8位的有符号字节数据到通用寄存器,然后对数据进行处理。,ARM存储器访问指令单寄存器操作指令,LDRH指令的格式为:LDR条件H 目的寄存器,LDRH用于从存储器中将一个16位的半字数据传送到目的寄存器中,同时将寄存器的高16位清零。该指令通常用于从

10、存储器中读取16位的半字数据到通用寄存器,然后对数据进行处理。LDRSH指令的格式为:LDR条件SH 目的寄存器,LDRSH指令用于从存储器中将一个16位的有符号半字数据传送到目的寄存器中,同时用符号位扩展到32位。该指令通常用于从存储器中读取16位的有符号半字数据到通用寄存器,然后对数据进行处理。注意:半字读写的指定地址必须为偶数,否则将产生不可靠的结果,ARM存储器访问指令单寄存器操作指令,STRB指令的格式为:STR条件B 源寄存器,STRB指令用于从源寄存器中将一个8位的字节数据传送到存储器中。该字节数据为源寄存器中的低8位。STRB指令应用示例: STRB R0,R1;将寄存器R0中

11、的低字节数据写入以R1为;地址的存储器中 STRB R0,R1,8; 将寄存器R0中的低字节数据写入;以R18为地址的存储器中,ARM存储器访问指令单寄存器操作指令,STRH指令的格式为:STR条件H 源寄存器,STRH指令用于从源寄存器中将一个16位的半字数据传送到存储器中。该半字数据为源寄存器中的低16位。STRH指令应用示例: STRH R0,R1;将寄存器R0中的半字数据写入以 R1为地址的存储器中 STRH R0,R1,8;将寄存器R0中的半字数据写入以 R18为地址的存储器中,ARM存储器访问指令单寄存器操作指令,ARM存储器访问指令多寄存器存取,多寄存器加载/存储指令可以实现在一

12、组寄存器和一块连续的内存单元之间传输数据。LDM为加载多个寄存器;STM为存储多个寄存器。允许一条指令传送16个寄存器的任何子集或所有寄存器。它们主要用于现场保护、数据复制、常数传递等。常用的加载存储指令如下:LDM批量数据加载指令STM批量数据存储指令,ARM存储器访问指令多寄存器存取,多寄存器加载/存储指令格式如下: LDMcond Rn!,reglist STMcond Rn!,reglistcond:指令执行的条件;模式:控制地址的增长方式,一共有8种模式;(4种堆栈,4种数据块)!:表示在操作结束后,将最后的地址写回Rn中;reglist :表示寄存器列表,可以包含多个寄存器,它们使

13、用“,”隔开,如R1,R2,R6-R9,寄存器由小到大排列;:加入该后缀后,进行数据传送且寄存器列表不包含PC时,加载/存储的寄存器是用户模式下的寄存器,而不是当前模式的寄存器。若在LDM指令且寄存器列表中包含有PC时使用,那么除了正常的多寄存器传送外,还将SPSR也拷贝到CPSR中,这可用于异常处理返回。注意:该后缀不允许在用户模式或系统模式下使用。,r10+4,r10,r10+8,r10+c,r10+4,r10+8,r10+c,ARM存储器访问指令多寄存器存取,;使用数据块传送指令进行堆栈操作STMDAR0!,R5-R6. . .LDMIBR0!,R5-R6,;使用堆栈指令进行堆栈操作ST

14、MEDR0!,R5-R6. . .LDMEDR0!,R5-R6,两段代码的执行结果是一样的,但是使用堆栈指令的压栈和出栈操作编程很简单(只要前后一致即可),而使用数据块指令进行压栈和出栈操作则需要考虑空与满、加与减对应的问题。,ARM存储器访问指令寄存器和存储器交换指令,指令格式如下:SWPcondB Rd,Rm,RnSWP指令用于将一个内存单元(该单元地址放在寄存器Rn中)的内容读取到一个寄存器Rd中,同时将另一个寄存器Rm的内容写入到该内存单元中。SWP指令把读取和存入组合在一条指令中,且2种传送不能被分开。其中:B为可选后缀,若有B,则交换字节,否则交换32位字;Rd用于保存从存储器中读入的数据;Rm的数据用于存储到存储器中,若Rd与Rm相同,则为寄存器与存储器内容进行交换;Rn为要进行数据交换的存储器地址,Rn不能与Rd和Rm相同。,

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 高等教育 > 其它相关文档

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号