ARM指令的特点和寻址方式.ppt
《ARM指令的特点和寻址方式.ppt》由会员分享,可在线阅读,更多相关《ARM指令的特点和寻址方式.ppt(19页珍藏版)》请在冰豆网上搜索。
第3章ARM指令特点和寻址方式ARM指令特点ARM指令系统的主要特征指令系统的主要特征大量的寄存器,都可用于多种用途;大量的寄存器,都可用于多种用途;Load-Store体系结构体系结构3地址指令(两个源操作数寄存器和结果寄存器独立设定)地址指令(两个源操作数寄存器和结果寄存器独立设定)每条指令都条件执行每条指令都条件执行,包含非常强大的多寄存器包含非常强大的多寄存器Load和和Store指指令令能在单时钟周期执行的单条指令内完成一项普通的移位操作和能在单时钟周期执行的单条指令内完成一项普通的移位操作和一项普通的一项普通的ALU操作操作能过协处理器指令集来扩展能过协处理器指令集来扩展ARM指令集,包括在编程模式下指令集,包括在编程模式下增加了新的寄存器和数据类型增加了新的寄存器和数据类型在在Thumb体系结构中以高密度体系结构中以高密度16位压缩形式表示指令集位压缩形式表示指令集ARM汇编指令ARM指令的基本格式如下:
指令的基本格式如下:
S,其中:
其中:
opcode指令助记符,如指令助记符,如LDR、STR等。
等。
cond执行条件,如执行条件,如EQ、NE等。
等。
S是否影响是否影响CPSR寄存器的值,书写时影响寄存器的值,书写时影响CPSR。
Rd目标寄存器。
目标寄存器。
Rn第第1个操作数的寄存器。
个操作数的寄存器。
operand2第第2个操作数。
个操作数。
在上面的基本格式中,在上面的基本格式中,“”符号内的项是必需符号内的项是必需的,的,“”符号内的项是可选的。
符号内的项是可选的。
例如,例如,是指令助记符,这是必须书写是指令助记符,这是必须书写的;而的;而为指令执行条件,是可选项。
若不为指令执行条件,是可选项。
若不书写,则使用默认条件书写,则使用默认条件AL(无条件执行无条件执行)。
ARM汇编指令指令格式指令格式举例如下:
指令格式举例如下:
LDRR0,R1;读取;读取R1地址上的存储地址上的存储器单元内容,执行条件器单元内容,执行条件AL(总是)总是)ADDSR1,R1,#1;加法指令;加法指令R1+1R1,影响,影响CPSR寄存器寄存器(S)SUBNESR1,R1,#0x10;条件执行减;条件执行减法运算法运算(NE),R1-0x10=R1,影响,影响CPSR寄存器寄存器(S)ARM汇编指令汇编指令指令的条件域指令的条件域当处理器工作在当处理器工作在ARM状态时,几乎所有的指令均根状态时,几乎所有的指令均根据据CPSR中条件码的状态和指令的条件域有条件的中条件码的状态和指令的条件域有条件的执行。
当指令的执行条件满足时,指令被执行,否执行。
当指令的执行条件满足时,指令被执行,否则指令被忽略。
则指令被忽略。
每一条每一条ARM指令包含指令包含4位的条件码,位于指令的最位的条件码,位于指令的最高高4位位31:
28。
条件码共有。
条件码共有16种,每种条件码可用种,每种条件码可用两个字符表示,这两个字符可以添加在指令助记符两个字符表示,这两个字符可以添加在指令助记符的后面和指令同时使用。
的后面和指令同时使用。
例如,跳转指令例如,跳转指令B可以加上后缀可以加上后缀EQ变为变为BEQ表示表示“相等则跳转相等则跳转”,即当,即当CPSR中的中的Z标志置位时发生跳标志置位时发生跳转转二ARM指令的寻址方式寻址方式分类寻址方式是根据指令中给出的地址码字段来实现寻找真实操作数地址的方式。
ARM处理器具有9种基本寻址方式。
1.寄存器寻址;2.立即寻址;3.寄存器移位寻址;4.寄存器间接寻址;5.基址寻址;6.多寄存器寻址;7.堆栈寻址;8.块拷贝寻址;9.相对寻址。
操作数的值在寄存器中,指令中的地址码字段指出的是寄存器编号,指令执行时直接取出寄存器值来操作。
寄存器寻址指令举例如下:
MOVR1,R2;将R2的值存入R1SUBR0,R1,R2;将R1的值减去R2的值,结果保存到R00xAA0x55R2R1寻址方式分类寄存器寻址MOVR1,R20xAA立即寻址指令中的操作码字段后面的地址码部分即是操作数本身,也就是说,数据就包含在指令当中,取出指令也就取出了可以立即使用的操作数(这样的数称为立即数)。
立即寻址指令举例如下:
SUBSR0,R0,#1;R0减1,结果放入R0,并且影响标志位MOVR0,#0xFF000;将立即数0xFF000装入R0寄存器0x55R0MOVR0,#0xFF00程序存储寻址方式分类立即寻址MOVR0,#0xFF000xFF00从代码中获得数据寄存器移位寻址是ARM指令集特有的寻址方式。
当第2个操作数是寄存器移位方式时,第2个寄存器操作数在与第1个操作数结合之前,选择进行移位操作。
寄存器移位寻址指令举例如下:
MOVR0,R2,LSL#3;R2的值左移3位,结果放入R0,;即是R0=R28ANDSR1,R1,R2,LSLR3;R2的值左移R3位,然后和R1相;“与”操作,结果放入R10x55R0R20x01寻址方式分类寄存器移位寻址MOVR0,R2,LSL#30x080x08逻辑左移3位寄存器间接寻址指令中的地址码给出的是一个通用寄存器的编号,所需的操作数保存在寄存器指定地址的存储单元中,即寄存器为操作数的地址指针。
寄存器间接寻址指令举例如下:
LDRR1,R2;将R2指向的存储单元的数据读出;保存在R1中SWPR1,R1,R2;将寄存器R1的值和R2指定的存储;单元的内容交换0x55R0R20x400000000xAA0x40000000寻址方式分类寄存器间接寻址LDRR0,R20xAA基址寻址就是将基址寄存器的内容与指令中给出的偏移量相加,形成操作数的有效地址。
基址寻址用于访问基址附近的存储单元,常用于查表、数组操作、功能部件寄存器访问等。
基址寻址指令举例如下:
LDRR2,R3,#0x0C;读取R3+0x0C地址上的存储单元;的内容,放入R2STRR1,R0,#-4!
;先R0=R0-4,然后把R1的值寄存;到保存到R0指定的存储单元寻址方式分类基址寻址0x55R2R30x400000000xAA0x4000000CLDRR2,R3,#0x0C0xAA将R3+0x0C作为地址装载数据多寄存器寻址一次可传送几个寄存器值,允许一条指令传送16个寄存器的任何子集或所有寄存器。
多寄存器寻址指令举例如下:
LDMIAR1!
R2-R7,R12;将R1指向的单元中的数据读出到;R2R7、R12中(R1自动加1)STMIAR0!
R2-R7,R12;将寄存器R2R7、R12的值保;存到R0指向的存储;单元中;(R0自动加1)0x40000000R1R20x?
0x010x400000000x?
R3R40x?
R60x?
0x020x030x040x400000040x400000080x4000000C存储器寻址方式分类多寄存器寻址LDMIAR1!
R2-R4,R60x010x020x030x040x40000010堆栈是一个按特定顺序进行存取的存储区,操作顺序为“后进先出”。
堆栈寻址是隐含的,它使用一个专门的寄存器(堆栈指针)指向一块存储区域(堆栈),指针所指向的存储单元即是堆栈的栈顶。
存储器堆栈可分为两种:
向上生长:
向高地址方向生长,称为递增堆栈向下生长:
向低地址方向生长,称为递减堆栈寻址方式分类堆栈寻址寻址方式分类堆栈寻址栈底栈顶栈区SP堆栈存储区栈顶栈底栈区SP向下增长向上增长0x123456780x12345678堆栈压栈堆栈压栈栈顶SP栈顶SP栈底空堆栈栈底满堆栈堆栈指针指向最后压入的堆栈的有效数据项,称为满堆栈;堆栈指针指向下一个待压入数据的空位置,称为空堆栈。
寻址方式分类堆栈寻址0x123456780x12345678栈顶SP0x12345678栈顶SP压栈压栈所以可以组合出四种类型的堆栈方式:
满递增:
堆栈向上增长,堆栈指针指向内含有效数据项的最高地址。
指令如LDMFA、STMFA等;空递增:
堆栈向上增长,堆栈指针指向堆栈上的第一个空位置。
指令如LDMEA、STMEA等;满递减:
堆栈向下增长,堆栈指针指向内含有效数据项的最低地址。
指令如LDMFD、STMFD等;空递减:
堆栈向下增长,堆栈指针向堆栈下的第一个空位置。
指令如LDMED、STMED等。
寻址方式分类堆栈寻址多寄存器传送指令用于将一块数据从存储器的某一位置拷贝到另一位置。
如:
STMIAR0!
R1-R7;将R1R7的数据保存到存储器中。
;存储指针在保存第一个值之后增加,;增长方向为向上增长。
STMIBR0!
R1-R7;将R1R7的数据保存到存储器中。
;存储指针在保存第一个值之前增加,;增长方向为向上增长。
寻址方式分类块拷贝寻址相对寻址是基址寻址的一种变通。
由程序计数器PC提供基准地址,指令中的地址码字段作为偏移量,两者相加后得到的地址即为操作数的有效地址。
相对寻址指令举例如下:
BLSUBR1;调用到SUBR1子程序BEQLOOP;条件跳转到LOOP标号处.LOOPMOVR6,#1.SUBR1.寻址方式分类相对寻址