您的当前位置:首页正文

ARM的多寄存器寻址

2020-06-06 来源:好走旅游网


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}

因篇幅问题不能全部显示,请点此查看更多更全内容