ARM的多寄存器寻址 下载本文

ARM的多寄存器寻址

实验目的

? 熟悉使用ADS开发环境。

? 通过实验掌握ARM汇编指令的使用方法。 ? 理解ARM的多寄存器寻址方式。

实验设备

? 硬件:PC机。

? 软件:ADS集成开发环境,Windows 2000/XP/2003。

实验内容

? 熟悉开发环境,理解ARM的多寄存器寻址方式。

实验原理

寻址方式分类——多寄存器寻址

多寄存器寻址一次可传送几个寄存器值,允许一条指令传送16个寄存器的任何子集或所有寄存器。多寄存器寻址指令举例如下:

LDMIA R1!,{R2-R4,R6} ;将R1指向的单元中的数据读出到 ;R2~R4、R6中(R1自动加1)

STMIA R0!,{R2-R4,R6} ;将寄存器R2~R4、R6的值保 ;存到R0指向的存储; 单元中 ;(R0自动加1)

注意寄存器的编号连续和不连续的情况

寻址方式分类——堆栈寻址

堆栈是一个按特定顺序进行存取的存储区,操作顺序为“后进先出” 。堆栈寻址是隐含的,它使用一个专门的寄存器(堆栈指针)指向一块存储区域(堆栈),指针所指向的存储单元即是堆栈的栈顶。存储器堆栈可分为两种:

? 向上生长:向高地址方向生长,称为递增堆栈 ? 向下生长:向低地址方向生长,称为递减堆栈

寻址方式分类——块拷贝寻址

块拷贝是将寄存器内容复制到寄存器的地址所指示的存储器中,需要注意的是在存储第一个值之后存储器地址是增加还是减少.增值类型如下: IA---- 每次传送后,地址加4 IB---- 每次传送前,地址加4

DA—— 每次传送后,地址减4 DB—— 每次传送前,地址减4

实验步骤 实验参考程序

AREA Example1,CODE,READONLY ; 声明代码段Example1 ENTRY ; 标识程序入口

CODE32 ; 声明32位ARM指令 START stmfd r13!,{r0,r4-r7,lr} ldmfd r13!,{r0,r4-r7,pc} STOP MOV R0,#0x18 LDR R1,=0x20026 SWI 0x123456 END ;标记程序结束

实验结论

实验总结及心得体会

实验思考题

1.运行测试下面Load/Store指令,每条语句要求写注释说明寻址方式。有错误的地方请改正并说明原因.

ldmia r8,{r0,r5,r9}

stmdb r1!,{r3-r6,r11,r12} stmfd r13!,{r0,r4-r7,lr} ldmfd r13!,{r0,r4-r7,pc}

2.分析下列堆栈操作指令,写出对应的块操作指令. STMFD R0!,{R5-R6} . . .

LDMFD R0!,{R5-R6}