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}
因篇幅问题不能全部显示,请点此查看更多更全内容