第3章 ARM的指令系统_第1页
第3章 ARM的指令系统_第2页
第3章 ARM的指令系统_第3页
第3章 ARM的指令系统_第4页
第3章 ARM的指令系统_第5页
已阅读5页,还剩111页未读 继续免费阅读

下载本文档

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

文档简介

1、ARM处理器开发详解处理器开发详解第第3章章 ARM的指令系统的指令系统2 本章主要内容本章主要内容:uARM处理器的寻址方式处理器的寻址方式uARM处理器的指令集处理器的指令集ARM指令系统概述一、指令系统概念一、指令系统概念 指令:指令:是规定计算机进行某种操作的命令。是规定计算机进行某种操作的命令。 指令系统:指令系统:计算机能够执行的各种指令的集合。计算机能够执行的各种指令的集合。二、二、ARMARM指令的特点指令的特点所有指令都是所有指令都是3232位位的。的。大多数指令都在大多数指令都在单周期单周期内完成。内完成。所有指令都可以所有指令都可以条件条件执行。执行。ARMARM指令为指

2、令为load/storeload/store类型。类型。基本指令仅基本指令仅3636条条,分成六类。,分成六类。有有8 8种种寻址方式。寻址方式。指令集可以通过协处理器扩展。指令集可以通过协处理器扩展。3lARMARM指令是加载指令是加载/ /存储存储(Load/Store)(Load/Store)型:型:ARMARM指令集是指令集是load/storeload/store结构:对存储器中的数据结构:对存储器中的数据只能只能使用使用load/storeload/store指令进行存取指令进行存取,所有其他操作只能在寄存,所有其他操作只能在寄存器中完成,即只能对存放在寄存器的数据进行处理。器中完

3、成,即只能对存放在寄存器的数据进行处理。lARMARM指令可以分为六大类:指令可以分为六大类:数据处理指令、存储器访问数据处理指令、存储器访问Load/StoreLoad/Store指令、程序状指令、程序状态寄存器处理指令、跳转指令、协处理器指令、异常产生态寄存器处理指令、跳转指令、协处理器指令、异常产生指令。指令。lARMARM指令有指令有8 8种寻址方式:种寻址方式:立即寻址、寄存器寻址、寄存器移位寻址、寄存器间立即寻址、寄存器寻址、寄存器移位寻址、寄存器间接寻址、基址寻址、堆栈寻址接寻址、基址寻址、堆栈寻址 、块拷贝寻址、相对寻址。、块拷贝寻址、相对寻址。4简单的ARM程序;文件名:文件

4、名:TEST1.S ;功能:实现两个寄存器相加功能:实现两个寄存器相加 ;说明:使用说明:使用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 ;子程序返回子程序返回 EN

5、D ;文件结束文件结束 使用“;”进行注释标号顶格写实际代码段声明文件结束5主要内容主要内容一、立即寻址一、立即寻址二、寄存器寻址二、寄存器寻址三、寄存器移位寻址三、寄存器移位寻址四、寄存器间接寻址四、寄存器间接寻址五、基址寻址五、基址寻址六、堆栈寻址六、堆栈寻址 七、块拷贝寻址七、块拷贝寻址八、相对寻址八、相对寻址3.1 ARM处理器的寻址方式处理器的寻址方式寻址方式:寻址方式:处理器根据指令中给出的(地址)信息,寻找处理器根据指令中给出的(地址)信息,寻找操作数(物理地址)的方式。操作数(物理地址)的方式。67 这是一种特殊的寻址方式,这是一种特殊的寻址方式,操作数本身就在指令中操作数本身

6、就在指令中给出给出,只要取出指令也就取到了操作数。这个操作数被称为,只要取出指令也就取到了操作数。这个操作数被称为立即数,对应的寻址方式也就叫做立即寻址。立即数,对应的寻址方式也就叫做立即寻址。立即数的概念立即数的概念立即数是立即数是由一个由一个8bit常数移动常数移动4bit偶数位偶数位(0,2,4,26,28,30)得到的。得到的。下面列举了一些有效的立即数:下面列举了一些有效的立即数:0 xFF、0 x104、0 xFF0、0 xFF00、0 xFF000、0 xFF000000、0 xF000000F下面是一些无效的立即数:下面是一些无效的立即数:0 x101、0 x102、0 xFF

7、1、0 xFF04、0 xFF003、0 xFFFFFFFF、0 xF000001F1立即数寻址方式立即数寻址方式应用立即数的指令:应用立即数的指令:MOV R0,0 ;送送0到到R0ADD R3,R3,1 ;R3的值加的值加1CMP R7,1000 ;R7的值和的值和1000比较比较BIC R9,R8,0 xFF00 ;将将R8中中815位清零,位清零,结果保存在结果保存在R9中中在以上两条指令中,第二个源操作数即为立即数,要在以上两条指令中,第二个源操作数即为立即数,要求求以以“”为前缀为前缀,对于以十六进制表示的立即数,对于以十六进制表示的立即数,还要求在还要求在“”后加上后加上“0 x

8、”0 x”或或“&”&”89 寄存器寻址寄存器寻址就是就是利用寄存器中的数值作为操作数。利用寄存器中的数值作为操作数。这种寻址方式是各类处理器经常采用的一种方式,这种寻址方式是各类处理器经常采用的一种方式,也是一种执行效率较高的寻址方式也是一种执行效率较高的寻址方式。如:ADDADD R0, R1, R2 R0, R1, R2;该指令的执行效果是将寄存器;该指令的执行效果是将寄存器R1R1和和R2R2的内容相加,其结果存放在寄存器的内容相加,其结果存放在寄存器R0R0中中 MOV R1,R2MOV R1,R2 ; ;将将R2R2的值存入的值存入R1 R1 SUB R0,R1,R

9、2SUB R0,R1,R2 ; ;将将R1R1的值减去的值减去R2R2的值,结果保存到的值,结果保存到R0R02寄存器寻址方式寄存器寻址方式10 寄存器移位寻址寄存器移位寻址是是ARMARM指令集特有的寻址方式。当指令集特有的寻址方式。当第第2 2个操作数是寄存器移位方式时,第个操作数是寄存器移位方式时,第2 2个寄存器个寄存器操作数在与第操作数在与第1 1个操作数结合之前,选择进行移位个操作数结合之前,选择进行移位操作。操作。寄存器移位寻址指令举例如下:寄存器移位寻址指令举例如下:MOVMOVR0,R2,LSL #3R0,R2,LSL #3 ;R2;R2的值左移的值左移3 3位,结果放入位,

10、结果放入R0R0, ; ;即是即是R0=R2R0=R28 8 ANDSANDSR1,R1,R2,LSL R3 R1,R1,R2,LSL R3 ;R2;R2的值左移的值左移R3R3位,然后和位,然后和R1R1相相 ;“;“与与”操作,结果放入操作,结果放入R1R13寄存器移位寻址方式寄存器移位寻址方式移位操作(1)寄存器移位寻址的寄存器移位寻址的5 5种移位操作:种移位操作:lLSLLSL:逻辑左移(:逻辑左移(Logical Shift LeftLogical Shift Left)。寄存器中字的低端)。寄存器中字的低端空出的位补空出的位补0 0。 lLSRLSR:逻辑右移(:逻辑右移(Log

11、ical Shift RightLogical Shift Right)。寄存器中字的高)。寄存器中字的高端空出的位补端空出的位补0 0。 lASRASR:算术右移(:算术右移(Arithmetic Shift RightArithmetic Shift Right)。算术移位的对)。算术移位的对象是带符号数,在移位过程中必须保持操作数的符号不变。若象是带符号数,在移位过程中必须保持操作数的符号不变。若源操作数为正数,源操作数为正数,则字的高端空出的位补则字的高端空出的位补0 0。若源操作数为负。若源操作数为负数,则字的高端空出的位补数,则字的高端空出的位补1 1。 lRORROR:循环右移(

12、:循环右移(Rotate RightRotate Right)。从字的最低端移出的位填)。从字的最低端移出的位填入字的高端空出的位。入字的高端空出的位。 lRRXRRX:寄存器扩展循环右移(:寄存器扩展循环右移(Rotate Right Extended by 1 Rotate Right Extended by 1 placeplace)。操作数右移一位,空位(位)。操作数右移一位,空位(位3131)用原)用原C C标志填充。标志填充。 移位操作(2)移位操作移位操作u逻辑移位逻辑移位LSL:LSL:逻辑左移字的最小位空位清零逻辑左移字的最小位空位清零LSR:LSR:逻辑右移字的最大位空位清

13、零逻辑右移字的最大位空位清零. .12u算术移位算术移位uASR:ASR:算术右移算术右移uASL:ASL:算术左移算术左移移位操作(3)13寄存器间接寻址寄存器间接寻址就是就是以寄存器中的值作为操作数的地址,而操作以寄存器中的值作为操作数的地址,而操作数本身存放在存储器数本身存放在存储器中。中。例如例如ADDADD R0, R1, R2 R0, R1, R2 ; R0R1 ; R0R1R2R2LDRLDR R0, R1 R0, R1 ; R0R1 ; R0R1STRSTR R0, R1R0, R1 ; R1R0 ; R1R0在第一条指令中,以寄存器在第一条指令中,以寄存器R2R2的值作为操作

14、数的地址,在存的值作为操作数的地址,在存储器中取得一个操作数后与储器中取得一个操作数后与R1R1相加,结果存入寄存器相加,结果存入寄存器R0R0中。中。但是这种用法是否允许呢?但是这种用法是否允许呢?4寄存器间接寻址方式寄存器间接寻址方式14l基址寻址基址寻址就是将就是将寄存器(该寄存器一般称作基址寄存器)的内容寄存器(该寄存器一般称作基址寄存器)的内容与指令中给出的地址偏移量相加与指令中给出的地址偏移量相加,从而得到一个操作数的有效地,从而得到一个操作数的有效地址址l基址寻址方式常用于基址寻址方式常用于访问某基地址附近的单元访问某基地址附近的单元采用基址寻址方式的指令常见有以下几种形式采用基

15、址寻址方式的指令常见有以下几种形式LDRLDR R0, R1, R0, R1, 4 4 ; R0R1 ; R0R144LDRLDR R0, R1, R0, R1, 4!4! ; R0R1 ; R0R144、R1R1R1R14 4LDRLDR R0, R1, R0, R1, 4 4 ; R0R1 ; R0R1、R1R1R1R14 4LDRLDR R0, R1, R2 R0, R1, R2 ; R0R1 ; R0R1R2R25基址寻址方式基址寻址方式LDRLDR R0,R1, R0,R1,4!4! ; R0R1 ; R0R14 4、R1R1R1R14 4说明说明:“!”表示写回或更新基址寄存器表示

16、写回或更新基址寄存器15l相对寻址相对寻址以程序计数器以程序计数器PCPC的当前值为基地址的当前值为基地址,指令中的地址标指令中的地址标号作为偏移量号作为偏移量,将两者相加之后得到操作数的有效地址,将两者相加之后得到操作数的有效地址l以下程序段完成子程序的调用和返回,跳转指令以下程序段完成子程序的调用和返回,跳转指令BLBL采用了相采用了相对寻址方式对寻址方式 BLBL SORT SORT; ; 跳转到子程序处执行跳转到子程序处执行 SORTSORT MOVMOV PC, LR PC, LR; ; 从子程序返回从子程序返回 6相对寻址方式相对寻址方式167多寄存器寻址方式多寄存器寻址方式l采用

17、采用多寄存器寻址方式多寄存器寻址方式,一条指令可以完成多个寄存器值的传一条指令可以完成多个寄存器值的传送,最多送,最多传送传送1616个通用寄存器个通用寄存器的值的值l例如例如LDMLDMIAIA R0!, R1, R2, R3, R4 R0!, R1, R2, R3, R4 ; R1R0,R0=R0+4 ; R1R0,R0=R0+4 ; R2R0,R0=R0+4; R2R0,R0=R0+4 ; R3R0,R0=R0+4; R3R0,R0=R0+4 ; R4R0,R0=R0+4; R4R0,R0=R0+4l指令后缀指令后缀IAIA表示在每次执行操作后表示在每次执行操作后R0R0按字长度增加按字

18、长度增加l注意注意:在寄存器列表中在寄存器列表中同一寄存器仅能指定一次同一寄存器仅能指定一次;加载;加载/ /存存储操作按照储操作按照寄存器固定次序寄存器固定次序进行,所以寄存器排列先后关系进行,所以寄存器排列先后关系随意随意LDMLDMIAIA R1, R0, R2, R5 R1, R0, R2, R5 ; ; R0R1,R2R1+4,R5R1+8R0R1,R2R1+4,R5R1+817寻址模式寻址模式描述描述起始地址起始地址结束地址结束地址Rn!Rn!IAIA执行后增加执行后增加RnRnRn+4Rn+4* *N-4N-4Rn+4Rn+4* *N NIBIB执行前增加执行前增加Rn+4Rn+

19、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的值是否随着传送而改变的值是否随着传送而改变多寄存器传送指令的寻址模式18例例1:要求:保存要求:保存r1r3到内存地址到内存地址0 x90000 x900c,并且更新基址寄存,并且更新基址寄存器器r4PRE: r1=0 x00000001, r2=0 x00000002, r3=0 x00000003, r4=0

20、 x9000执行操作:执行操作: STMIA r4!, r1, r2, r3(执行后增加执行后增加)POST: mem320 x9000=0 x00000001 mem320 x9004=0 x00000002 mem320 x9008=0 x00000003 r4=0 x900c19例2:将存储器中的连续数据装载到寄存器PRE mem320 x80018=0 x03, mem320 x80014=0 x02, mem320 x80010=0 x01, r0=0 x00080010, r1=0 x00000000, r2=0 x00000000, r3=0 x00000000执行指令:执行指令

21、: LDMIA r0!, r1-r3POST 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 x8001020l堆栈堆栈按先进后出(按先进后出(FILOFIL

22、O)的方式工作)的方式工作l根据堆栈的生成方式根据堆栈的生成方式l堆栈指针递增计数堆栈指针递增计数递增堆栈递增堆栈l堆栈指针递减计数堆栈指针递减计数递减堆栈递减堆栈8堆栈寻址方式堆栈寻址方式21栈底栈顶栈区SP堆栈存储区栈顶栈底栈区SP向下增长向上增长0 x123456780 x12345678堆栈压栈堆栈压栈22l根据堆栈指针指向来分根据堆栈指针指向来分l堆栈指针指向最后一个压入堆栈的数据时,称为堆栈指针指向最后一个压入堆栈的数据时,称为满堆栈满堆栈l堆栈指针指向下一个将要放入数据的空位置时,称为堆栈指针指向下一个将要放入数据的空位置时,称为空空堆栈堆栈栈顶SP栈顶SP栈底空堆栈栈底满堆栈0

23、 x123456780 x12345678栈顶SP0 x12345678栈顶SP压栈压栈23lARMARM微处理器支持这四种类型的堆栈工作方式微处理器支持这四种类型的堆栈工作方式l满递增堆栈满递增堆栈:堆栈指针指向最后压入的数据,且由低地址向堆栈指针指向最后压入的数据,且由低地址向高地址生成高地址生成LDMFALDMFA, , STMSTMFAFA l满递减堆栈满递减堆栈:堆栈指针指向最后压入的数据,且由高地址向堆栈指针指向最后压入的数据,且由高地址向低地址生成低地址生成LDMLDMFDFD, , STMSTMFDFD l空递增堆栈空递增堆栈:堆栈指针指向下一个将要放入数据的空位置,堆栈指针指

24、向下一个将要放入数据的空位置,且由低地址向高地址生成且由低地址向高地址生成LDMLDMEAEA, , STMSTMEAEA l空递减堆栈空递减堆栈:堆栈指针指向下一个将要放入数据的空位置,堆栈指针指向下一个将要放入数据的空位置,且由高地址向低地址生成且由高地址向低地址生成LDMLDMEDED, , STMSTMEDED STMFDSTMFD SP!, R0-R7, LR SP!, R0-R7, LR LRLR最先进栈,最先进栈,R0R0最后最后LDMFDLDMFD SP!, R0-R7, PC SP!, R0-R7, PC R0R0最先出栈,最先出栈,PCPC最后最后24例:把寄存器内容放入堆

25、栈,更新SP0 x800180 x000000010 x800140 x000000020 x80010Empty0 x8000cEmpty0 x800180 x000000010 x800140 x000000020 x800100 x000000030 x8000c0 x00000002PRE 地址地址 数据数据POST 地址地址 数据数据SPSPPRE : r1=0 x00000002, r4=0 x00000003, sp=0 x00080014执行指令:执行指令: STMFD sp!, r1,r425POST: r1=0 x00000002, r4=0 x00000003, sp=0

26、 x0008000c寻址方式习题寻址方式习题1.下列指令的作用和采用了哪种寻址方式:下列指令的作用和采用了哪种寻址方式:MOV R0, #0 x04MOV R0, R1MOV R0,R1, LSL#4LDR R0, R1LDR R0,R1,#0 x04LDR R0,R1,#0 x0426LDMIA R0,R1R3STMFD SP!,R1R3BL Loop27选择题选择题1:下列哪条指令属于寄存器寻址?:下列哪条指令属于寄存器寻址?A、MOV R1 ,#0 x198 B、LDR R0 , R1 , #4 C、MOV R3 , R0 D、MOV R0 , R2 ,#428l数据处理指令数据处理指令

27、l存储器访问存储器访问Load/StoreLoad/Store指令指令l程序状态寄存器处理指令程序状态寄存器处理指令l跳转指令跳转指令l协处理器指令协处理器指令l异常产生指令异常产生指令3.2 ARM处理器的指令集处理器的指令集2932位的ARM指令语法格式如下: s , , 各个部分解释如下: opcode:指令助记符,如:指令助记符,如mov cond: 条件码助记符,默认是条件码助记符,默认是al(无条件执行)(无条件执行) s: 指令的执行是否影响指令的执行是否影响CPSR(当前程序状态寄存器当前程序状态寄存器)的值的值 rd: 目标寄存器目标寄存器 rn: 包含第一个操作数的包含第一

28、个操作数的目标寄存器目标寄存器 opcode2: 第二操作数,又称为第二操作数,又称为shifter_operandARM指令的编码格式介绍30ARMARM指令典型的编码格式为:指令典型的编码格式为:每条每条ARMARM指令占有指令占有4 4个个字节,其指令长度为字节,其指令长度为3232位。位。指令结构:指令结构: 例:例:ADDS R2,R1,#1 SUBNES R2,R1,#0 x20 LDR R0,R1CondOpcodeSRnRdOperand201112151619202124252728317831指令的条件码指令的条件码 S , , 所有的所有的ARMARM指令都可以条件执行指

29、令都可以条件执行,而,而ThumbThumb指令只有指令只有B B(跳转)指令具有条件执行(跳转)指令具有条件执行 功能。如果指令不标明条件代功能。如果指令不标明条件代码,将默认为无条件(码,将默认为无条件(ALAL)执行。)执行。 不符合条件的代码依然占用一个时钟周期(相当于一不符合条件的代码依然占用一个时钟周期(相当于一个个NOPNOP指令)。指令)。条件码的书写方法:条件码的书写方法:条件码的位置在指令助记符的后面条件码的位置在指令助记符的后面(因此也称为条件后缀)。(因此也称为条件后缀)。例如:例如: MOVMOVEQEQ R0, R1R0, R132条件码条件码助记符助记符含含 义义

30、标标 志志00000000EQEQ相等相等Z=1Z=100010001NENE不相等不相等Z=0Z=000100010CS/HSCS/HS无符号数大于或等于无符号数大于或等于C=1C=100110011CC/LOCC/LO无符号数小于无符号数小于C=0C=001000100MIMI负数负数N=1N=101010101PIPI非负数非负数N=0N=001100110VSVS溢出溢出V=1V=101110111VCVC没有溢出没有溢出V=0V=010001000HIHI无符号数大于无符号数大于C=1C=1且且Z=0Z=010011001LSLS无符号数小于或等于无符号数小于或等于C=0C=0或或Z

31、=1Z=110101010GEGE有符号数大于或等于有符号数大于或等于N=VN=V10111011LTLT有符号数小于有符号数小于N!=VN!=V11001100GTGT有符号数大于有符号数大于Z=0Z=0且且N=VN=V11011101LELE有符号数小于或等于有符号数小于或等于Z=1Z=1或或N!=VN!=V11101110ALAL无条件执行无条件执行任意任意11111111保留保留v5v5以下版本总执行以下版本总执行,v5,v5及以上版本有用及以上版本有用指令的条件码表指令的条件码表33ARMARM指令可以通过添加适当的条件码后缀来达到条件执行的指令可以通过添加适当的条件码后缀来达到条件

32、执行的目的。目的。这样可以提高代码密度,减少分支跳转指令数目,提高性这样可以提高代码密度,减少分支跳转指令数目,提高性能。能。C C代码:代码:If(a b)a+;Elseb+;对应的汇编代码:对应的汇编代码:CMPR0,R1 ;R0与与R1比较比较ADDHI R0,R0,#1 ;若若R0R1,则,则R0=R0+1ADDLS R1,R1,#1 ;若若R011,则则R1=R1+1例例1:34例例2 2: CMP r3,#0 CMP r3,#0CMP r3,#0 CMP r3,#0 BEQBEQ skipskip ADDNEADDNE r0,r1,r2 r0,r1,r2 ADD r0,r1,r2

33、ADD r0,r1,r2 skipskip默认情况下,数据处理指令不影响默认情况下,数据处理指令不影响程序状态寄存器程序状态寄存器的条件码的条件码标志位,但可以选择通过添加标志位,但可以选择通过添加“S S”来影响标志位。来影响标志位。 CMPCMP不需不需要增加要增加 “S S”就可改变相应的标志位。就可改变相应的标志位。looploop SUBSSUBS r1,r1,#1 r1,r1,#1 BNEBNE loop loop如果如果 Z Z标志清零则跳转标志清零则跳转R1R1减减1 1,并设置标志位,并设置标志位 3536 数据操作指令是数据操作指令是指对存放在寄存器中的数据指对存放在寄存器

34、中的数据进行操作的指令进行操作的指令。数据处理指令可分为:数据处理指令可分为:u数据传送指令数据传送指令进行数据的传输进行数据的传输:MOV:MOV、MVNMVNu算术逻辑运算指令算术逻辑运算指令完成常用的算术与逻辑的运算,同时完成常用的算术与逻辑的运算,同时更新更新CPSRCPSR中的相应条件中的相应条件标志位标志位u比较指令比较指令不保存运算结果,只不保存运算结果,只更新更新CPSRCPSR中相应的条件标志中相应的条件标志3.2.1 数据操作指令数据操作指令37助记符说明操作条件码位置MOV Rd,operand2MOV Rd,operand2数据传送数据传送RdRdoperand2 op

35、erand2 MOVcondSMOVcondSMVN Rd,operand2MVN Rd,operand2数据非传送数据非传送RdRd(operand2)(operand2)MVNcondSMVNcondSARMARM数据处理指令数据处理指令数据传送数据传送3839 MOV指令多用于指令多用于设置初始值设置初始值或者或者在寄存器间传送数据在寄存器间传送数据(1)指令的语法格式:)指令的语法格式:MOVS ,(2)指令举例)指令举例MOVMOV R0, R0 R0, R0; R0 = R0 ; R0 = R0 NOP NOP 指令指令MOV R0, R0, LSL#3MOV R0, R0, LS

36、L#3; R0 = R0 ; R0 = R0 * * 8 8MOV PC, R14MOV PC, R14 ; ; 退出到调用者,用于普退出到调用者,用于普通函数返回,通函数返回,PCPC即是即是R15R15MOVS PC, R14MOVS PC, R14 ; ; 退出到调用者并恢复标退出到调用者并恢复标志位,用于异常函数返回志位,用于异常函数返回MOV指令指令(3)指令的使用)指令的使用 将数据从一个寄存器传送到另一个寄存器将数据从一个寄存器传送到另一个寄存器 将一个将一个常数值常数值传送到寄存器中。传送到寄存器中。 实现无算术和逻辑运算的实现无算术和逻辑运算的单纯移位操作单纯移位操作,操作数

37、乘以,操作数乘以2 2n n可以用左移可以用左移n n位来实现。位来实现。 当当PCPC(R15R15)用作目的寄存器时,可以实现程序跳转。)用作目的寄存器时,可以实现程序跳转。如如“MOV PCMOV PC,LR”LR”。 当当PCPC作为目标寄存器且指令中作为目标寄存器且指令中S S位被设置时,指令在位被设置时,指令在执行跳转操作的同时,将当前处理器模式的执行跳转操作的同时,将当前处理器模式的SPSRSPSR寄存器寄存器的内容复制到的内容复制到CPSRCPSR中。这种指令中。这种指令“MOVS PC LR”MOVS PC LR”可以实可以实现从某些异常中断中返回。现从某些异常中断中返回。4

38、041 MVN MVN指令是将第二操作数按位取反后传送到目标寄存指令是将第二操作数按位取反后传送到目标寄存器,多用于向寄存器传送一个负数或生成位掩码。器,多用于向寄存器传送一个负数或生成位掩码。(1)指令的语法格式:)指令的语法格式:MNVS ,(2)指令举例)指令举例 MVN R0, #4 ; R0 = -5 MVN R1,#0 xFF ;R1=0 xFFFFFF00 MVN R1,R2 ;将将R2取反,结果存到取反,结果存到R1 这是逻辑非操作而不是算术操作,这个取反的值这是逻辑非操作而不是算术操作,这个取反的值加加1 1才是它的取负的值。才是它的取负的值。MVN指令指令(3)指令的使用)

39、指令的使用 向寄存器中传送一个向寄存器中传送一个负数负数,或者说是一个更大范围的,或者说是一个更大范围的立即数立即数。 生成生成位掩码位掩码(Bit MaskBit Mask)。)。 求一个数的求一个数的反码反码。42助记符助记符说明说明操作操作条件码位置条件码位置ADD Rd, Rn, operand2ADD Rd, Rn, operand2加法运算指令加法运算指令RdRdRn+operand2Rn+operand2ADDcondSADDcondSSUB Rd, Rn, operand2SUB Rd, Rn, operand2减法运算指令减法运算指令RdRdRn-operand2Rn-ope

40、rand2SUBcondSSUBcondSRSB Rd, Rn, operand2RSB Rd, Rn, operand2逆向减法指令逆向减法指令RdRdoperand2-Rnoperand2-RnRSBcondSRSBcondSADC Rd, Rn, operand2ADC Rd, Rn, operand2带进位加法带进位加法RdRdRn+operand2+CarryRn+operand2+CarryADCcondSADCcondSSBC Rd, Rn, operand2SBC Rd, Rn, operand2带进位减法指令带进位减法指令RdRdRn-operand2-Rn-operand2

41、-(NOT)Carry(NOT)CarrySBCcondSSBCcondSRSC Rd, Rn, operand2RSC Rd, Rn, operand2带进位逆向减法带进位逆向减法指令指令RdRdoperand2-Rn-operand2-Rn-(NOT)Carry(NOT)CarryRSCcondSRSCcondSARMARM数据处理指令数据处理指令算术运算算术运算4344 ADDADD指令指令将寄存器将寄存器shifter_operandshifter_operand的值加上的值加上RnRn表示的数值表示的数值,并将结果保存到目标寄存器,并将结果保存到目标寄存器RdRd中,并根据指令的执行

42、结中,并根据指令的执行结果设置果设置CPSRCPSR中相应的标志位。中相应的标志位。(1 1)指令的语法格式)指令的语法格式ADDS ,ADDS ,(2 2)ADDADD指令举例指令举例ADD R0, R1, R2ADD R0, R1, R2; R0 = R1 + R2; R0 = R1 + R2ADD R0, R1, #256ADD R0, R1, #256; R0 = R1 + 256; R0 = R1 + 256ADD R0, R2, R3,LSL#1ADD R0, R2, R3,LSL#1; R0 = R2 + (R3 1); R0 = R2 + (R3 1)ADD指令指令45 SUB

43、(Subtract)指令)指令从寄存器从寄存器Rn中减去中减去shifter_operand表示的数值表示的数值,并将结果保存到目标寄存,并将结果保存到目标寄存器器Rd中,并根据指令的执行结果设置中,并根据指令的执行结果设置CPSR中相应的标中相应的标志位。志位。(1)指令的语法格式)指令的语法格式SUBS ,(2)SUB指令举例指令举例SUB R0, R1, R2 ; R0 = R1 SUB R0, R1, R2 ; R0 = R1 R2 R2SUBS R0, R1, #256 ; R0 = R1 SUBS R0, R1, #256 ; R0 = R1 256 256,影响标志位,影响标志位

44、SUB R0, R2, R3,LSL#1 ; R0 = R2SUB R0, R2, R3,LSL#1 ; R0 = R2 (R31) (R31) SUB指令指令46 RSB(Reverse Subtract)指令)指令从寄存器从寄存器shifter_operand中减去中减去Rn表示的数值表示的数值,并将结果保存到目标寄存器,并将结果保存到目标寄存器Rd中中,并根据指令的执行结果设置,并根据指令的执行结果设置CPSR中相应的标志位。中相应的标志位。(1)指令的语法格式)指令的语法格式RSBS ,(2)RSB指令举例指令举例 RSB R3,R1,#0 xFF00 RSB R3,R1,#0 xFF

45、00 ;R3=0 xFF00-R1 ;R3=0 xFF00-R1 RSBS R1,R2,R2,LSL#2RSBS R1,R2,R2,LSL#2 ;R1=(R22)-R2=R2 ;R1=(R22)-R2=R23 3 RSB指令指令47 ADC指令指令将寄存器将寄存器shifter_operand的值加上的值加上Rn表示的数表示的数值,再加上值,再加上CPSR中的中的C条件标志位的值条件标志位的值,将结果保存到目,将结果保存到目标寄存器标寄存器Rd中,并根据指令的执行结果设置中,并根据指令的执行结果设置CPSR中相应的中相应的标志位。标志位。(1)指令的语法格式)指令的语法格式ADCS ,ADC指

46、令指令(2)ADC指令举例指令举例:例:例:求两个求两个128位数相加。位数相加。假设假设128位结果:寄存器位结果:寄存器R0,R1,R2,R3第一个第一个128位数:寄存器位数:寄存器R4,R5,R6,R7第二个第二个128位数:寄存器位数:寄存器R8,R9,R10,R11ADDS R0,R4,R8ADCS R1,R5,R9ADCS R2,R6,R10ADCS R3,R7,R1148练习:练习:使用使用ADCADC实现实现6464位加法,一个数存于位加法,一个数存于R1,R0R1,R0中;一个数存中;一个数存于于R3,R2R3,R2中,结果存于中,结果存于R1R1、R0R0中中 ADDS

47、R0,R0,R2ADDS R0,R0,R2 ;R0;R0等于低等于低3232位相加,并影响标位相加,并影响标志位志位 ADC R1,R1,R3ADC R1,R1,R3;R1;R1等于高等于高3232位相加,并加上低位相加,并加上低位进位位进位4950 SBC(Subtract with Carry)指令用于执行操作数大于)指令用于执行操作数大于32位时的减法操作。该指令从寄存器位时的减法操作。该指令从寄存器Rn中减去中减去shifter_operand表示的数值,再表示的数值,再减去寄存器减去寄存器CPSR中中C条件条件标志位的反码标志位的反码NOT(Carry flag),并将结果保存到),

48、并将结果保存到目标寄存器目标寄存器Rd中,并根据指令的执行结果设置中,并根据指令的执行结果设置CPSR中相中相应的标志位。应的标志位。(1)指令的语法格式)指令的语法格式SBCS ,(2)SBC指令举例:指令举例:下面的程序使用下面的程序使用SBCSBC实现实现6464位减法,(位减法,(R1R1,R0R0)(R3R3,R2R2),结果存放到(,结果存放到(R1R1,R0R0)SUBS R0,R0,R2SUBS R0,R0,R2SBCS R1,R1,R3SBCS R1,R1,R3SBC指令指令51 RSC(Reverse Subtract with Carry)指)指从寄存器从寄存器shift

49、er_operand中减去中减去Rn表示的数值,再减去寄存器表示的数值,再减去寄存器CPSR中中C条件标志位的反码条件标志位的反码NOT(Carry Flag),),并将结果并将结果保存到目标寄存器保存到目标寄存器Rd中,并根据指令的执行结果设置中,并根据指令的执行结果设置CPSR中相应的标志位。中相应的标志位。(1)指令的语法格式)指令的语法格式RSCS ,(2)RSC指令举例指令举例下面程序使用下面程序使用RSCRSC指令实现求指令实现求6464位数值的负数。位数值的负数。RSBS R2,R0,RSBS R2,R0,0 0RSC R3,R1,RSC R3,R1,0 0RSC指令指令助记符助

50、记符说明说明操作操作条件码位置条件码位置AND Rd, Rn, operand2AND Rd, Rn, operand2逻辑与操作指令逻辑与操作指令RdRdRn & operand2Rn & operand2ANDcondSANDcondSORR Rd, Rn, operand2ORR Rd, Rn, operand2逻辑或操作指令逻辑或操作指令RdRdRn | operand2Rn | operand2ORRcondSORRcondSEOR Rd, Rn, operand2EOR Rd, Rn, operand2逻辑异或操作指逻辑异或操作指令令RdRdRn operand2R

51、n operand2EORcondSEORcondSBIC Rd, Rn, operand2BIC Rd, Rn, operand2位清除指令位清除指令RdRdRn & (operand2)Rn & (operand2)BICcondSBICcondSARM数据处理指令数据处理指令逻辑运算指令逻辑运算指令5253 AND指令将指令将shifter_operand表示的数值与寄存器表示的数值与寄存器Rn的值的值按位(按位(bitwise)做逻辑与操作)做逻辑与操作,并将结果保存到,并将结果保存到目标寄存器目标寄存器Rd中,同时根据操作的结果更新中,同时根据操作的结果更新CPSR寄

52、寄存器。存器。(1)指令的语法格式:)指令的语法格式:ANDS ,(2)指令举例)指令举例AND R0, R0, #3 ;AND R0, R0, #3 ;保留保留R0R0中的中的0 0位和位和1 1位,丢弃其余的位位,丢弃其余的位AND R2,R1,R3 ; R2AND R2,R1,R3 ; R2 = = R1&R3 R1&R3 ANDS R0,R0,#0 x01 ; R0ANDS R0,R0,#0 x01 ; R0 = = R0&0 x01R0&0 x01,取出最低位数据,取出最低位数据AND指令指令54 ORR(Logical OR)为)为逻辑或逻辑或操作指

53、令,它将第操作指令,它将第2个源个源操作数操作数shifter_operand的值与寄存器的值与寄存器Rn的值按位做的值按位做“逻辑逻辑或或”操作,结果保存到操作,结果保存到Rd中。中。(1)指令的语法格式)指令的语法格式ORRS ,(2)ORR指令举例指令举例ORR R0, R0, #3ORR R0, R0, #3 ; ;设置设置R0R0中位中位0 0和和1 1ORR R0,R0,#0 x0FORR R0,R0,#0 x0F ; ;将将R0R0的低的低4 4位置位置1 1MOV R1,R2,LSRMOV R1,R2,LSR #2 #24 4ORR R3,R1,R3,LSLORR R3,R1,

54、R3,LSL8 8 ; ; 将将R2R2的高的高8 8位数据移入到位数据移入到R3R3的低的低8 8位中位中ORR指令指令55 EOR(Exclusive OR)指令将寄存器)指令将寄存器Rn中的值和中的值和shifter_operand的值执行的值执行按位按位“异或异或”操作操作,并将执行结果,并将执行结果存储到目的寄存器存储到目的寄存器Rd中,同时根据指令的执行结果更新中,同时根据指令的执行结果更新CPSR中相应的条件标志位。中相应的条件标志位。(1)指令的语法格式:)指令的语法格式:EORS ,(2)指令举例)指令举例 EOR R2,R1,R0 ; R2 EOR R2,R1,R0 ; R

55、2 = = R1R0R1R0 EORS R0,R5, EORS R0,R5,0 x01 ;0 x01 ;将将R5R5和和0 x010 x01进行逻辑异或,结果保进行逻辑异或,结果保存到存到R0R0,并根据执行结果设置标志位,并根据执行结果设置标志位 EOR R1,R1,#0 x0F EOR R1,R1,#0 x0F ; ;将将R1R1的低的低4 4位取反位取反EOR指令指令56 BIC(Bit Clear)位清零指令,将寄存器)位清零指令,将寄存器Rn的值与第的值与第2个个源操作数源操作数shifter_operand的值的反码的值的反码按位做按位做“逻辑与逻辑与”操作,结果保存到操作,结果保

56、存到Rd中。中。(1)指令的语法格式)指令的语法格式BICS ,(2)BIC指令举例指令举例BIC R0, R0, #0 x1011BIC R0, R0, #0 x1011 ; ;清除清除R0R0中的位中的位0 0、1 1和和3 3,保持其余的不变,保持其余的不变BIC R1,R1,#0 x0FBIC R1,R1,#0 x0F ; ;将将R1R1的低的低4 4位清零,其它位不变位清零,其它位不变BIC R1,R2,R3BIC R1,R2,R3 ; ;将将R3R3的反码和的反码和R2R2逻辑与,结果保存到逻辑与,结果保存到R1R1中中BIC位清零指令位清零指令助记符助记符说明说明操作操作条件码位

57、置条件码位置CMP Rn, operand2CMP Rn, operand2比较指令比较指令标志标志N N、Z Z、C C、V VRn-Rn-operand2operand2CMPcondCMPcondCMN Rn, operand2CMN Rn, operand2负数比较指令负数比较指令标 志标 志 N N 、 Z Z 、 C C 、V VRn+operand2Rn+operand2CMNcondCMNcondTST Rn, operand2TST Rn, operand2位测试指令位测试指令标志标志N N、Z Z、C C、V VRn & Rn & operand2opera

58、nd2TSTcondTSTcondTEQ Rn, operand2TEQ Rn, operand2相等测试指令相等测试指令标志标志N N、Z Z、C C、V VRn Rn operand2operand2TEQcondTEQcondARM数据处理指令数据处理指令比较指令比较指令5758 CMP(Compare)指令使用)指令使用寄存器寄存器Rn的值减去的值减去operand2的值,根据操作的结果更新的值,根据操作的结果更新CPSR中相应的条件标志位中相应的条件标志位,以便后面的指令根据相应的条件标志来判断是否执行。以便后面的指令根据相应的条件标志来判断是否执行。(1)指令的语法格式)指令的语法

59、格式CMP ,(2)CMP指令举例指令举例CMP R1,#10 ;CMP R1,#10 ;比较比较R1R1和立即数和立即数1010并设置相关的标并设置相关的标志位志位CMP R1,R2 ;CMP R1,R2 ;比较寄存器比较寄存器R1R1和和R2R2中的值并设置相中的值并设置相关的标志位关的标志位 CMP CMP指令与指令与SUBSSUBS指令的区别在于指令的区别在于CMPCMP指令不保存运算结指令不保存运算结果,在进行两个数据大小判断时,常用果,在进行两个数据大小判断时,常用CMPCMP指令及相应的条指令及相应的条件码来进行操作件码来进行操作! !CMP指令指令59 CMN(Compare

60、Negative)指令)指令使用寄存器使用寄存器Rn的值减去的值减去operand2的负数值(加上的负数值(加上operand2),),根据操作的结果更新根据操作的结果更新CPSR中相应的条件标志位,以便后面的指令根据相应的条件中相应的条件标志位,以便后面的指令根据相应的条件标志来判断是否执行。标志来判断是否执行。(1)指令的语法格式)指令的语法格式CMN ,(2)CMN指令举例指令举例CMP CMP Rn,Rn,0 0 ; ;第第1 1条指令使标志位条指令使标志位C C值为值为1 1CMN Rn,CMN Rn,0 0 ; ;第第2 2条指令使标志位条指令使标志位C C值为值为0 0CMN R0,CMN R0,1 1 ; ; 判断判断R0R0是否为是否为1 1的补码,若是,则的补

温馨提示

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

最新文档

评论

0/150

提交评论