ARM嵌入式系统结构与编程:第3章 ARM指令集寻址方式.ppt
字、无符号字节寻址偏移量的提供形式偏移量的作用时间立即数前变址不回写寄存器前变址回写寄存器移位后变址回写半字、有符号字节寻址这类指令可用来加载有符号字节、加载有符号半字、加载/存储无符号半字。Load/Store指令对半字、有符号字节操作指令编码格式如下:为什么要区分有无符号加载有符号字节到寄存器: LDR{cond}SBRd,addressing_mode加载有符号半字到寄存器: LDR{cond}SHRd,addressing_mode加载无符号半字到寄存器: LDR{cond}HRd,addressing_mode存储无符号半字到内存: STR{cond}HRd,addressing_mode半字、有符号字节寻址1.Addressing_mode中的偏移量为立即数 前变址不回写形式:[Rn,#+/-immed_offset8]前变址回写形式:[Rn,#+/-immed_offset8]!后变址回写形式: [Rn],#+/-immed_offset8半字、有符号字节寻址偏移量为立即数的指令编码类型[例3-4]LDRSBR0,[R1,#4]LDRHR2,[R1,#-4]STRHR0,[R1,#4]!LDRSHR0,[R1],#4半字、有符号字节寻址2.Addressing_mode偏移量为寄存器的值 前变址不回写形式: [Rn,+/-Rm]前变址回写形式: [Rn,+/-Rm]!后变址回写形式: [Rn],+/-Rm半字、有符号字节寻址偏移量为寄存器值的指令编码类型对应关系[例3-5]LDRSBR0,[R1,R5]LDRHR2,[R1,-R5]STRHR0,[R1,R5]!LDRSHR0,[R1],R5半字、有符号字节寻址偏移量的提供形式偏移量的作用时间立即数前变址不回写寄存器前变址回写后变址回写半字、有符号字节寻址3.4批量Load/Store指令寻址方式ARM指令系统提供了批量Load/Store指令寻址方式,即通常所说的多寄存器寻址,也就是一次可以传送几个寄存器的值,允许一条指令最多传送16个寄存器。编码格式批量加载:LDM{cond}addr_modeRn{!},register{^}批量存储:STM{cond}addr_modeRn{!},register{^}register_list表示要加载或存储的寄存器列表,bit[15:0]可以表示16个寄存器,如果某位为1,则该位的位置作为寄存器的编号,此寄存器参预加载或存储。S用于恢复CPSR和强制用户位。当程序计数器PC包含在LDM指令的register_list中,且S为1时,则当前模式的SPSR被拷贝到CPSR中,使处理器的程序返回和状态的恢复成为一个原子操作。如果register_list中不包含程序计数器PC,S为1则加载或存储的是用户模式下的寄存器组。注意事项:*指令中寄存器和连续内存地址单元的对应关系:编号低的寄存器对应内存低地址单元,编号高的寄存器对应内存高地址单元。内存操作批量Load/Store指令在实现寄存器组和连续内存单元中数据传递时,地址的变化方式(addr_mode)有以下四种:后增IA(IncrementAfter):每次数据传送后地址加4;先增IB(IncrementBefore):每次数据传送前地址加4;后减DA(DecrementAfter):每次数据传送后地址减4;先减DB(DecrementBefore):每次数据传送前地址减4;*TM**TM第3章ARM指令集寻址方式ARM指令寻址方式可分为四大类:数据处理指令寻址Load/Store指令的寻址批量Load/Store指令的寻址协处理指令寻址。本章内容3.1ARM指令的编码格式3.2数据处理指令寻址方式3.3Load/Store指令寻址3.4批量Load/Store指令寻址方式3.5协处理器指令寻址方式一般编码格式每条ARM指令占有4个字节,其指令长度为32位cond(bit[31:28]) 指令执行的条件码;type(bit[27:26]) 指令类型码cond(bit[31:28]) 指令执行的条件码;type(bit[27:26]) 指令类型码cond(bit[31:28]) 指令执行的条件码;type(bit[27:26]) 指令类型码cond(bit[31:28]) 指令执行的条件