ARM指令寻址方式_第1页
ARM指令寻址方式_第2页
ARM指令寻址方式_第3页
ARM指令寻址方式_第4页
ARM指令寻址方式_第5页
已阅读5页,还剩23页未读 继续免费阅读

下载本文档

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

文档简介

制作:王亮讲解:张娴静熊祝青ARM指令的寻址方式ARM指令系统132

ARM指令系统概述

ARM指令的寻址方式

ARM指令集4

Thumb指令集ARM指令系统概述ARM指令的基本汇编格式

Opcode{cond}{S}Rd,Rn{,operand2}助记符可选条件后缀可选标志位后缀目标寄存器第1操作数寄存器第2操作数LDRR0,[R1];R0[R1]ADDSR2,R1,#1;R2R1+1,影响CPSRSUBNESR2,R1,R0;R2R1-R0WhileNE,影响CPSR

什么是寻址方式寻找操作数地址的方式或寻找操作数的方式称为寻址方式。如在计算2+3=?时,需先找到2和3的地址,才能把它们取出来进行加法操作,寻找2和3的地址的方式即寻址方式。ARM有哪些寻址方式?ARM指令的寻址方式ARM指令的寻址方式ARM的寻址方式立即寻址寄存器寻址寄存器移位寻址寄存器间接寻址基址加偏址寻址堆栈寻址块拷贝寻址/多寄存器寻址相对寻址1)立即寻址

立即寻址/立即数寻址:操作数直接包含在指令中,只要取出指令也就取到了操作数,这个操作数被称为立即数。例如:

ADD R0,R0,#1 /*R0←R0+1*/ADD R0,R0,#0x3f /*R0←R0+0x3f*/SUBR0,R0,#1/*R0R0-1*/第二个源操作数即为立即数,以“#”为前缀,十进制另加“0d”或省略。十六进制立即数另加“0x”或“&”,二进制另加“0b”或“2_”;2)寄存器寻址

寄存器寻址:操作数在寄存器中,指令中的地址码为寄存器编号,寄存器的内容即为操作数。执行效率较高的寻址方式。例

ADD R0,R1,R2 /*R0←R1+R2*/

该指令的执行效果是将寄存器R1和R2的内容相加,其结果存放在R0寄存器中。目的寄存器第一操作数寄存器第二操作数寄存器2)寄存器寻址

MOVR1,R2 ;R1R2该指令的执行效果是将寄存器R2的内容传送到寄存器R1中。寄存器寻址是各类微处器经常采用的寻址方式,是执行效率较高的寻址方式3)寄存器移位寻址寄存器寻址中,第二寄存器操作数在与第一操作数结合前可先进行移位操作,移位位数可以是一立即数或一寄存器R值。例ADDR3,R2,R1,LSR#2;R3R2+R1÷4ADDR3,R2,R1,LSRR4;R3R2+R1÷2R4ADDR3,R2,R1,LSL#3;R3R2+R1x8MOVR0,R2,LSL#3;R0R2X83)寄存器移位寻址移位类型LSL(LogicalShiftLeft)逻辑左移:向左移,最后移出的进CF,空出的最低有效位用零填充LSR(LogicalShiftRight)逻辑右移:向右移,最后移出的进CF,空出的最高有效位用零填充ASL(ArithmeticShiftLeft)算术左移:向左移,同LSLLogicalShiftLeft(LSL)DestinationCF0DestinationCFLogicalShiftRight...03)寄存器移位寻址ASR(ArithmeticShiftRight)算术右移:向右移,最后移出的进CF,空出的位用符号位填。源操作数为正,空出的最高有效位用零填充;源操作数为负,空出的最高有效位用1填充。DestinationCFArithmeticShiftRightSignbitshiftedin3)寄存器移位寻址ROR(RotateRight)循环右移:移出的最低位依次填入空出的最高位,最后移出的进C标志位。ROL(RotateLeft)循环左移。注意:进位标志C不在循环回路内。RRX(RotateRightExtendedby1Place)带扩展循环右移:寄存器的内容循环右移1位进入C标志位,空出的位用原来的C标志位填充。DestinationCFRotateRightDestinationCFRotateRightthroughCarry4)寄存器间接寻址寄存器间接寻址:寄存器中的值作为操作数的地址,而操作数本身存放在该地址所指向的存储器区中。例

LDR R0,[R1] ;R0←[R1]STR R0,[R1] ;[R1]←R0ADDR3,R2,[R1];R3←R2+[R1]

第一条指令将R1的值为地址的存储器中的数据传送到R0中。第二条指令将R0的值传送到R1的值为地址的存储器中。5)基址变址寻址基址变址寻址:将寄存器(基址寄存器)的内容与指令中给出的地址偏移量相加,得到操作数的有效地址,操作数存放在该地址指向的存储区中。基址变址寻址又可分为:

1)基址加偏移量寻址

a.前索引寻址方式:基址需加(或减)偏移来计算访问的地址。b.后索引寻址方式:基址不带偏移作为传送的地址,传送后自动索引。

2)基址加索引寻址

:指令指定一个基址寄存器,再指定另一个寄存器(索引),其值作为位移加到基址上形成存储器地址。5)基址变址寻址例如:LDRR0,[R1,#4];R0←[R1+4]LDRR0,[R1,#4]!;R0←[R1+4],R1←R1+4LDRR0,[R1],#4;R0←[R1],R1←R1+4LDRR0,[R1,R2];R0←[R1+R2]LDRR0,[R1,R2,LSL#2];R0←[R1+R2*4]变址寻址方式常用于访问某基址附近的地址单元,常用于查表、数组操作。前变址自动变址后变址5)基址变址寻址在第一条指令中,将寄存器R1的内容加上4形成操作数的有效地址,从而取得操作数存寄存器R0中。在第二条指令中,将寄存器R1的内容加上4形成操作数的有效地址,从而取得操作数存寄存器R0中,然后R1的内容自增4。请注意这里的“!”的用法,它表示操作完成后刷新“!”前的寄存器的数值。在第三条指令中,将寄存器R1的内容作为操作数的有效地址,从而取得操作数存寄存器R0中,然后,R1的内容自增4。6)堆栈寻址

操作数在堆栈中,堆栈是一块用于保存数据的连续内存区,按先进后出FILO(FirstInLastOut)的顺序进行存取操作,使用一个称作堆栈指针的专用寄存器指示当前的操作位置。根据堆栈指针指向位置的方式可分为如下两种堆栈:满堆栈(FullStack):当堆栈指针指向最后压入堆栈或第一个要读出的数据时。空堆栈(EmptyStack):当堆栈指针指向最后压入堆栈的数据的上/下一个空位或第一个要读出的数据上/下一个空位时。12SP满12SP空6)堆栈寻址根据堆栈指针变化的方式可分为如下两种堆栈递增堆栈(AscendingStack):当堆栈由低地址向高地址生成时,称为递增堆栈递减堆栈(DecendingStack):当堆栈由高地址向低地址生成时,称为递减堆栈12SPBase,LowHigh递增堆栈SP12Base,HighLow递减堆栈6)堆栈寻址堆栈的四种工作方式满递增堆栈:堆栈指针指向最后压入或第一个要读出的数据,且由低地址向高地址生长。满递减堆栈:堆栈指针指向最后压入或第一个要读出的数据,且由高地址向低地址生长。12SPBase,LowHigh满递增堆栈SP12Base,HighLow满递减堆栈6)堆栈寻址空递增堆栈:堆栈指针指向上一个将要放入数据的空位或第一个将要读出的数据的上一个空位,且由低地址向高地址生长。空递减堆栈:堆栈指针指向下一个将要放入数据的空位或第一个将要读出的数据的下一个空位,且由高地址向低地址生长12SPBase,LowHigh空递增堆栈12SPBase,HighLow空递减堆栈6)堆栈寻址例ARMSTMFDSP!{r0,r1,r3-r5};r0-r1,r3-r5入栈LDMFDSP!{r0,r1,r3-r5};r0-r1,r3-r5出栈ThumbPUSH{r0,r1,r3-r5};r0-r1,r3-r5入栈POP{r0,r1,r3-r5};r0-r1,r3-r5出栈7)块拷贝寻址/多寄存器寻址多寄存器寻址中,用一条指令把存储器中的一块数据加载到多个寄存器,或把多个寄存器中的内容保存到存储器中。寻址操作中的寄存器可以是R0~R15或其子集。LDM/STM加下列后缀即成为多寄存器寻址指令IA(IncrementAfter):操作完成后地址增IB(IncrementBefore):操作完成前地址增DA(DecrementAfter):操作完成后地址减DB(DecrementBefore):操作完成前地址减7)块拷贝寻址/多寄存器寻址LDMIAR1,{R0,R2,R5};R0[R1];R2[R1+4];R5[R1+8]该指令的后缀IA表示在每次执行完加载/存储操作后,R1按字长度增加,指令可将连续存储单元的值送到R0,R2,R5寄存器中7)块拷贝寻址/多寄存器寻址STMIAR1,{R0,R2,R5};[R1]R0;[R1+4]R2;[R1+8]R5该指令的后缀IA表示在每次执行完加载/存储操作后,R1按字长度增加,指令可将R0,R2,R5寄存器的值送到连续存储单元中。7)块拷贝寻址/多寄存器寻址例子STMIAR9!,{R0,R1,R5}

;R0/1/5存入R9所指内存,先存后加STMIBR9!,{R0,R1,R5};R0/1/5存入R9所指内存,先加后存R5R1R9’R0R9STMIAR9!,{R0,R1,R5}1000100c1018R5R1R0R9’R9STMIBR9!,{R0,R1,R5}1000100c10187)块拷贝寻址/多寄存器寻址STMDAR9!,{R0,R1,R5}

;R0/1/5存入r9所指内存,先存后减STMDBR9!,{R0,R1,R5};R0/1/5存入R9所指内存,先减后存R1R5R9STMDAR9!,{R0,R1,R5}R0R9’1000100c1018R5R9STMDBR9!,{R0,R1,R5}R1R0R9’1000100c10188)相对寻址相对寻址:以程序计数器PC的当前值为基地址,指令中的地址标号作为偏移量,两者相加得操作数的有效地址。以下程序段完成子程序的调用和返回,跳转指令BL采用了相对寻址方式:

BL

温馨提示

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

评论

0/150

提交评论