第3章ARM的指令系统.pptVIP

  • 25
  • 0
  • 约1.42万字
  • 约 48页
  • 2016-08-21 发布于重庆
  • 举报
第3章ARM的指令系统

* 3.2.3 Load/Store指令 3.2.3.1 单寄存器的Load/Store指令 用于把单一的数据传入或者传出一个寄存器。支持的数据类型有字节(8位)、半字(16位)和字(32位)。 单寄存器Load/Store指令 3.2 ARM处理器的指令集 * LDR和STR指令应用示例: 1.加载/存储字和无符号字节指令 LDR R2,[R5] ;将R5指向地址的字数据存入R2 STR R1,[R0,#0x04] ;将R1的数据存储到R0+0x04地址 LDRB R3,[R2],#-1 ;将R2指向地址的字节数据存入R3,R2=R2-1 2.加载/存储半字和有符号字节指令 LDRSB R1,[R0,R3] ;将R0+R3地址上的字节数据存入R1, ;高24位用符号扩展 LDRH R6,[R2],#2 ;将R2指向地址的半字数据存入R6,高16位用0扩展 ;读出后,R2=R2+2 STRH R1,[R0,#2]! ;将R1的半字数据保存到R0+2地址, ;只修改低2字节数据,然后R0=R0+2 * 为了加载更大的立即数, 汇编器提供了伪指令: LDR rd, =const 这将: 产生一条 MOV 或者 MVN 指令 产生一条 PC相对寻址的LDR 指令将立即数从literal pool 里读出来 举例 LDR r0, =0xFF = MOV r0, #0xFF LDR r0, =0= LDR r0, [PC, #Imm12] … … DCD 0推荐用这种方式将常数加载到寄存器 LDR伪指令——加载32位的常数 * 3.2.3 Load/Store指令 3.2.3.2 多寄存器的Load/Store内存访问指令 多寄存器的Load/Store内存访问指令也叫批量加载/存储指令,它可以实现在一组寄存器和一块连续的内存单元之间传送数据。LDM用于加载多个寄存器,STM用于存储多个寄存器。多寄存器的Load/Store内存访问指令: 3.2 ARM处理器的指令集 注意不同类型的基址寄存器变化情况 R5 R6 R7 R1 ? R1’ ? 指令STMIA R1!,{R5-R7} 4008H 4004H 4000H 4014H 4010H 400CH R5 R6 R7 R1 ? R1’ ? 指令STMDA R1!,{R5-R7} 4008H 4004H 4000H 4014H 4010H 400CH R5 R6 R7 R1 ? R1’ ? 指令STMIB R1!,{R5-R7} 4008H 4004H 4000H 4014H 4010H 400CH R5 R6 R7 R1’ ? R1 ? 指令STMDB R1!,{R5-R7} 4008H 4004H 4000H 4014H 4010H 400CH * 3.2.3 Load/Store指令 3.2.3.2 多寄存器的Load/Store内存访问指令 【举例】 使用LDM/STM进行数据复制。 LDR R0,=SrcData ;设置源数据地址 LDR R1,=DstData ;设置目标地址 LDMIA R0,{R2~R9} ;加载8字数据到寄存器R2~R9 STMIA R1,{R2~R9} ;存储寄存器R2~R9到目标地址 【举例】 使用LDM/STM进行现场寄存器保护,常在子程序或异常处理使用。 SENDBYTE STMFD SP!,{R0~R7,LR} ;寄存器压栈保护 … BL DELAY ;调用DELAY子程序 … LDMFD SP!,{R0~R7,PC} ;恢复寄存器,并返回 * 3.2.3 Load/Store指令 3.2.3.3 单数据交换指令 交换指令是Load/Store指令的一种特例,它把一个寄存器单元的内容与寄存器内容交换。交换指令SWP: 3.2 ARM处理器的指令集 * 3.2.4 跳转指令 跳转(B)和跳转连接(BL)指令是改变指令执行顺序的标准方式。ARMv5架构指令集包含的跳转指令如表所示。 3.2 ARM处理器的指令集 * 3.2.4 跳转指令 1.跳转指令B及带连接的跳转指令BL 跳转指令B使程序跳转到指定的地址执行程序。 BL将下一条指令的地址拷贝到R14(即返回地址连接寄存器LR)寄存器中,然后跳转到指定地址运行程序。 * 3.2.4 跳转指令 程序举例 ①程序跳转到

文档评论(0)

1亿VIP精品文档

相关文档