第3章ARM指令第一部分ARM寻址方式东北电力大学()_第1页
第3章ARM指令第一部分ARM寻址方式东北电力大学()_第2页
第3章ARM指令第一部分ARM寻址方式东北电力大学()_第3页
第3章ARM指令第一部分ARM寻址方式东北电力大学()_第4页
第3章ARM指令第一部分ARM寻址方式东北电力大学()_第5页
已阅读5页,还剩13页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、第三章第一部分第三章第一部分 ARM指令的寻址方指令的寻址方式式l寻址方式是根据指令中给出的地址码字段来实现寻找真是操作数地址的方式。lARM处理器有九种基本的寻址方式1.寄存器寻址方式寄存器寻址方式l操作数的值在寄存器中,指令中的地址码字段指出的是寄存器的编号,指令执行时直接取出寄存器值操作。l 寄存器寻址指令举例如下: l MOV R1,R2 ;R2 - R1 l SUB R0,R1,R2 ;R1 - R2 - R0 0 xAA0 x55R2R1MOV R1,R20 xAA2.立即数寻址立即数寻址l立即寻址指令中的操作码字段后面的地址码部分就是操作数本身,也就是说,数据 就包含在指令当中,

2、取出指令也就取出了可以立即使用的操作数(立即数)。 l 立即寻址指令举例如下: l SUBS R0,R0,#1 ;R0 1 - R0 l MOV R0,#0 xff00 ;0 xff00 - R0 l 立即数要以“”为前缀,表示 16进制数值时以“0 x”表示。 0 x55R0MOV R0,#0 xFF00程序存储MOV R0,#0 xFF000 xFF00从代码中获得数据3.寄存器偏移寻址寄存器偏移寻址 l 寄存器偏移寻址是ARM指令集特有的寻址方式,当第2操作数是寄存器偏移方式时, 第 2个寄存器操作数在与第 1个操作数结合之前,选择进行移位操作。 l 寄存器偏移寻址方式指令举例如下: l

3、 MOV R0,R2,LSL #3 ;R2的值左移3位,结果放入 R0,即R0 = R2 * 8 lANDS R1,R1,R2,LSL R3 ;R2的值左移R3位,然后 和R1 相与操作,结果放入R1 0 x55R0R20 x01MOV R0,R2,LSL #30 x080 x08逻辑左移3位4.寄存器间接寻址寄存器间接寻址 l寄存器间接寻址指令中的地址码给出的是一个通用寄存器编号,所需要的操作数保 存在寄存器指定地址的存储单元中,即寄存器为操作数的地址指针。 l 寄存器间接寻址指令举例如下: l LDR R1,R2 ;将 R2 中的数值作为地址,取出此地址 中的数据保存在R1 中 l SWP

4、 R1,R1,R2; 将R2的数值作为地址,取出此地 址中的数值与R1 中的值交换 0 x55R1R2 0 x400000000 xAA0 x40000000LDR R1,R20 xAA5.基址寻址基址寻址 l 基址寻址是将基址寄存器的内容与指令中给出的偏移量相加,形成操作数的有效地址,基址寻址用于访问基址附近的存储单元,常用于查表,数组操作,功能部件寄存器 访问等。 l 基址寻址指令举例如下: l LDR R2,R3,#0 x0C ;将R3 中的数值加 0 x0C 作为地址,取出此地址的数值保存在R2 中 l STR R1,R0,#-2 ;将R0 中的数值减 2 作为地址,把R1 中的内容保

5、存到此地址位置 0 x55R2R3 0 x400000000 xAA0 x4000000CLDR R2,R3,#0 x0C0 xAA将R3+0 x0C作为地址装载数据lLDRR0,R1 ,#4 ;R0=R1,R1R14 ;后索引基址寻址l ;ARM这种自动索引机 制不消耗额外的时间lLDR R0,R1,R2 ;R0=R1+R2 ; 基址加索引寻址;6.多寄存器寻址多寄存器寻址l多寄存器寻址就是一次可以传送几个寄存器值,允许一条指令传送 16个寄存器的任何子集或所有寄存器l多寄存器寻址指令举例如下:lLDMIA R1!,R2-R4,R6 ;将R1 单元中的数据读出到R2R4,R6,R1 自动加1

6、 l STMIA R0!,R3-R6,R10;将R3-R6,R10 中的数据保存到R0 指向的地址,R0 自动加 1 l使用多寄存器寻址指令时,寄存器子集的顺序时由小到大的顺序排列,连续的寄存器可用“”连接,否则,用“,”分隔书写。 0 x40000000R1R20 x?0 x010 x400000000 x?R3R40 x?R60 x?0 x020 x030 x040 x400000040 x400000080 x4000000C存储器LDMIA R1!,R2-R4,R6 0 x010 x020 x030 x040 x400000007.堆栈寻址堆栈寻址l 堆栈是特定顺序进行存取的存储区,操

7、作顺序分为“后进先出”和“先进后出”, l堆栈寻址时隐含的,它使用一个专门的寄存器 (堆栈指针)指向一块存储区域 (堆栈), l指针所指向的存储单元就是堆栈的栈顶。存储器堆栈可分为两种: l向上生长:向高地址方向生长,称为递增堆栈 l向下生长:向低地址方向生长,称为递减堆栈 堆栈指针指向最后压入的堆栈的有效数据项,称为满堆栈 堆栈指针指向下一个要放入的空位置,称为空堆栈。这样就有4 中类型的堆栈表示递增和递减的满堆栈和空堆栈 栈底栈顶栈区SP堆栈存储区栈顶栈底栈区SP向下增长向上增长0 x123456780 x12345678堆栈压栈堆栈压栈栈顶SP栈顶SP栈底空堆栈栈底满堆栈0 x12345

8、6780 x12345678栈顶SP0 x12345678栈顶SP压栈压栈l栈的各种组合l满递增:堆栈通过增大存储器的地址向上增长,堆栈指针指向内含有效数据项的 最高地址。指令如LDMFA,STMFA 等。 l空递增:堆栈通过增大存储器的地址向上增长,堆栈指针指向堆栈上的第一个空 位置。指令如LDMEA,STMEA 等。 l满递减:堆栈通过减小存储器的地址向下增长,堆栈指针指向内含有效数据项的最 低地址。指令如LDMFD,STMFD 等。 l空递减:堆栈通过减小存储器的地址向下增长,堆栈指针指向堆栈下的第一个空位置。指令如LDMED,STMED 等。 堆栈用一般数据存取L位 存取P 位前变址/

9、后变址U 位加/减空向下生长型(之前增量)空向下生长型(之前增量)LDMEDLDMIB111满向下生长型(之后增量)满向下生长型(之后增量)LDMFDLDMIA101空向上生长型(之前增量)空向上生长型(之前增量)LDMEALDMDB110满向上生长型(之后增量)满向上生长型(之后增量)LDMFALDMDA100满向上生长型(之前增量)满向上生长型(之前增量)STMFASTMIB011空向上生长型(之后增量)空向上生长型(之后增量)STMEASTMIA001空向下生长型(之前增量)空向下生长型(之前增量)STMFDSTMDB010满向下生长型(之后增量)满向下生长型(之后增量)STMEDSTM

10、DA000l 堆栈寻址指令举例如下: STMFD SP!,R1-R7,LR ; 将R1R7,LR 入栈。满递减堆栈。 LDMFD SP!,R1-R7,LR ;数据出栈,放入R1R7,LR 寄存器。满递减堆栈。8块拷贝寻址块拷贝寻址l块拷贝寻址传送指令用于一块数据从存储器的某一位置拷贝到另一位置。l块拷贝寻址指令举例如下: LDMIA R0,R1-R5; STMIA R1,R1-R5; STMIA R0!,R1-R7 ;将R1R7 的数据保存到存储器中,存储器指针在保存第一 ;个值之后增加,增长方向为向上增长。 STMIB R0!,R1-R7 ;将R1R7 的数据保存到存储器中,存储器指针在保存第一 个值之前增加,增长方向为向上增长。 STMDA R0!,R1-R7 ;将R1R7 的数据保存到存储器中,存储器指针在保存第一个值之后增加,增长方向为向下增长。 STMDB R0!,R1-R7 ;将 R1R7 的数据保存到存储器中,存储器指针在保存第一 个值之前增加,增长方向为向下增长。 9

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论