第3章 ARM微处理器的指令集(精简)20111021_第1页
第3章 ARM微处理器的指令集(精简)20111021_第2页
第3章 ARM微处理器的指令集(精简)20111021_第3页
第3章 ARM微处理器的指令集(精简)20111021_第4页
第3章 ARM微处理器的指令集(精简)20111021_第5页
已阅读5页,还剩115页未读 继续免费阅读

下载本文档

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

文档简介

1、13.3 ARM3.3 ARM处理器的指令系统处理器的指令系统主要内容主要内容3.3.1 ARM3.3.1 ARM指令系统概述指令系统概述3.3.2 ARM3.3.2 ARM寻址方式寻址方式3.3.3 ARM3.3.3 ARM指令集指令集3.3.4 Thumb3.3.4 Thumb指令集指令集3.3.5 3.3.5 ARMARM伪操作、伪指令与宏指令伪操作、伪指令与宏指令3.3.6 ARM3.3.6 ARM汇编语言程序设计汇编语言程序设计23.3.1 ARM3.3.1 ARM指令系统概述指令系统概述一、指令系统概念一、指令系统概念 指令:指令:是规定计算机进行某种操作的命令。是规定计算机进行某

2、种操作的命令。 指令系统:指令系统:计算机能够执行的各种指令的集合。计算机能够执行的各种指令的集合。二、二、ARMARM指令的特点指令的特点l所有指令都是所有指令都是3232位位的。的。l大多数指令都在大多数指令都在单周期单周期内完成。内完成。l所有指令都可以所有指令都可以条件条件执行。执行。lARMARM指令为指令为load/storeload/store类型。类型。l基本指令仅基本指令仅3636条条,分成六类。,分成六类。l有有7 7种种寻址方式。寻址方式。l指令集可以通过协处理器扩展。指令集可以通过协处理器扩展。3lARMARM指令是加载指令是加载/ /存储存储(Load/Store)(

3、Load/Store)型:型:也即指令集仅能处理寄存器中的数据,而且处理结果都也即指令集仅能处理寄存器中的数据,而且处理结果都要放回寄存器中,而对系统存储器的访问则需要通过专门的要放回寄存器中,而对系统存储器的访问则需要通过专门的加载加载/ /存储指令来完成。存储指令来完成。 ARMARM指令集是指令集是load/storeload/store结构:结构:对存储器中的数据对存储器中的数据只能使用只能使用load/storeload/store指令进行存取指令进行存取,所,所有其他操作只能在寄存器中完成,即只能对存放在寄存器的有其他操作只能在寄存器中完成,即只能对存放在寄存器的数据进行处理。数据

4、进行处理。 l ARM ARM指令可以分为六大类:指令可以分为六大类:数据处理指令数据处理指令、存储器访问、存储器访问Load/StoreLoad/Store指令、指令、程序状态程序状态寄存器寄存器处理指令、处理指令、跳转跳转指令、指令、协处理器协处理器指令、指令、异常产生异常产生指令指令。l ARMARM指令有指令有7 7种寻址方式:种寻址方式:立即寻址、寄存器寻址、寄存器间接寻址、基址寻址、立即寻址、寄存器寻址、寄存器间接寻址、基址寻址、堆栈寻址堆栈寻址 、块拷贝寻址、相对寻址。、块拷贝寻址、相对寻址。4l简单的简单的ARMARM程序程序;文件名:文件名:TEST1.S ;功能:实现两个寄

5、存器相加功能:实现两个寄存器相加 ;说明:使用说明:使用ARMulate软件仿真调试软件仿真调试 AREAExample1,CODE,READONLY ;声明代码段声明代码段Example1 ENTRY ;标识程序入口标识程序入口 CODE32 ;声明声明32位位ARM指令指令START MOVR0,#0 ;设置参数设置参数 MOVR1,#10LOOPBLADD_SUB ;调用子程序调用子程序ADD_SUB BLOOP ;跳转到跳转到LOOPADD_SUB ADDSR0,R0,R1 ;R0 = R0 + R1 MOVPC,LR ;子程序返回子程序返回 END ;文件结束文件结束 使用使用“;”

6、进行注释进行注释标号顶格写标号顶格写实际代码段实际代码段声明文件结束声明文件结束5三、三、ARMARM指令的格式指令的格式ARMARM指令基本的语法格式为:指令基本的语法格式为:Opcode condss , Rn , , , lOpcodeOpcode:指令操作码指令操作码。lcondcond:指令的条件码。指令的条件码。lS S:决定指令的操作是否影响决定指令的操作是否影响cpsrcpsr的值。的值。lRdRd:目标寄存器编码。目标寄存器编码。lRnRn:包含第一个操作数的寄存器编码。包含第一个操作数的寄存器编码。lOperand2Operand2:第第2 2操作数。操作数。ARMARM指

7、令典型的编码格式为:指令典型的编码格式为:每条每条ARMARM指令占有指令占有4 4个字节,其指令长个字节,其指令长度为度为3232位。位。CondOpcodeSRnRdOperand2011121516192021242527283178 例:例:ADDS R2,R1,#1 SUBNES R2,R1,#0 x20 LDR R0,R1CPSR:6四、指令的条件码四、指令的条件码条件码的位数和位置:条件码的位数和位置:每条每条ARMARM指令包含指令包含4 4位条件码域位条件码域cond,它它占用指令编码的最高四位占用指令编码的最高四位3131:2828。条件码的表示:条件码的表示:条件编码共条

8、件编码共 2 24 4 16 16 种,其中,种,其中,1515种用于指令的种用于指令的条件码。每种条件码用条件码。每种条件码用2 2个英文缩写字符表示。(见下表)个英文缩写字符表示。(见下表)带条件指令的执行:带条件指令的执行:ARMARM处理器根据指令的执行条件是否满足,处理器根据指令的执行条件是否满足,决定当前指令是否执行。决定当前指令是否执行。只有在只有在CPSRCPSR中的条件标志位满足指定的条件时,指令才会被中的条件标志位满足指定的条件时,指令才会被执行。不符合条件的代码依然占用一个时钟周期(相当于一个执行。不符合条件的代码依然占用一个时钟周期(相当于一个NOPNOP指令)。指令)

9、。l条件码的书写方法:条件码的书写方法:条件码的位置在指令助记符的后面(因此也条件码的位置在指令助记符的后面(因此也称为条件后缀)。称为条件后缀)。例如:例如: MOVMOVEQEQ R0, R1R0, R17ARMARM指令条件码表指令条件码表条件码条件码助记符助记符含含 义义标标 志志00000000EQEQ相等相等Z=1Z=100010001NENE不相等不相等Z=0Z=000100010CS/HSCS/HS无符号数大于或等于无符号数大于或等于C=1C=100110011CC/LOCC/LO无符号数小于无符号数小于C=0C=001000100MIMI负数负数N=1N=101010101P

10、IPI非负数非负数N=0N=001100110VSVS溢出溢出V=1V=101110111VCVC没有溢出没有溢出V=0V=010001000HIHI无符号数大于无符号数大于C=1C=1且且Z=0Z=010011001LSLS无符号数小于或等于无符号数小于或等于C=0C=0或或Z=1Z=110101010GEGE有符号数大于或等于有符号数大于或等于N=VN=V10111011LTLT有符号数小于有符号数小于N!=VN!=V11001100GTGT有符号数大于有符号数大于Z=0Z=0且且N=VN=V11011101LELE有符号数小于或等于有符号数小于或等于Z=1Z=1或或N!=VN!=V111

11、01110ALAL无条件执行无条件执行任意任意11111111保留保留v5v5以下版本总执行以下版本总执行,v5,v5及以上版本有用及以上版本有用8看几个例子看几个例子。LDR R0,R1LDR R0,R1 读取读取R1R1寄存器中的内容所指向的存储单元的数据到寄存器寄存器中的内容所指向的存储单元的数据到寄存器R0R0;BEQ ENDDATABEQ ENDDATA 条件分支执行指令,执行条件是条件分支执行指令,执行条件是EQEQ,即相等则跳转到,即相等则跳转到ENDDATAENDDATA处;条件是看处;条件是看CPSRCPSR程序状态寄存器中的条件代程序状态寄存器中的条件代码标志位的码标志位的

12、Z Z标志位,标志位,Z Z位置位时该指令执行,否则不执行。位置位时该指令执行,否则不执行。 ADDS R2,R1,#1 ADDS R2,R1,#1 寄存器寄存器R1R1中的内容加中的内容加1 1存入寄存器存入寄存器R2R2,并影响,并影响CPSRCPSR寄存器寄存器的值。这条语句的执行不受条件标志的影响,但是由于附带的值。这条语句的执行不受条件标志的影响,但是由于附带了后缀了后缀S S,这条指令执行的结果将影响,这条指令执行的结果将影响CPSRCPSR中条件标志位的值中条件标志位的值:如果:如果R1+1R1+1的结果为的结果为0 0,则,则Z Z位置位置1 1,如果,如果1+11+1的结果最

13、高位的结果最高位有进位,有进位,C C位置位置1 1,如果结果溢出,则,如果结果溢出,则V V值位。值位。9条件码标志条件码标志l任何数据处理指令都可以设置条件码任何数据处理指令都可以设置条件码 (N, Z, V, and C) (N, Z, V, and C) u适用于除比较操作外的所有数据处理指令适用于除比较操作外的所有数据处理指令u特殊的请求必须在汇编语言中实现特殊的请求必须在汇编语言中实现, ,这种请求是通过把这种请求是通过把”S”S”增加到选择代码中指定的增加到选择代码中指定的l算术操作设置所有的标志位算术操作设置所有的标志位 (N, Z, C, and V) (N, Z, C, a

14、nd V)l逻辑和移位操作设置逻辑和移位操作设置 N and Z N and Zu当无移位操作时当无移位操作时, ,保存保存V V和和C,C,或根据移位操作设置或根据移位操作设置ADDS r2, r2, r0; carry out to C10lARMARM指令可以通过添加适当的条件码指令可以通过添加适当的条件码后缀后缀来达到条件执行的目的。来达到条件执行的目的。l这样可以提高代码密度,减少分支跳转指令数目,提高性能。这样可以提高代码密度,减少分支跳转指令数目,提高性能。 CMP r3,#0 CMP r3,#0CMP r3,#0 CMP r3,#0 BEQ skip ADDNE r0,r1,r

15、2 BEQ skip ADDNE r0,r1,r2 ADD r0,r1,r2 ADD r0,r1,r2 skip skipl默认情况下,数据处理指令不影响默认情况下,数据处理指令不影响程序状态寄存器程序状态寄存器的条件码标志的条件码标志位,但可以选择通过添加位,但可以选择通过添加“S”S”来影响标志位。来影响标志位。 CMPCMP不需要增加不需要增加 “S”S”就可改变相应的标志位。就可改变相应的标志位。looploop SUBS r1,r1,#1 SUBS r1,r1,#1 BNE loop BNE loop条件执行及标志位条件执行及标志位* * *如果如果 Z Z标志清零则跳转标志清零则跳

16、转R1R1减减1 1,并设置标志位,并设置标志位 11ARMARM指令集格式指令集格式 123.3.2 ARM3.3.2 ARM寻址方式寻址方式主要内容主要内容一、一、立即寻址立即寻址二、寄存器寻址二、寄存器寻址三、寄存器间接寻址三、寄存器间接寻址四、基址寻址四、基址寻址五、堆栈寻址五、堆栈寻址 六、块拷贝寻址六、块拷贝寻址七、相对寻址七、相对寻址13寻址方式:寻址方式:处理器根据指令中给出的(地址)信息,寻处理器根据指令中给出的(地址)信息,寻找操作数(物理地址)的方式。找操作数(物理地址)的方式。我们将我们将ARMARM指令系统的寻址方式分为指令系统的寻址方式分为7 7种种(有分为(有分为

17、9 9种的等种的等)。)。141 1 立即寻址立即寻址l立即寻址立即寻址也叫立即数寻址也叫立即数寻址 这是一种特殊的寻址方式,这是一种特殊的寻址方式,操作数本身就在指令中操作数本身就在指令中给出,只给出,只要取出指令也就取到了操作数。这个操作数被称为立即数,要取出指令也就取到了操作数。这个操作数被称为立即数,对应的寻址方式也就叫做立即寻址对应的寻址方式也就叫做立即寻址l例如例如lADDADD R0, R0, R0, R0, 1 1; R0R0; R0R01 1lADDADD R0, R0, R0, R0, 0 x3f0 x3f; R0R0; R0R00 x3f0 x3flSUBS R0,R0,

18、#1SUBS R0,R0,#1;R0;R0减减1 1,结果放入,结果放入R0R0,并且影响标志位,并且影响标志位lMOV R0,#0 xFF000MOV R0,#0 xFF000; ;将立即数将立即数0 xFF0000 xFF000装入装入R0R0寄存器寄存器l在以上两条指令中,第二个源操作数即为立即数,要求在以上两条指令中,第二个源操作数即为立即数,要求以以“”为前缀为前缀,对于以十六进制表示的立即数,还要求在,对于以十六进制表示的立即数,还要求在“”后加上后加上“0 x”0 x”或或“&”&”l立即数一般为立即数一般为8 8位(超过位(超过8 8位使用伪指令位使用伪指令LD

19、RLDR)152 2 寄存器寻址寄存器寻址 寄存器寻址寄存器寻址就是就是利用寄存器中的数值作为操作数利用寄存器中的数值作为操作数l这种寻址方式是各类微处理器经常采用的一种方式,也是一这种寻址方式是各类微处理器经常采用的一种方式,也是一种种执行效率较高执行效率较高的寻址方式的寻址方式l例如例如lADDADD R0, R1, R2 R0, R1, R2;该指令的执行效果是将寄存器;该指令的执行效果是将寄存器R1R1和和R2R2的内容相加,其结果存放在寄存器的内容相加,其结果存放在寄存器R0R0中中 lMOV R1,R2MOV R1,R2 ; ;将将R2R2的值存入的值存入R1 R1 lSUB R0

20、,R1,R2SUB R0,R1,R2 ; ;将将R1R1的值减去的值减去R2R2的值,结果保存到的值,结果保存到R0R0163 3 寄存器间接寻址寄存器间接寻址 寄存器间接寻址寄存器间接寻址就是就是以寄存器中的值作为操作数的地址,而操作以寄存器中的值作为操作数的地址,而操作数本身存放在存储器数本身存放在存储器中中l例如例如lADDADD R0, R1, R2 R0, R1, R2 ; R0R1 ; R0R1R2R2lLDRLDR R0, R1 R0, R1 ; R0R1 ; R0R1lSTRSTR R0, R1R0, R1 ; R1R0 ; R1R0l在第一条指令中,以寄存器在第一条指令中,以

21、寄存器R2R2的值作为操作数的地址,在存储的值作为操作数的地址,在存储器中取得一个操作数后与器中取得一个操作数后与R1R1相加,结果存入寄存器相加,结果存入寄存器R0R0中中lLDR R1,R2LDR R1,R2 ; ;将将R2R2指向的存储单元的数据读出保存在指向的存储单元的数据读出保存在R1R1中中 lSWP R1,R1,R2SWP R1,R1,R2; ;将寄存器将寄存器R1R1的值和的值和R2R2指定的存储单元的指定的存储单元的内容交换内容交换 LDR/STRLDR/STR:左寄存器,右存储器:左寄存器,右存储器174 4 基址寻址基址寻址l基址寻址基址寻址就是将就是将寄存器(该寄存器一

22、般称作基址寄存器)的内容寄存器(该寄存器一般称作基址寄存器)的内容与指令中给出的地址偏移量相加与指令中给出的地址偏移量相加,从而得到一个操作数的有效地,从而得到一个操作数的有效地址址l基址寻址方式常用于基址寻址方式常用于访问某基地址附近的单元访问某基地址附近的单元l采用基址寻址方式的指令常见有以下几种形式采用基址寻址方式的指令常见有以下几种形式lLDRLDR R0, R1, R0, R1, 4 4 ; R0R1 ; R0R144lLDRLDR R0, R1, R0, R1, 4!4! ; R0R1 ; R0R144、R1R1R1R14 4lLDRLDR R0, R1, R0, R1, 4 4

23、; R0R1 ; R0R1、R1R1R1R14 4lLDRLDR R0, R1, R2 R0, R1, R2 ; R0R1 ; R0R1R2R2LDRLDR R0,R1, R0,R1,4!4! ; R0R1 ; R0R144、R1R1R1R14 4说明说明:“!”表示写回或更新基址寄存器表示写回或更新基址寄存器185 5 相对寻址相对寻址l相对寻址相对寻址以程序计数器以程序计数器PCPC的的当前值为基地址当前值为基地址,指令中的地址标指令中的地址标号作为偏移量号作为偏移量,将两者相加之后得到操作数的有效地址,将两者相加之后得到操作数的有效地址l以下程序段完成子程序的调用和返回,跳转指令以下程序

24、段完成子程序的调用和返回,跳转指令BLBL采用了相采用了相对寻址方式对寻址方式l BLBL SORT SORT; ; 跳转到子程序处执行跳转到子程序处执行l lSORTSORTl l MOVMOV PC, LR PC, LR; ; 从子程序返回从子程序返回 196 6 多寄存器寻址多寄存器寻址l采用采用多寄存器寻址方式多寄存器寻址方式,一条指令可以完成多个寄存器值的传,一条指令可以完成多个寄存器值的传送,最多送,最多传送传送1616个通用寄存器个通用寄存器的值的值l例如例如lLDMLDMIAIA R0!, R1, R2, R3, R4 R0!, R1, R2, R3, R4 ; R1R0,R0

25、=R0+4 ; R1R0,R0=R0+4l ; R2R0,R0=R0+4; R2R0,R0=R0+4l ; R3R0,R0=R0+4; R3R0,R0=R0+4l ; R4R0,R0=R0+4; R4R0,R0=R0+4l指令后缀指令后缀IAIA表示在每次执行操作后表示在每次执行操作后R0R0按字长度增加按字长度增加l注意注意:在寄存器列表中:在寄存器列表中同一寄存器仅能指定一次同一寄存器仅能指定一次;加载;加载/ /存存储操作按照储操作按照寄存器固定次序寄存器固定次序进行,所以寄存器排列先后关系进行,所以寄存器排列先后关系随意随意lLDMLDMIAIA R1, R0, R2, R5 R1,

26、R0, R2, R5 ; ; R0R1,R2R1+4,R5R1+8R0R1,R2R1+4,R5R1+820多寄存器寻址多寄存器寻址一次可传送几个寄存器值,允许一条指令传送一次可传送几个寄存器值,允许一条指令传送1616个寄存器个寄存器的任何子集或所有寄存器。多寄存器寻址指令举例如下:的任何子集或所有寄存器。多寄存器寻址指令举例如下: LDMIALDMIAR1!,R2-R7,R12R1!,R2-R7,R12; ;将将R1R1指向的单元中的数据读出到指向的单元中的数据读出到 ;R2;R2R7R7、R12R12中中(R1(R1自动加自动加4) 4) STMIASTMIAR0!,R2-R7,R12 R

27、0!,R2-R7,R12 ; ;将寄存器将寄存器R2R2R7R7、R12R12的值保的值保 ; ;存到存到R0R0指向的存储指向的存储; ; 单元中单元中 ;(R0;(R0自动加自动加4)4);先存后加;先存后加LDMIALDMIAR1,R2,R4,R6 R1,R2,R4,R6 ; ;块拷贝(多寄存器)寻址:块拷贝(多寄存器)寻址:多寄存器传送指令用于将一块数据从存储器多寄存器传送指令用于将一块数据从存储器的某一位置拷贝到另一位置。的某一位置拷贝到另一位置。 如:如:LDMLDMIAIAR0!,R1-R7R0!,R1-R7; ;将将R0R0指向的数据保存到指向的数据保存到R1R1R7R7中。中

28、。STMSTMIAIAR1!,R1-R7R1!,R1-R7; ;将将R1R1R7R7的数据保存到的数据保存到R1R1指向的存储器中。指向的存储器中。; ;存储指针存储指针R1R1在保存第一个值之后增加,在保存第一个值之后增加,; ;增长方向为向上增长(空递增)。增长方向为向上增长(空递增)。STMSTMIBIBR0!,R1-R7R0!,R1-R7; ;将将R1R1R7R7的数据保存到存储器中。的数据保存到存储器中。; ;存储指针存储指针R0R0在保存第一个值之前增加,在保存第一个值之前增加,; ;增长方向为向上增长(满递增)。增长方向为向上增长(满递增)。 21多寄存器传送指令的寻址模式多寄存

29、器传送指令的寻址模式寻址模式寻址模式描述描述起始地址起始地址结束地址结束地址RnRn! !IAIA执行后增加执行后增加RnRnRn+4Rn+4* *N-4N-4Rn+4Rn+4* *N NIBIB执行前增加执行前增加Rn+4Rn+4Rn+4Rn+4* *N NRn+4Rn+4* *N NDADA执行后减少执行后减少Rn-4Rn-4* *N+4N+4RnRnRn-4Rn-4* *N NDBDB执行前减少执行前减少Rn-4Rn-4* *N NRn-4Rn-4Rn-4Rn-4* *N N注:!决定注:!决定RnRn的值是否随着传送而改变的值是否随着传送而改变22例子例子要求:保存要求:保存r1r3r

30、1r3到内存地址到内存地址0 x90000 x900c0 x90000 x900c,并且更新基址寄存器,并且更新基址寄存器r4r4PRE: r1=0 x00000001, r2=0 x00000002, PRE: r1=0 x00000001, r2=0 x00000002, r3=0 x00000003, r4=0 x9000 r3=0 x00000003, r4=0 x9000执行操作:执行操作: STMIA r4!, r1, r2, r3(STMIA r4!, r1, r2, r3(执行后增加执行后增加) )POST: mem320 x9000=0 x00000001POST: mem3

31、20 x9000=0 x00000001 mem320 x9004=0 x00000002 mem320 x9004=0 x00000002 mem320 x9008=0 x00000003 mem320 x9008=0 x00000003 r4=0 x900c r4=0 x900c23例例: :将存储器中的连续数据装载到寄存器将存储器中的连续数据装载到寄存器lPRE mem320 x80018=0 x03, mem320 x80014=0 x02, mem320 x80010=0 x01, r0=0 x00080010, r1=0 x00000000, r2=0 x00000000, r3=

32、0 x00000000执行指令:执行指令: LDMIA r0!, r1-r3lPOST r0=0 x0008001c, r1=0 x00000001, r2=0 x00000002, r3=0 x000000030 x800200 x000000050 x8001c0 x000000040 x800180 x000000030 x800140 x000000020 x800100 x000000010 x8000c0 x00000000地址指针地址指针 存储地址存储地址 数据数据r3=0 x00000000r2=0 x00000000r1=0 x00000000r0=0 x80010247 7

33、 堆栈寻址堆栈寻址(1)(1)l堆栈堆栈按先进后出(按先进后出(FILOFILO)的方式工作)的方式工作l根据堆栈指针指向来分根据堆栈指针指向来分l堆栈指针指向最后一个压入堆栈的数据时,称为满堆栈堆栈指针指向最后一个压入堆栈的数据时,称为满堆栈l堆栈指针指向下一个将要放入数据的空位置时,称为堆栈指针指向下一个将要放入数据的空位置时,称为空堆空堆栈栈l根据堆栈的生成方式根据堆栈的生成方式l堆栈指针递增计数堆栈指针递增计数递增堆栈递增堆栈l堆栈指针递减计数堆栈指针递减计数递减堆栈递减堆栈257 7 堆栈寻址(堆栈寻址(2 2)lARMARM微处理器支持这四种类型的堆栈工作方式微处理器支持这四种类型

34、的堆栈工作方式l满递增堆栈满递增堆栈:堆栈指针指向最后压入的数据,且由低地址向堆栈指针指向最后压入的数据,且由低地址向高地址生成高地址生成LDMFALDMFA, , STMSTMFAFA l满递减堆栈满递减堆栈:堆栈指针指向最后压入的数据,且由高地址向堆栈指针指向最后压入的数据,且由高地址向低地址生成低地址生成LDMLDMFDFD, , STMSTMFDFD l空递增堆栈空递增堆栈:堆栈指针指向下一个将要放入数据的空位置,堆栈指针指向下一个将要放入数据的空位置,且由低地址向高地址生成且由低地址向高地址生成LDMLDMEAEA, , STMSTMEAEA l空递减堆栈空递减堆栈:堆栈指针指向下一

35、个将要放入数据的空位置,堆栈指针指向下一个将要放入数据的空位置,且由高地址向低地址生成且由高地址向低地址生成LDMLDMEDED, , STMSTMEDED lSTMFDSTMFD SP!, R0-R7, LR SP!, R0-R7, LR LRLR最先进栈,最先进栈,R0R0最后最后lLDMFDLDMFD SP!, R0-R7, PC SP!, R0-R7, PC R0R0最先出栈,最先出栈,PCPC最后最后STMFD SP!, R0-R7, LRLDMFD SP!, PC, R0-R726堆栈操作堆栈操作(3)(3)lARMARM使用多寄存器使用多寄存器Load/StoreLoad/Sto

36、re指令来完成堆栈操作;指令来完成堆栈操作;l使用堆栈时,需要确定堆栈在存储空间中是向上生长(使用堆栈时,需要确定堆栈在存储空间中是向上生长(递增的递增的“A”A”)还是向下生长(递减的)还是向下生长(递减的“D”D”););l满堆栈(满堆栈(“F”F”)是指堆栈指针指向堆栈的最后一个已)是指堆栈指针指向堆栈的最后一个已使用的地址或满位置;相反,空堆栈(使用的地址或满位置;相反,空堆栈(“E”E”)是指)是指SPSP指向堆栈的第一个没有使用的地址或空位置;指向堆栈的第一个没有使用的地址或空位置;27堆栈操作寻址方式堆栈操作寻址方式(4)(4)寻址方式寻址方式说明说明pop=LDMpush=ST

37、MFA递增满递增满LDMFALDMDASTMFASTMIBFD递减满递减满LDMFDLDMIASTMFDSTMDBEA递增空递增空LDMEALDMDBSTMEASTMIAED递减空递减空LDMEDLDMIBSTMEDSTMDA28LDMFD sp!,r4-r7,pcSP100FF1234AOBE80341010123484209753r41r5 14544r60r712lr9048pc9020r4100100FFr5FF1234r61234A0BEr7A0BE8034pc8034堆栈堆栈(5)(5)r4100r5FFr61234r7A0BElr8034ABCD8765102E16FFFF101

38、0123484209753存储器顶存储器顶SPSP100FF1234A0BE8034SPOld SP100FF1234A0BE8034lARM堆栈操作通过块传送指令来完成堆栈操作通过块传送指令来完成:STMFD(Push)块存储块存储- Full Descending stack STMDBLDMFD(Pop)块装载块装载- Full Descending stack LDMIASTMFD sp!,r4-r7,lr29例:把寄存器内容放入堆栈,更新例:把寄存器内容放入堆栈,更新SPSP0 x800180 x000000010 x800140 x000000020 x80010Empty0 x8

39、000cEmpty0 x800180 x000000010 x800140 x000000020 x800100 x000000030 x8000c0 x00000002PRE 地址地址 数据数据POST 地址地址 数据数据SPSPPRE : r1=0 x00000002, r4=0 x00000003, sp=0 x00080014执行指令:执行指令: STMFD sp!, r1,r4POST: r1=0 x00000002, r4=0 x00000003, sp=0 x0008000c30l数据传送指令、算术运算指令、比较指令和跳转指令数据传送指令、算术运算指令、比较指令和跳转指令例例1:

40、 1: 编写编写1+2+3+ 1+2+3+ +100 +100的汇编程序。的汇编程序。AREA SUM, CODE,READONLY ;AREA SUM, CODE,READONLY ;定义一个代码段,名称为定义一个代码段,名称为SUMSUMENTRY ENTRY ; ;程序入口程序入口MOVMOV R0,#0R0,#0; ;给给R0R0赋值为赋值为0 0MOVMOV R1,#0 R1,#0;R1;R1初始值为初始值为0 0,存放,存放11001100的总和的总和STARTSTART; ;标号标号ADDADD R0,R0,#1R0,R0,#1 ; ;用来判断终止的,每次加用来判断终止的,每次加

41、1 1ADDADD R1,R1,R0R1,R1,R0 ; ;从从1 1加到加到100100 CMPCMP R0,#100R0,#100 ;R0-100;R0-100,但不保存,只影响,但不保存,只影响CPSRCPSR值值BLT BLT STARTSTART ;R0;R0小于小于100100时跳转到时跳转到STARTSTART处执行处执行STOPSTOP B B STOP STOP ; ;死循环死循环ENDEND汇编指令与汇编程序汇编指令与汇编程序-例例1 131l例例2:2:程序所能完成的功能是:程序所能完成的功能是:10+20=3010+20=30(1E1E),结果放到内),结果放到内存地址

42、存地址0 x800001000 x80000100。l对程序语句的分析对程序语句的分析 :addraddr EQU 0 x80000100 EQU 0 x80000100; ;伪操作,宏定义,定义伪操作,宏定义,定义addraddr代表地址代表地址0 x800001000 x80000100AREA TEST,CODE,READONLY AREA TEST,CODE,READONLY ; ;伪操作,定义段伪操作,定义段ENTRYENTRY; ;伪操作,定义入口伪操作,定义入口CODE32CODE32; ;伪操作,定义以下是伪操作,定义以下是3232位的位的ARMARM指令指令STARTSTAR

43、T; ;标号,后面的跳转语句跳到此处标号,后面的跳转语句跳到此处LDR R0 ,=addrLDR R0 ,=addr; ;伪指令,地址值伪指令,地址值0 x800001000 x80000100加载到寄存器加载到寄存器R0R0MOV R1,#10MOV R1,#10;R1=10(A);R1=10(A)MOV R2,#20MOV R2,#20;R2=20(14);R2=20(14)ADD R1,R1,R2ADD R1,R1,R2;10(R1)+20(R2);10(R1)+20(R2)结果结果1E1E放到放到R1R1中中STR R1,R0STR R1,R0; ;把寄存器把寄存器R1R1中的结果存储

44、到中的结果存储到R0R0所指向的存储单元中所指向的存储单元中B STARTB START; ;跳转到标号跳转到标号STARTSTART处循环执行处循环执行ENDEND; ;伪操作,结束标志伪操作,结束标志汇编指令与汇编程序汇编指令与汇编程序-例例2 232l例例3:3:程序所能完成的功能是:程序所能完成的功能是:1+21+2* *1+31+3* *2+42+4* *3+.+113+.+11* *10=0 x1B910=0 x1B9l对程序语句的分析:对程序语句的分析: AREA AREA TEST1,CODE,READONLY TEST1,CODE,READONLY ; ;伪操作,定义段伪操作

45、,定义段 ENTRYENTRY; ;伪操作,定义入口伪操作,定义入口STARTSTART; ;语句标号,可以不用语句标号,可以不用 MOV R0,#1MOV R0,#1;R0;R0用作累加器用作累加器,用数据传送指令用数据传送指令MOVMOV赋初值赋初值1 1 MOV R1,#1 MOV R1,#1;R1;R1用作第一个乘数用作第一个乘数,赋初值赋初值1 1REPEATREPEAT; ;语句标号语句标号,后面用后面用BLEBLE跳转到这句跳转到这句,形成循环形成循环 ADD R2,R1,#1ADD R2,R1,#1 ; ;算术运算指令加法算术运算指令加法,R2R2用作第二个乘数用作第二个乘数R

46、2=R1+1R2=R1+1 MUL R3,R2,R1 MUL R3,R2,R1 ; ;算术运算指令乘法算术运算指令乘法,部分积部分积R3=R2R3=R2* *R1=(R1+1)R1=(R1+1)* *R1R1 ADD R0,R0,R3 ADD R0,R0,R3; ;将部分积累加至将部分积累加至R0R0,R0=R0+R3R0=R0+R3 ADD R1,R1,#1 ADD R1,R1,#1 ; ;修改循环变量值修改循环变量值R1=R1+1R1=R1+1,得到下一轮乘数得到下一轮乘数 CMP R1,#10CMP R1,#10; ;比较指令比较指令,R1-10R1-10,影响影响CPSRCPSR,循环

47、次数比较循环次数比较 BLE REPEATBLE REPEAT;R1=10;R1=10未完则重复,跳转到未完则重复,跳转到REPEATREPEATSTOPSTOP; ;语句标号语句标号 B B STOPSTOP; ;跳转到跳转到语句标号语句标号STOPSTOP,结束时进入死循环的标号,结束时进入死循环的标号 ENDEND; ;伪操作,结束标志伪操作,结束标志汇编指令与汇编程序汇编指令与汇编程序-例例3 3333.3.3 ARM3.3.3 ARM指令集指令集l存储器访问指令存储器访问指令l数据处理指令数据处理指令l乘法指令乘法指令lARMARM分支指令分支指令l杂项指令杂项指令l伪指令伪指令l1

48、 1 跳转指令跳转指令l2 2 数据处理指令数据处理指令l3 3 乘法指令与乘加指令乘法指令与乘加指令l4 4 程序状态寄存器访问指令程序状态寄存器访问指令l5 5 加载加载/ /存储指令存储指令l6 6 数据交换指令数据交换指令l7 7 移位指令移位指令l8 8 协处理器指令协处理器指令l9 9 异常产生指令异常产生指令34l向后兼容:新版本增加指令,并保持指令向后兼容;向后兼容:新版本增加指令,并保持指令向后兼容;lLoad-store Load-store 结构结构* *uload/store load/store 从存储器中读某个值从存储器中读某个值, ,操作完后再将其放回存操作完后再

49、将其放回存储器中储器中u只对存放在寄存器的数据进行处理;只对存放在寄存器的数据进行处理;u对于存储器中的数据,只能使用对于存储器中的数据,只能使用load/storeload/store指令进行存取指令进行存取ARM ARM 指令集的特点指令集的特点35指令格式指令格式l指令格式指令格式u地址指令格式地址指令格式 在在ARMARM状态中使用状态中使用指令语法指令语法目标寄存器(目标寄存器(Rd)Rd)源寄存器源寄存器1(Rn)1(Rn)源寄存器源寄存器2(Rm)2(Rm)ADD r3,r1,r2ADD r3,r1,r2r3r3r1r1r2r236助记符助记符指令功能描述指令功能描述ADCADC

50、带进位加法指令带进位加法指令ADDADD加法指令加法指令ANDAND逻辑与指令逻辑与指令B B跳转指令跳转指令BICBIC位清零指令位清零指令BLBL带返回的跳转指令带返回的跳转指令BLXBLX带返回和状态切换的跳转指令带返回和状态切换的跳转指令BXBX带状态切换的跳转指令带状态切换的跳转指令CDPCDP协处理器数据操作指令协处理器数据操作指令CMNCMN取负比较指令取负比较指令CMPCMP比较指令比较指令指令助记符指令助记符(1)(1)37助记符助记符指令功能描述指令功能描述EOREOR异或指令异或指令LDCLDC存储器到协处理器的数据传输指令存储器到协处理器的数据传输指令LDMLDM加载多

51、个寄存器指令加载多个寄存器指令LDRLDR存储器到寄存器的数据传输指令存储器到寄存器的数据传输指令MCRMCR从从ARMARM寄存器到协处理器寄存器的数据传输指令寄存器到协处理器寄存器的数据传输指令MLAMLA乘加运算指令乘加运算指令MOVMOV数据传送指令数据传送指令MRCMRC从协处理器寄存器到从协处理器寄存器到ARMARM寄存器的数据传输指令寄存器的数据传输指令MRSMRS传送传送CPSRCPSR或或SPSRSPSR的内容到通用寄存器指令的内容到通用寄存器指令MSRMSR传送通用寄存器到传送通用寄存器到CPSRCPSR或或SPSRSPSR的指令的指令MULMUL3232位乘法指令位乘法指

52、令MVNMVN数据取负传送指令数据取负传送指令指令助记符指令助记符(2)(2)38助记符助记符指令功能描述指令功能描述ORRORR逻辑或指令逻辑或指令RSBRSB反向减法指令反向减法指令RSCRSC带借位的反向减法指令带借位的反向减法指令SBCSBC带借位减法指令带借位减法指令STCSTC协处理器寄存器写入存储器指令协处理器寄存器写入存储器指令STMSTM批量内存字写入指令批量内存字写入指令STRSTR寄存器到存储器的数据传输指令寄存器到存储器的数据传输指令SUBSUB减法指令减法指令SWISWI软件中断指令软件中断指令SWPSWP交换指令交换指令TEQTEQ相等测试指令相等测试指令TSTTS

53、T位测试指令位测试指令指令助记符指令助记符(3)(3)391 1 跳转指令跳转指令(1)(1)l在在ARMARM程序中有两种方法可以实现程序的跳转程序中有两种方法可以实现程序的跳转l直接向程序计数器直接向程序计数器PCPC写入跳转地址值写入跳转地址值l可以可以实现在实现在4GB4GB的地址空间中的任意跳转的地址空间中的任意跳转lMOVMOV PC, R14 PC, R14l使用专门的跳转指令使用专门的跳转指令l跳转指令包括以下跳转指令包括以下4 4条指令条指令lB B跳转指令跳转指令lBLBL带返回的跳转指令带返回的跳转指令lBXBX带状态切换的跳转指令带状态切换的跳转指令 lBLXBLX带返

54、回和状态切换的跳转指令带返回和状态切换的跳转指令40l格式:格式:BB条件条件 label label功能:功能:B B指令是最简单的跳转指令。一旦遇到指令是最简单的跳转指令。一旦遇到B B指令,指令,ARM ARM 处理处理器将立即跳转到给定的目标地址器将立即跳转到给定的目标地址labellabel,即,即PC=labelPC=label,从那里,从那里继续执行。继续执行。l例如,下面的程序段完成循环例如,下面的程序段完成循环1010次的功能。次的功能。MOV R0,#10MOV R0,#10looploopSUBS R0,R0,#1SUBS R0,R0,#1BNE loopBNE loop

55、 1 1 跳转指令跳转指令(2)(2)41l(2) (2) BLBL带返回的跳转指令带返回的跳转指令格式:格式:BLBL条件条件 label label功能:功能:BLBL指令是另一个跳转指令,与指令是另一个跳转指令,与B B指令不同的是:在跳转指令不同的是:在跳转之前,将之前,将PCPC的当前内容保存在寄存器的当前内容保存在寄存器R14R14(LRLR)中保存。)中保存。 l(3) (3) BXBX带状态切换的分支指令带状态切换的分支指令格式:格式:BXBX条件条件 Rm Rm功能:功能:BXBX指令跳转到指令中所指定的目标地址,并实现状态指令跳转到指令中所指定的目标地址,并实现状态的切换。

56、的切换。l(4) (4) BLXBLX带返回和状态切换的分支指令带返回和状态切换的分支指令格式:格式:BLXBLX条件条件 label|Rm label|Rm功能:功能:BLXBLX指令跳转到指令中所指定的目标地址,并实现状态指令跳转到指令中所指定的目标地址,并实现状态的切换,同时将的切换,同时将PC(R15)PC(R15)的值保存到的值保存到LRLR寄存器(寄存器(R14R14)中。)中。1 1 跳转指令跳转指令(3)(3)422 2 数据处理指令数据处理指令(1)(1)l数据处理指令可分为数据处理指令可分为数据传送指令、算术逻辑运算指数据传送指令、算术逻辑运算指令和比较指令令和比较指令l数

57、据传送指令进行数据的传输数据传送指令进行数据的传输:MOV:MOV、MVNMVNl比较指令不保存运算结果,只比较指令不保存运算结果,只更新更新CPSRCPSR中相应的条件中相应的条件标志标志l算术逻辑运算指令完成常用的算术与逻辑的运算算术逻辑运算指令完成常用的算术与逻辑的运算l该类指令不但将运算结果该类指令不但将运算结果保存在目的寄存器保存在目的寄存器中,同时中,同时更新更新CPSRCPSR中的相应条件标志位中的相应条件标志位43l数据处理指令数据处理指令lMOVMOV数据传送指令数据传送指令MVNMVN数据取负传送指令数据取负传送指令lCMPCMP比较指令比较指令CMNCMN取负比较指令取负

58、比较指令lTSTTST位测试指令位测试指令TEQTEQ相等测试指令相等测试指令lADDADD加法指令加法指令ADCADC带进位加法指令带进位加法指令lSUBSUB减法指令减法指令SBCSBC带借位减法指令带借位减法指令lRSBRSB反向减法指令反向减法指令RSCRSC带借位反向减法指令带借位反向减法指令lANDAND逻辑与指令逻辑与指令ORRORR逻辑或指令逻辑或指令lEOREOR逻辑异或指令逻辑异或指令BICBIC位清除指令位清除指令2 2 数据处理指令数据处理指令(2)(2)44l(1) (1) MOVMOV指令指令 格式:格式:MOVMOV条件条件S S 目的寄存器目的寄存器Rd, Rd

59、, 源操作数源操作数 功能:功能:MOVMOV指令将源操作数传送到目的寄存器指令将源操作数传送到目的寄存器RdRd中。通常中。通常源操作数是一个立即数、寄存器或被移位的寄存器。源操作数是一个立即数、寄存器或被移位的寄存器。S S选项决选项决定指令的操作是否影响定指令的操作是否影响CPSRCPSR中条件标志位的值,有中条件标志位的值,有S S时指令执时指令执行后的结果影响行后的结果影响CPSRCPSR中条件标志位中条件标志位N N和和Z Z值,在计算源操作数值,在计算源操作数时更新标志时更新标志C C,不影响,不影响V V标志。标志。l例如:例如: MOV R1,R0MOV R1,R0; ;将寄

60、存器将寄存器R0R0的值传送到寄存器的值传送到寄存器R1R1 MOV PC,R14 MOV PC,R14; ;将寄存器将寄存器R14R14的值传送到的值传送到PCPC,常用于子,常用于子程序返回程序返回MOV R1,R0,LSL #2MOV R1,R0,LSL #2 ; ;将寄存器将寄存器R0R0的值左移的值左移2 2位后传送到位后传送到R1 R1 MOV R0,#10MOV R0,#10; ;将立即数将立即数1010传送到寄存器传送到寄存器R0R02 2 数据处理指令数据处理指令(3)(3)45l(2) (2) MVNMVN指令指令 格式:格式:MVNMVN条件条件S S 目的寄存器目的寄存器Rd, Rd,

温馨提示

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

评论

0/150

提交评论