《第4章 ARM7TDMI(S)指令系统.ppt》由会员分享,可在线阅读,更多相关《第4章 ARM7TDMI(S)指令系统.ppt(16页珍藏版)》请在第壹文秘上搜索。
1、q4.1 ARM指令概述指令概述q4.2 处理器寻址方式处理器寻址方式q4.3 ARM指令集指令集q4.4 Thumb指令集指令集第第4章章 ARM7TDMI(-S)指令系统指令系统4.1 ARM指令系统概述指令系统概述 指令系统指令系统是指特定计算机处理器上可执行的指令集合。是指特定计算机处理器上可执行的指令集合。ARMARM处理器是基于精简指令集计算机处理器是基于精简指令集计算机(RISC)(RISC)原理设计的,原理设计的,指令集和相关译码机制较为简单。指令集和相关译码机制较为简单。ARM7TDMI(-S)ARM7TDMI(-S)具有具有3232位位ARMARM指令集指令集和和1616位
2、位ThumbThumb指令集。指令集。*ARMARM指令集效率高,但是代码密度低指令集效率高,但是代码密度低;*Thumb Thumb指令集具有较高的代码密度,却仍然保持指令集具有较高的代码密度,却仍然保持ARMARM的的大多数性能上的优势,它是大多数性能上的优势,它是ARMARM指令集的子集;指令集的子集;*所有的所有的ARMARM指令都是可以有条件执行的,而指令都是可以有条件执行的,而ThumbThumb指令指令仅有一条指令具备条件执行功能;仅有一条指令具备条件执行功能;*ARMARM程序和程序和ThumbThumb程序可相互调用,相互之间的状态切程序可相互调用,相互之间的状态切换开销几乎
3、为零。换开销几乎为零。ARM指令集与指令集与Thumb指令集的关系指令集的关系Thumb指令集指令集具有灵活、小具有灵活、小巧的特点巧的特点ARM指令集支指令集支持持ARM核所有核所有的特性,具有高的特性,具有高效、快速的特点效、快速的特点4.2 ARM处理器寻址方式处理器寻址方式 寻址方式分类寻址方式分类 寻址方式是根据指令中给出的地址码字段来实现寻找真寻址方式是根据指令中给出的地址码字段来实现寻找真实操作数地址的方式。实操作数地址的方式。ARMARM处理器具有处理器具有9 9种基本寻址种基本寻址方式。方式。1.1.寄存器寻址;寄存器寻址;2.2.立即寻址;立即寻址;3.3.寄存器移位寻址;
4、寄存器移位寻址;4.4.寄存器间接寻址;寄存器间接寻址;5.5.基址寻址;基址寻址;6.6.多寄存器寻址;多寄存器寻址;7.7.堆栈寻址;堆栈寻址;8.8.块拷贝寻址;块拷贝寻址;9.9.相对寻址。相对寻址。操作数的值在寄存器中,指令中的操作数的值在寄存器中,指令中的地址码字段地址码字段指指出的是寄存器编号,指令执行时直接取出寄存器值出的是寄存器编号,指令执行时直接取出寄存器值来操作。寄存器寻址指令举例如下:来操作。寄存器寻址指令举例如下:MOV R1,R2 ;将将R2的值存入的值存入R1 SUB R0,R1,R2 ;将将R1的值减去的值减去R2的值,结果保存到的值,结果保存到R0 0 xAA
5、0 x55R2R1 4.2.1 寄存器寻址寄存器寻址MOV R1,R20 xAA 立即寻址指令中的操作码字段立即寻址指令中的操作码字段后面的地址码后面的地址码部分部分即是操作数本身,也就是说,数据就包含在指令当即是操作数本身,也就是说,数据就包含在指令当中,取出指令也就取出了可以立即使用的操作数中,取出指令也就取出了可以立即使用的操作数(这这样的数称为立即数样的数称为立即数)。立即寻址指令举例如下:。立即寻址指令举例如下:SUBSR0,R0,#1 ;R0减减1,结果放入,结果放入R0,并且影,并且影响标志位响标志位 MOV R0,#0 xFF000;将立即数将立即数0 xFF000装入装入R0
6、寄存器寄存器 0 x55R0MOV R0,#0 xFF00程序存储程序存储 4.2.2 立即寻址立即寻址MOV R0,#0 xFF000 xFF00从代码中获得数据从代码中获得数据 寄存器移位寻址是寄存器移位寻址是ARMARM指令集特有的寻址方式。当第指令集特有的寻址方式。当第2 2个操作数是寄存器移位方式时,第个操作数是寄存器移位方式时,第2 2个寄存器操作数在与个寄存器操作数在与第第1 1个操作数结合之前,选择进行移位操作。寄存器移位个操作数结合之前,选择进行移位操作。寄存器移位寻址指令举例如下:寻址指令举例如下:MOV R0,R2,LSL#3 ;R2的值左移的值左移3位,结果放入位,结果
7、放入R0,;即是即是R0=R28 ANDS R1,R1,R2,LSL R3 ;R2的值左移的值左移R3位,然后位,然后和和R1相相 ;“与与”操作,结果放入操作,结果放入R10 x55R0R20 x01 4.2.3 寄存器移位寻址寄存器移位寻址MOV R0,R2,LSL#30 x080 x08逻辑左移逻辑左移3位位 寄存器间接寻址指令中的地址码给出的是一个通寄存器间接寻址指令中的地址码给出的是一个通用寄存器的编号,所需的操作数保存在寄存器指定用寄存器的编号,所需的操作数保存在寄存器指定地址的存储单元中,即寄存器为操作数的地址指针。地址的存储单元中,即寄存器为操作数的地址指针。寄存器间接寻址指令
8、举例如下:寄存器间接寻址指令举例如下:LDR R1,R2;将将R2指向的存储单元的数据读出指向的存储单元的数据读出;保存在保存在R1中中 SWP R1,R1,R2;将寄存器将寄存器R1的值和的值和R2指定的指定的存储存储;单元的内容交换单元的内容交换 0 x55R0R2 0 x400000000 xAA0 x40000000 4.2.4 寄存器间接寻址寄存器间接寻址LDR R0,R20 xAA 基址寻址就是将基址寄存器的内容与指令中给出的偏基址寻址就是将基址寄存器的内容与指令中给出的偏移量相加,形成操作数的有效地址。基址寻址用于访问移量相加,形成操作数的有效地址。基址寻址用于访问基址附近的存储
9、单元,常用于查表、数组操作、功能部基址附近的存储单元,常用于查表、数组操作、功能部件寄存器访问等。基址寻址指令举例如下:件寄存器访问等。基址寻址指令举例如下:LDR R2,R3,#0 x0C;读取读取R3+0 x0C地址上的存储单元地址上的存储单元 ;的内容,放入的内容,放入R2 STR R1,R0,#-4!;先先R0=R0-4,然后把,然后把R1的值寄存的值寄存 ;到保存到到保存到R0指定的存储单元指定的存储单元 4.2.5 基址寻址基址寻址0 x55R2R3 0 x400000000 xAA0 x4000000CLDR R2,R3,#0 x0C0 xAA将将R3+0 x0C作作为地址装载数
10、为地址装载数据据 多寄存器寻址一次可传送几个寄存器值,允许一条指令多寄存器寻址一次可传送几个寄存器值,允许一条指令传送传送1616个寄存器的任何子集或所有寄存器。多寄存器寻址个寄存器的任何子集或所有寄存器。多寄存器寻址指令举例如下:指令举例如下:LDMIAR1!,R2-R7,R12 ;将将R1指向的单元中的数据指向的单元中的数据读出到读出到 ;R2R7、R12中中(R1自动加自动加1)STMIAR0!,R2-R7,R12 ;将寄存器将寄存器R2R7、R12的的值保值保 ;存到存到R0指向的存储指向的存储;单元中单元中 ;(R0自动加自动加1)0 x40000000R1R20 x?0 x010
11、x400000000 x?R3R40 x?R60 x?0 x020 x030 x040 x400000040 x400000080 x4000000C存储器存储器 4.2.6 多寄存器寻址多寄存器寻址LDMIA R1!,R2-R4,R6 0 x010 x020 x030 x040 x40000000 堆栈是一个按特定顺序进行存取的存储区,操作堆栈是一个按特定顺序进行存取的存储区,操作顺序为顺序为“后进先出后进先出”。堆栈寻址是隐含的,它使用。堆栈寻址是隐含的,它使用一个专门的寄存器一个专门的寄存器(堆栈指针堆栈指针)指向一块存储区域指向一块存储区域(堆堆栈栈),指针所指向的存储单元即是堆栈的栈
12、顶。存储,指针所指向的存储单元即是堆栈的栈顶。存储器堆栈可分为两种:器堆栈可分为两种:向上生长:向高地址方向生长,称为递增堆栈向上生长:向高地址方向生长,称为递增堆栈向下生长:向低地址方向生长,称为递减堆栈向下生长:向低地址方向生长,称为递减堆栈 4.2.7 堆栈寻址堆栈寻址 堆栈寻址堆栈寻址栈底栈底栈顶栈顶栈区栈区SP堆栈存堆栈存储区储区栈顶栈顶栈底栈底栈区栈区SP向下向下增长增长向上向上增长增长0 x123456780 x12345678堆栈压栈堆栈压栈堆栈压栈堆栈压栈0 x000000000 xffffffff栈顶栈顶SP栈顶栈顶SP栈底栈底空堆栈空堆栈栈底栈底满堆栈满堆栈 堆栈指针指向
13、最后压入的堆栈的有效数据项,称堆栈指针指向最后压入的堆栈的有效数据项,称为为满堆栈满堆栈;堆栈指针指向下一个待压入数据的空位;堆栈指针指向下一个待压入数据的空位置,称为置,称为空堆栈空堆栈。堆栈寻址堆栈寻址0 x123456780 x12345678栈顶栈顶SP0 x12345678栈顶栈顶SP压栈压栈压栈压栈所以可以组合出四种类型的堆栈方式:所以可以组合出四种类型的堆栈方式:满递增满递增:堆栈向上增长,堆栈指针指向内含有效数据项的:堆栈向上增长,堆栈指针指向内含有效数据项的最高地址。指令如最高地址。指令如LDMFALDMFA、STMFASTMFA等;等;空递增空递增:堆栈向上增长,堆栈指针指
14、向堆栈上的第一个空:堆栈向上增长,堆栈指针指向堆栈上的第一个空位置。指令如位置。指令如LDMEALDMEA、STMEASTMEA等;等;满递减满递减:堆栈向下增长,堆栈指针指向内含有效数据项的:堆栈向下增长,堆栈指针指向内含有效数据项的最低地址。指令如最低地址。指令如LDMFDLDMFD、STMFDSTMFD等;等;空递减空递减:堆栈向下增长,堆栈指针向堆栈下的第一个空位:堆栈向下增长,堆栈指针向堆栈下的第一个空位置。指令如置。指令如LDMEDLDMED、STMEDSTMED等。等。堆栈寻址堆栈寻址 多寄存器传送指令用于将一块数据从存储器的某多寄存器传送指令用于将一块数据从存储器的某一位置拷贝
15、到另一位置。一位置拷贝到另一位置。如:如:STMIAR0!,R1-R7;将将R1R7的数据保存到存的数据保存到存储器中。储器中。;存储指针在保存第一个值之后增加,存储指针在保存第一个值之后增加,;增长方向为向上增长。增长方向为向上增长。STMIBR0!,R1-R7;将将R1R7的数据保存到存的数据保存到存储器中。储器中。;存储指针在保存第一个值之前增加,存储指针在保存第一个值之前增加,;增长方向为向上增长。增长方向为向上增长。4.2.8 块拷贝寻址块拷贝寻址 相对寻址是基址寻址的一种变通。由程序计数器相对寻址是基址寻址的一种变通。由程序计数器PCPC提供基准地址,指令中的地址码字段作为偏移量,提供基准地址,指令中的地址码字段作为偏移量,两者相加后得到的地址即为操作数的有效地址。相两者相加后得到的地址即为操作数的有效地址。相对寻址指令举例如下:对寻址指令举例如下:BLSUBR1;调用到调用到SUBR1子程序子程序BEQLOOP;条件跳转到条件跳转到LOOP标号处标号处.LOOP MOVR6,#1.SUBR1.4.2.9 相对寻址相对寻址