4.1ARM处理器寻址方式 ·寻址方式分类一基址寻址 基址寻址就是将基址寄存器的内容与指令中给 出的偏移量相加、形成操作数的有效地,址。基址寻 址 0x4000000C 0xAA 组 举 例 将R3+0x0C作 R3 0x40000000 LDR 为地址装载数 据 R2 0xAA STR LDR R2,[R3,#0x0C]
基址寻址就是将基址寄存器的内容与指令中给 出的偏移量相加,形成操作数的有效地址。基址寻 址用于访问基址附近的存储单元,常用于查表、数 组操作、功能部件寄存器访问等。基址寻址指令举 例如下: LDR R2,[R3,#0x0C] ;读取R3+0x0C地址上的存储单元 ;的内容,放入R2 STR R1,[R0,#-4]! ;先R0=R0-4,然后把R1的值寄存 ;到保存到R0指定的存储单元 4.1 ARM处理器寻址方式 • 寻址方式分类——基址寻址 R2 0x55 R3 0x40000000 0x4000000C 0xAA LDR R2,[R3,#0x0C] 0xAA 将R3+0x0C作 为地址装载数 据
4.1ARM处理器寻址方式 ·寻址方式分类一多寄存器寻址 多寄存器寻址一次可传送几个寄存器值,允许 条指今佐送16个寄存器的任何子集或所有寄存器。 多 R6 0x04 0x04 0x4000000C LDM R4 0x03 0x03 0x40000008 R3 0x02 0x02 0x40000004 STM R2 0x01 0x01 0x40000000 R1 0x40000010 .一一存储器 LDR R1I,{R2-R4,R6]
多寄存器寻址一次可传送几个寄存器值,允许 一条指令传送16个寄存器的任何子集或所有寄存器。 多寄存器寻址指令举例如下: LDMIA R1!,{R2-R7,R12} ;将R1指向的单元中的数据读出到 ;R2~R7、R12中(R1自动加1) STMIA R0!,{R2-R7,R12} ;将寄存器R2~R7、R12的值保 ;存到R0指向的存储; 单元中 ;(R0自动加1) R1 0x40000000 R2 0x?? 0x01 0x40000000 R3 0x?? R4 0x?? R6 0x?? 0x02 0x03 0x04 0x40000004 0x40000008 0x4000000C 存储器 4.1 ARM处理器寻址方式 • 寻址方式分类——多寄存器寻址 LDR R1!,{R2-R4,R6} 0x01 0x02 0x03 0x04 0x40000010
4.1ARM处理器寻址方式 ·寻址方式分类一堆栈寻址 堆栈是一个按特定顺序进行存取的存储区,操 作顺序为“后进先出”。堆栈寻址是隐含的,它使 用一个专门的寄存器(推栈指针)指向一块存储区域 (堆栈),指针所指向的存储单元即是堆栈的栈顶。 存储器堆栈可分为两种: ■向上生长:向高地址方向生长,称为递增堆栈 ■向下生长:向低地址方向生长,称为递减堆栈
堆栈是一个按特定顺序进行存取的存储区,操 作顺序为“后进先出” 。堆栈寻址是隐含的,它使 用一个专门的寄存器(堆栈指针)指向一块存储区域 (堆栈),指针所指向的存储单元即是堆栈的栈顶。 存储器堆栈可分为两种: ▪向上生长:向高地址方向生长,称为递增堆栈 ▪向下生长:向低地址方向生长,称为递减堆栈 4.1 ARM处理器寻址方式 • 寻址方式分类——堆栈寻址
4.1ARM处理器寻址方式 ·寻址方式分类一堆栈寻址 堆栈压栈” 0x12345678 SP→栈顶 栈底 向上 栈区 堆栈存 句下 增长 储区 增长 栈区 栈底 栈顶←SP 0x12345678 -推栈压栈
4.1 ARM处理器寻址方式 • 寻址方式分类——堆栈寻址 栈底 栈顶 栈区 SP→ 堆栈存 储区 栈顶 栈底 栈区 SP 向下 增长 向上 增长 0x12345678 堆栈压栈 0x12345678 堆栈压栈
4.1ARM处理器寻址方式 ·寻址方式分类一堆栈寻址 堆栈指针指向最后压入的堆栈的有效数据项, 称为满堆栈;堆栈指针指向下一个待压入数据的空 位置,称为空堆栈。 压栈一 0x12345678 一栈 SP→栈顶 SP→栈顶 0x12345678 0x12345678 满堆栈 空堆栈 栈底 栈底
SP→栈顶 SP→栈顶 栈底 空堆栈 栈底 满堆栈 堆栈指针指向最后压入的堆栈的有效数据项, 称为满堆栈;堆栈指针指向下一个待压入数据的空 位置,称为空堆栈。 4.1 ARM处理器寻址方式 • 寻址方式分类——堆栈寻址 0x12345678 SP→栈顶 0x12345678 0x12345678 SP→栈顶 压栈 压栈