第3章ARM指令集(2016年2月22日)_第1页
第3章ARM指令集(2016年2月22日)_第2页
第3章ARM指令集(2016年2月22日)_第3页
第3章ARM指令集(2016年2月22日)_第4页
第3章ARM指令集(2016年2月22日)_第5页
已阅读5页,还剩124页未读 继续免费阅读

下载本文档

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

文档简介

1、共129页1 1第第3 3章章 ARMARM指令集指令集 4 4学时学时本章主要内容本章主要内容1 1、ARMARM指令集简介;指令集简介;2 2、ARMARM指令的寻址方式;指令的寻址方式;3 3、ARMARM指令集。指令集。共129页2 2本章教学要求本章教学要求掌握:掌握:ARMARM指令的寻址方式指令的寻址方式,ARMARM指令集指令集。共129页3 33.1 ARM3.1 ARM指令集简介指令集简介 ARMARM微处理器微处理器 的指令集是的指令集是 加载加载/ /存储存储型型的,具有效率高、代码密度低的特点,的,具有效率高、代码密度低的特点,它的它的 3232位位 编码能够包含的信

2、息量很大,编码能够包含的信息量很大,每一条语句完成的功能很多。每一条语句完成的功能很多。 在在 多寄存器多寄存器 操作指令中操作指令中 一次一次 最多最多可以完成可以完成 1616个个 寄存器的数据传送,而这寄存器的数据传送,而这样的操作要是样的操作要是 不在不在 多寄存器操作的指令多寄存器操作的指令中,要执行中,要执行 1616条条 语句才能实现。语句才能实现。共129页4 一个简单的一个简单的ARMARM汇编程序:汇编程序: AREA Example,CODE,READONLYAREA Example,CODE,READONLY;声明代码段;声明代码段ExampleExample ENTR

3、Y ENTRY ;标识程序入口;标识程序入口 CODE32 CODE32 ;声明;声明3232位位ARMARM指令指令START MOV R0,#0 START MOV R0,#0 ;设置参数;设置参数 MOV R1,#10 MOV R1,#10LOOP BL ADD_SUB LOOP BL ADD_SUB ;调用子程序;调用子程序ADD_SUBADD_SUB B LOOP B LOOPADD_SUBADD_SUB ADDS R0,R0,R1 ADDS R0,R0,R1 ;R0=R0+R1R0=R0+R1 MOV PC,LR MOV PC,LR ;子程序返回;子程序返回 END END ;文件

4、结束;文件结束共129页53.1.1 ARM3.1.1 ARM指令的分类与格式指令的分类与格式(1 1)ARMARM指令的分类指令的分类 ARMARM指令可以分为:指令可以分为:跳转指令、跳转指令、数据处理指令、数据处理指令、程序状态寄存器程序状态寄存器(PSRPSR)传输指令、)传输指令、Load/StoreLoad/Store指令指令、协处理器指令协处理器指令 和和 异常中断产生指令异常中断产生指令 六类六类。共129页6跳转指令跳转指令 跳转指令跳转指令用于用于控制控制程序的执行流程序的执行流程、指令的特权等级程、指令的特权等级和和在在ARMARM代码代码与与ThumbThumb代码代码

5、之间进行切换。之间进行切换。状态寄存器传输指令状态寄存器传输指令 用于用于控制控制在在存储器存储器和和寄存器寄存器之间之间的数据的数据传输传输、交换、交换、加载加载、存储。、存储。共129页7数据处理指令数据处理指令 用于操作片上的用于操作片上的ALUALU、桶型移位、桶型移位器、器、乘法器乘法器以完成在以完成在3131个个3232位位的通用的通用寄存器之间的寄存器之间的高速数据处理高速数据处理。ARMARM协处理器指令协处理器指令 ARMARM协处理器指令用于控制外部协处理器指令用于控制外部的的协处理器协处理器,这些指令已开发统一的,这些指令已开发统一的方式用于方式用于片外功能指令集片外功能

6、指令集。ARMARM支持支持1616个协处理器。个协处理器。共129页8异常中断产生指令异常中断产生指令 ARMARM有有 两条两条 异常中断产生指令,异常中断产生指令,分别为分别为软中断指令软中断指令SWI SWI 和和 断点中断断点中断指令指令BKPTBKPT。Load/StoreLoad/Store内存访问指令内存访问指令 LoadLoad指令指令用于从用于从内存内存中读取数据中读取数据放入放入寄存器寄存器中,中,StoreStore指令用于将指令用于将寄寄存器存器中的数据保存到中的数据保存到内存内存中。中。共129页9(1 1)ARMARM指令的格式指令的格式 ARMARM指令的格式如

7、下:指令的格式如下: s s , , , 指令格式举例:指令格式举例: LDR R3LDR R3,R6;R6;读取读取R6R6地址上的地址上的存储单元内容,执行条件存储单元内容,执行条件ALAL。 BEQ NEXTBEQ NEXT; ;跳转指令,执行条件跳转指令,执行条件EQEQ即相等时跳转到即相等时跳转到NEXTNEXT执行。执行。共129页10 ADDS R0ADDS R0,R1R1,#2#2; ;加法指令,加法指令,R0=R1+2R0=R1+2,影响,影响CPSRCPSR寄存器。寄存器。 SUBNES R0SUBNES R0,R1R1,#0X03#0X03; ;条件执条件执行减法运算(行

8、减法运算(NENE),),R0=R1-0X03R0=R1-0X03,影,影响响CPSRCPSR寄存器。寄存器。 在在ARMARM指令中,灵活地使用第二指令中,灵活地使用第二个操作数(个操作数(operand2operand2)能够提高代码)能够提高代码效率,第二个操作数的形式如下:效率,第二个操作数的形式如下:共129页11#immed_8r8#immed_8r8位常数表达式位常数表达式 但但 8 8位常数位常数 的使用是有限制的,的使用是有限制的,具体如下:具体如下:共129页12 合法常量:合法常量:0X3FC(0XFF2)0X3FC(0XFF2)、0 0、0XF0000000(0XF02

9、4)0XF0000000(0XF024)、200200(0XC80XC8)、0XF0000001(0X1F28)0XF0000001(0X1F28)。 常数表达式应用举例:常数表达式应用举例: 非法常量:非法常量:0X1FE0X1FE、511511、0XFFFF0XFFFF、0X10100X1010、0XF00000100XF0000010。 MOV R0MOV R0,#1#1 AND R1AND R1,R2R2,#0X0F#0X0F共129页13RmRm寄存器方式寄存器方式 LDR R0LDR R0,R2,#-1;R2,#-1;读取读取 R2R2 地地址上的存储器单元内容存入址上的存储器单元

10、内容存入 R0R0,且,且R2=R2-1R2=R2-1 寄存器方式举例:寄存器方式举例: SUB R1SUB R1,R1R1,R2 ;R1=R1-R2R2 ;R1=R1-R2 MOV PC,R0 ;MOV PC,R0 ;PC=R0PC=R0,程序跳转,程序跳转到指定地址到指定地址共129页14 LDR R0LDR R0,R1,-R2R1,-R2; ;读取读取R1R1地址地址上的存储器单元内容存入上的存储器单元内容存入R0R0,且,且R1=R1-R2R1=R1-R2Rm,shiftRm,shift寄存器移位方式寄存器移位方式ASR #nASR #n;算数右移;算数右移n n位(位(1 n 321

11、 n 32)LSL #nLSL #n;逻辑左移;逻辑左移n n位(位(0 n 310 n 31)LSR #nLSR #n;逻辑右移;逻辑右移n n位(位(1 n 321 n 32)ROR #nROR #n;循环右移;循环右移n n位(位(1 n 311 n 31)共129页15RRX RRX ;带扩展的循环右移;带扩展的循环右移1 1位位Type Rs Type Rs ;其中;其中TypeType为为ASRASR、LSLLSL、LSRLSR和和RORROR中的一种,中的一种,RsRs为偏移量寄存为偏移量寄存器,器,低低8 8位位有效。有效。 寄存器偏移方式应用举例:寄存器偏移方式应用举例:AD

12、D R2ADD R2,R2R2,R2R2,LSL #3;R2=R2 x 9LSL #3;R2=R2 x 9SUB R1SUB R1,R1R1,R3R3,LSL #2LSL #2;R1=R1-R3 ;R1=R1-R3 X 4X 4共129页163.1.2 ARM3.1.2 ARM指令的条件码域指令的条件码域 当处理器工作在当处理器工作在 ARMARM状态状态 时,时,几乎所有的指令均根据几乎所有的指令均根据 CPSRCPSR 中的中的 条件码的状态条件码的状态 和和 指令的条件域指令的条件域 有有条件执行。当指令的执行条件满足时,条件执行。当指令的执行条件满足时,指令被执行,指令被执行,否则指令

13、被忽略否则指令被忽略。 ARMARM指令的指令的 条件码条件码 和和 助记符助记符 如下表所示:如下表所示:共129页17条件码条件码条件码助记符条件码助记符CPSRCPSR中条件标志位值中条件标志位值含义含义00000000EQEQZ=1Z=1相等相等00010001NENEZ=0Z=0不相等不相等00100010CS/HSCS/HSC=1C=1无符号数大于或等于无符号数大于或等于00110011CC/LOCC/LOC=0C=0无符号数小于无符号数小于01000100MIMIN=1N=1负数负数01010101PLPLN=0N=0正数或零正数或零01100110VSVSV=1V=1溢出溢出0

14、1110111VCVCV=0V=0未溢出未溢出10001000HIHIC=1C=1且且Z=0Z=0无符号数大于无符号数大于10011001LSLSC=0C=0且且Z=1Z=1无符号数小于或等于无符号数小于或等于10101010GEGEN=1N=1且且V=1V=1或或N=0N=0且且V=0V=0带符号数大于或等于带符号数大于或等于10111011LTLTN=1N=1且且V=0V=0或或N=0N=0且且V=1V=1带符号数小于带符号数小于共129页1811001100GTGTZ=0Z=0且且N=VN=V带符号数大于带符号数大于11011101LELEZ=1Z=1或或N!=VN!=V带符号数小于或等

15、于带符号数小于或等于11101110ALAL无条件执行无条件执行11111111NVNVARMV3ARMV3之前之前该执行从不执行该执行从不执行3.1.3 ARM3.1.3 ARM指令可选后缀指令可选后缀(1 1)S S后缀后缀 使用使用 S S 后缀后,指令执行后程后缀后,指令执行后程序状态寄存器的条件标志位将序状态寄存器的条件标志位将刷新刷新。 有的指令不使用有的指令不使用 S S 后缀,也要后缀,也要刷新条件标志位,如刷新条件标志位,如CMPCMP、CMNCMN、TSTTST等指令。等指令。共129页19(2 2)!后缀)!后缀 在指令的地址表达式中含有在指令的地址表达式中含有 !后缀时

16、,指令执行后,基地址寄存器后缀时,指令执行后,基地址寄存器中的地址将会发生变化,变化的结果中的地址将会发生变化,变化的结果如下:如下:基址寄存器中的地址值(指令执行基址寄存器中的地址值(指令执行后)后)= =指令执行前的值指令执行前的值+ +地址偏移量;地址偏移量;如果指令不含如果指令不含 !后缀,则地址值后缀,则地址值不会发生变化。不会发生变化。共129页20LDMIA R3LDMIA R3,R0R0,#04;#04;R3=R0R3=R0+ +#04#04,没有使用!后缀,没有使用!后缀LDMIA R3LDMIA R3,R0R0,#04#04! ;R3=R0 ;R3=R0+ +#04#04,

17、使用,使用!后缀后缀R0=R0R0=R0+ +#0X4#0X4(3 3)B B后缀后缀 B B后缀的含义是:指令所涉及的数后缀的含义是:指令所涉及的数据是一个字节,据是一个字节,不是一个字或半字不是一个字或半字。共129页21LDR R4LDR R4,R0R0,#12#12;R4R4= =R0R0+ +1212,指令传送一个字指令传送一个字LDRB R4LDRB R4,R0R0,#12#12;R4R4= =R0R0+ +1212,指令传送一个字节指令传送一个字节(4 4)T T后缀后缀 指令在特权模式下对存储器的访指令在特权模式下对存储器的访问,将被存储器看作是用户模式的访问,将被存储器看作是

18、用户模式的访问。问。共129页22 T T 后缀使用受很多限制,一般只后缀使用受很多限制,一般只用在用在 字传送字传送 和和 无符号字节无符号字节 传送中。传送中。在用户模式下不可以选用,选用是没在用户模式下不可以选用,选用是没有意义的;不能与前变址一起使用。有意义的;不能与前变址一起使用。LDRT R4LDRT R4,R5R5;R4=R5TR4=R5T模式模式共129页233.2 ARM3.2 ARM指令的寻址方式指令的寻址方式 寻址方式:寻址方式:就是处理器根据指令就是处理器根据指令中给出的中给出的 地址信息地址信息 来寻找来寻找 物理地物理地址址 的方式。的方式。 ARMARM指令集支持

19、有:指令集支持有:立即数寻址、立即数寻址、寄存器寻址、寄存器寻址、寄存器间接寻址、寄存器间接寻址、基址基址变址寻址、变址寻址、堆栈寻址、堆栈寻址、多寄存器寻址多寄存器寻址等。等。共129页243.2.1 3.2.1 立即寻址立即寻址 立即寻址立即寻址 也叫也叫 立即数寻址立即数寻址。操。操作数本身就在指令中给出,只要取出作数本身就在指令中给出,只要取出了指令也就取到了操作数。了指令也就取到了操作数。MOV R1MOV R1,#0XFF#0XFF;R1=0XFFR1=0XFFSUBSUBS S R0 R0,R0R0,#2#2;R0=R0-2R0=R0-2,影响标,影响标志志共129页253.2.

20、2 3.2.2 寄存器寻址寄存器寻址 寄存器寻址方式把寄存器中的数寄存器寻址方式把寄存器中的数值作为操作数。值作为操作数。MOV R1MOV R1,R2 ;R1=R2R2 ;R1=R2ADD R0ADD R0,R1R1,R2 ;R0=R1+R2R2 ;R0=R1+R23.2.3 3.2.3 寄存器间接寻址寄存器间接寻址 以以寄存器寄存器中的值作为操作数的中的值作为操作数的地地址址,而,而操作数本身操作数本身放在放在存储器存储器中。中。共129页26MOV R1MOV R1,R2 ;R1=R2 R2 ;R1=R2 错误指令错误指令LDR R1LDR R1,R2 ;R1=R2R2 ;R1=R23.

21、2.4 3.2.4 基址变址寻址基址变址寻址 就是将寄存器(就是将寄存器(该寄存器一般称该寄存器一般称作基址寄存器作基址寄存器)的内容与指令中给出)的内容与指令中给出的地址偏移量相加,从而得到一个操的地址偏移量相加,从而得到一个操作数的有效地址。作数的有效地址。共129页27LDR R2LDR R2,R3R3,#0X0C ;R2#0X0C ;R2= =R3R3+ +0X0C0X0CSTR R1STR R1,R0R0,#-4#-4! ! ;R0 ;R0= =R0R0- -4 4, R1 R1= =R0R0LDR R1LDR R1,R0R0,R3R3,LSL#1LSL#1 ;R1 ;R1 = =

22、R0 R0 + + R3 R3 x x 2 2 指令可以在系统存储器合理的范指令可以在系统存储器合理的范围内基址加上不超过围内基址加上不超过 4KB4KB 的偏移量。的偏移量。 有前变址、自动变址、后变址。有前变址、自动变址、后变址。共129页28(1 1)前变址模式)前变址模式 LDR R1 LDR R1,R2R2,#0X5#0X5(2 2)自动变址模式)自动变址模式 LDR R0 LDR R0,R1R1,#4#4! ;R0R0= =R1R1+ +4,R14,R1= =R1R1+ +4 4(3 3)后变址模式)后变址模式 LDR R0 LDR R0,R1R1,#4#4 ; ;R0R0= =R

23、1,R1R1,R1= =R1R1+ +4 4共129页29 使用后变址寻址方式完成表复制使用后变址寻址方式完成表复制程序:程序:COPY ADR R1COPY ADR R1,NEXT1 ;R1NEXT1 ;R1指向指向NEXT1NEXT1 ADR R2ADR R2,NEXT2 ;R2NEXT2 ;R2指向指向NEXT2NEXT2LOOP LDR R0LOOP LDR R0,R1,#4 ;R1,#4 ;取一个数取一个数 STR R0STR R0,R2,#4 ;R2,#4 ;复制一个数复制一个数 NEXT1 ;NEXT1 ;源数据源数据 NEXT2 ;NEXT2 ;目标数据目标数据共129页303

24、.2.5 3.2.5 堆栈寻址堆栈寻址(1 1)FullFull栈:堆栈指针栈:堆栈指针指向栈顶元素指向栈顶元素;(2 2)EmptyEmpty栈:堆栈指针栈:堆栈指针指向第一个指向第一个可用元素可用元素;(3 3)递减栈:堆栈向内存)递减栈:堆栈向内存地址减少地址减少的的方向生成;方向生成; 根据不同的寻址方式,将堆栈分根据不同的寻址方式,将堆栈分为以下为以下 4 4 种:种:共129页3131(4 4)递增栈:堆栈向内存)递增栈:堆栈向内存地址增加地址增加的的方向生成。方向生成。 根据堆栈的不同种类,将其寻址根据堆栈的不同种类,将其寻址方式分为以下方式分为以下 4 4 种:种:(1 1)满

25、递减)满递减FDFD(Full DescendingFull Descending););(2 2)空递减)空递减EDED(Empty DescendingEmpty Descending););(3 3)满递增)满递增FAFA(Full AscendingFull Ascending););(4 4)空递增)空递增FAFA(Empty AscendingEmpty Ascending)。)。共129页3232 在在ARMARM指令中,堆栈寻址方式通过指令中,堆栈寻址方式通过 Load/StoreLoad/Store 指令来实现。指令来实现。STMFD SP!,R1-R7STMFD SP!,R

26、1-R7,LR ;LR ;将将R1R7R1R7、LRLR入栈,满递减堆栈入栈,满递减堆栈LDMFD SP!,R1-R7LDMFD SP!,R1-R7,LR ;LR ;数据出栈,数据出栈,放入放入R1R7R1R7、LRLR寄存器寄存器共129页333.2.6 3.2.6 多寄存器寻址多寄存器寻址LDMIA R1LDMIA R1,R2R2、R3R3、R4R4、R5R53.2.7 3.2.7 相对寻址相对寻址 相对寻址是基址的一种变通,与相对寻址是基址的一种变通,与基址寻址方式基本类似。基址寻址方式基本类似。相对寻址相对寻址以以程序计数器程序计数器 PCPC 的当前值为基址,指的当前值为基址,指令中

27、的令中的地址标号地址标号作为作为偏移量偏移量,将两者,将两者相加之后得到操作数的有效地址。相加之后得到操作数的有效地址。共129页34 BL NEXT ;BL NEXT ;跳转到子程序跳转到子程序NEXTNEXT 处执行处执行 NEXT NEXT MOV PC,LR ; MOV PC,LR ;从子程序返回从子程序返回共129页353.3 ARM3.3 ARM指令集指令集 ARMARM指令集指令集可以分为:可以分为:跳转指令、跳转指令、数据处理指令、数据处理指令、乘法指令与乘加指令、乘法指令与乘加指令、程序状态寄存器访问指令、程序状态寄存器访问指令、加载加载/ /存存储指令、储指令、批量数据加载

28、批量数据加载/ /存储指令、存储指令、数据交换指令、数据交换指令、移位指令、移位指令、协处理器协处理器指令、指令、异常产生指令等异常产生指令等 1010 大类。大类。共129页36363.3.1 3.3.1 跳转指令跳转指令 执行流程的改变迫使程序计数器执行流程的改变迫使程序计数器(PCPC)指向一个新的地址,指令集包)指向一个新的地址,指令集包含的跳转指令如下:含的跳转指令如下:助记符助记符说明说明操作操作B B跳转指令跳转指令PClabelPClabelBLBL带返回的连接跳转带返回的连接跳转PClabel(LRBLPClabel(LRBL后面的第一条指令后面的第一条指令) )BXBX跳转

29、并切换状态跳转并切换状态PCRm & 0 xFFFFFFFE,TRm&1PCRm & 0 xFFFFFFFE,TRm&1BLXBLX带返回的跳转并切换状态带返回的跳转并切换状态PClabel,T1;PClabel,T1;PCRm & 0 xFFFFFFFE,TRm&1;PCRm & 0 xFFFFFFFE,TRm&1;LRBLLRBL后面的第一条指令后面的第一条指令共129页3737 另一种实现指令跳转的方式是通另一种实现指令跳转的方式是通过过直接直接向向 PCPC 寄存器中写入寄存器中写入目标地址目标地址值值,实现在,实现在 4

30、GB4GB 地址空间中任意跳地址空间中任意跳转,这种跳转又称为转,这种跳转又称为 长跳转长跳转。 如果在长跳转指令之前使用如果在长跳转指令之前使用“MOV LRMOV LR”或或“MOV PCMOV PC”等指令,可等指令,可以保存将来返回的地址值,也就实现以保存将来返回的地址值,也就实现了在了在 4GB 4GB 的地址空间中的子程序调的地址空间中的子程序调用。用。共129页3838 B B 指令与指令与 BLBL 指令的编码格式如下:指令的编码格式如下:(1 1)跳转指令)跳转指令 B B 及带连接的跳转指令及带连接的跳转指令 BLBL共129页3939 从代码中看到从代码中看到 L L 控

31、制了控制了 PCPC 与与 LRLR 寄寄存器之间的开关。当存器之间的开关。当 L=0L=0 时,该开关断开,时,该开关断开,指令为指令为 B B 指令;当指令;当 L=1L=1 时,该开关接通,时,该开关接通,指令为指令为 BLBL 指令。指令。 B B 和和 BL BL 指令的助记符格式为:指令的助记符格式为:B B 和和BL BL 跳转指令跳转指令 也叫也叫 程序转移指令。程序转移指令。 可以跳转到一个绝对地址,如可以跳转到一个绝对地址,如: B 0X1234。共129页4040 B B 指令和指令和 BLBL 指令都是以一个指令都是以一个 2424 位有符号数位有符号数 signed_

32、immed_24signed_immed_24 间接提间接提供目标地址,真正的目标地址是由处供目标地址,真正的目标地址是由处理器根据这个有符号数和当前的理器根据这个有符号数和当前的 PCPC 值计算出来的。值计算出来的。 具体计算为:先将具体计算为:先将 signed_immed_24signed_immed_24 左移两位并扩展为左移两位并扩展为3232位位有符号数有符号数,然后再将这,然后再将这3232位位有符有符号数与号数与 PCPC 的当前值相加并回送的当前值相加并回送 PCPC。共129页4141 B forwardB forward ADD R1,R2,#4 ADD R1,R2,#

33、4 forward SUB R1,R2,#56forward SUB R1,R2,#56 B B 和和 BLBL 指令转移的偏移量为指令转移的偏移量为 2626 位,位,即转移的跨度为前后即转移的跨度为前后 32MB32MB 地址空间。地址空间。例:现已知寄存器例:现已知寄存器 R0R0 中存放了数据中存放了数据 a a ,寄存器,寄存器 R1R1 中存放了数据中存放了数据 b b ,编,编写一个程序段,求取写一个程序段,求取 a a 和和 b b 的的 最大最大公约数公约数 并将其存入寄存器并将其存入寄存器 R0R0 。共129页4242 gcb CMP R0,R1 gcb CMP R0,R

34、1 ;比较;比较a a和和b b的大小的大小 SUBGT R0,R0,R1 SUBGT R0,R0,R1 ;如果;如果ab,ab,则则a=a-ba=a-b SUBLT R1,R1,R0 SUBLT R1,R1,R0 ;如果;如果ab,ab,则则b=b-ab=b-a BNE gcb BNE gcb ;如果;如果a!=b,a!=b,则返回则返回gcbgcb MOV PC,LR MOV PC,LR ;如果;如果a=b,a=b,则返回主程序则返回主程序 B B 和和 BLBL 的区别在于:的区别在于:BLBL 在跳转之在跳转之前会把前会把 BLBL 指令的下一条指令地址(指令的下一条指令地址(断点断点

35、地址地址)保存到连接寄存器)保存到连接寄存器 LRLR(R14R14),因,因此程序在必要的时候可以通过将此程序在必要的时候可以通过将 LRLR 的内的内容进行计算并加载到容进行计算并加载到 PCPC 中使程序返回到中使程序返回到跳转点。跳转点。共129页4343 BLBL 指令经常被用来调用一个子程序。指令经常被用来调用一个子程序。共129页4444(2 2)带状态切换的跳转指令)带状态切换的跳转指令 BXBX BX BX 指令的格式为:指令的格式为: BX RmBX Rm BX BX 指令的目标地址由指令的目标地址由 Rm Rm 值与值与#0XFFFF FFFE #0XFFFF FFFE

36、进行进行 “与与” 运算得运算得到。根据到。根据 RmRm 最低位的值,目标地最低位的值,目标地址处的指令既可以是址处的指令既可以是 ARMARM 指令,也指令,也可以是可以是 ThumbThumb 指令。指令。共129页4545共129页4646(3 3)带连接和状态切换的连接跳转指令)带连接和状态切换的连接跳转指令 BLXBLX BLXBLX 指令的格式有两种:指令的格式有两种:BLX BLX 和和 BLX RmBLX Rm 以以 targettarget 方式提供目标地址的方式提供目标地址的 BLXBLX 指令的功能是:把程序跳转到指指令的功能是:把程序跳转到指令中所指定的目标地址继续执

37、行,并令中所指定的目标地址继续执行,并同时将处理器的工作状态从同时将处理器的工作状态从 ARMARM 状态状态切换到切换到 ThumbThumb 状态和将状态和将 PCPC 的当前内的当前内容保存到寄存器容保存到寄存器 LRLR 中。中。共129页4747 而以而以 RmRm 方式提供目标地址的方式提供目标地址的 BLXBLX 指令,除了跳转和将指令,除了跳转和将 PCPC 保存到保存到 LR LR 之外,也可进行状态切换,但其切之外,也可进行状态切换,但其切换的依据是换的依据是 Rm Rm 最低位的值。如果值最低位的值。如果值为为 0 0 ,则目标地址处应为,则目标地址处应为 ARMARM

38、指令,指令,如果值为如果值为 1 1 ,则目标地址处应为,则目标地址处应为 ThumbThumb 指令。指令。共129页483.3.2 3.3.2 数据处理指令数据处理指令 数据处理指令分为:数据处理指令分为:算术操作指令、算术操作指令、按位逻辑操作指令、按位逻辑操作指令、寄存器移位指令、寄存器移位指令、比较操作。比较操作。3.3.2.1 3.3.2.1 算数操作指令算数操作指令 包括:包括:加法指令加法指令ADDADD、减法指令、减法指令SUBSUB、逆向减法指令逆向减法指令RSBRSB、带进位加法指令、带进位加法指令ADCADC、带进位减法指令带进位减法指令SBCSBC、带借位逆向减法、带

39、借位逆向减法指令指令RSCRSC。共129页4949(1 1)ADDADD指令指令 加法指令加法指令ADDADD的格式为:的格式为:ADDS ,ADDS , ADDADD 指令把第指令把第 1 1 源操作数源操作数 RnRn 和和第第 2 2 源操作数源操作数 operand2operand2 相加后,将相加后,将结果存放到目的操作数结果存放到目的操作数 RdRd。 RnRn 为寄存器寻址;为寄存器寻址;operand2operand2 可可以为:以为:寄存器寻址、寄存器寻址、立即寻址、立即寻址、带移带移位预处理的寄存器寻址位预处理的寄存器寻址。共129页5050 ADDADD指令的执行如下:

40、指令的执行如下:共129页5151ADD R0,R1,R2 ;R0(R1)+(R2)ADD R0,R1,#255 ;R0 (R1)+ 255ADD R0,R2,R3,LSL#1 ;R0 (R2) +(R31)受影响的受影响的CPSRCPSR标志位标志位取值取值N N寄存器寄存器Rd31Rd31被复制到被复制到N NZ Z如果如果RdRd为为0 0,则,则Z=1Z=1,否则,否则Z=0Z=0C C运算结果有进位运算结果有进位C=1C=1,否则,否则C=0C=0V V运算结果有溢出运算结果有溢出V=1V=1,否则,否则V=0V=0改为OX256行吗?例子:例子:共129页5252(2 2)SUBS

41、UB指令指令 SUBSUB指令的格式为:指令的格式为:SUBS , , SUBS , , SUBSUB指令把指令把 RnRn 作为被减数,作为被减数,operand2operand2 作为减数进行减法运算,作为减数进行减法运算,然后将结果存放在然后将结果存放在 RdRd。 operand2 operand2 可以是:可以是:寄存器寻址寄存器寻址方式、方式、立即寻址方式、立即寻址方式、带移位预处带移位预处理的寄存器寻址方式理的寄存器寻址方式。共129页5353 SUB SUB 的执行流程为:的执行流程为:共129页5454SUB R0SUB R0,R1R1,R2 R2 ;R0R0(R1R1)-

42、-(R2R2)SUB R0SUB R0,R1R1,#256 #256 ;R0R0(R1R1)- 256- 256SUB R0SUB R0,R2R2,R3R3,LSL#1LSL#1;R0R0(R2R2)- - (R31R31)受影响的受影响的CPSRCPSR标志位标志位取值取值N N寄存器寄存器Rd31Rd31被复制到被复制到N NZ Z如果如果RdRd为为0 0则则Z=1,Z=1,否则否则Z=0Z=0C C运算结果有借位则运算结果有借位则C=0,C=0,否则否则C=1C=1V V运算结果有溢出则运算结果有溢出则V=1,V=1,否则否则V=0V=0例:例:共129页5555(3 3)ADCADC

43、指令指令 ADCADC指令的格式为:指令的格式为:ADCS ,ADCS , ADCADC 指令把指令把 三个数三个数 进行加法运算。进行加法运算。即把即把 RnRn 与与 operand2operand2 相加,然后再加相加,然后再加上上 CPRS CPRS 中的中的 C C 标志位的值,最后将标志位的值,最后将结果存放到目的操作数结果存放到目的操作数 RdRd 中。中。共129页5656 RnRn 为寄存器寻址;为寄存器寻址;operand2operand2 可以可以为:为:寄存器寻址寄存器寻址、立即数寻址、立即数寻址、带移位带移位预处理的寄存器寻址预处理的寄存器寻址。共129页5757 A

44、DCADC 通常用来实现字长大于通常用来实现字长大于 3232 位位的加法运算。的加法运算。 标志位的修改同标志位的修改同 ADDADD、只修改、只修改 N N、Z Z、C C、V V。 例:有例:有 两个两个128128位数位数,第一个数由,第一个数由高到低存放在寄存器高到低存放在寄存器 R7R4R7R4 中,第二个中,第二个数由高到低存放在寄存器数由高到低存放在寄存器 R11R8R11R8 中,中,请编写程序把两个数相加,运算结果由请编写程序把两个数相加,运算结果由高到低存放到寄存器高到低存放到寄存器 R3R0R3R0中中。共129页58ADDS R0ADDS R0,R4R4,R8 R8

45、;加低位字,;加低位字,不带进位不带进位ADCS R1ADCS R1,R5R5,R9 R9 ;加第二个字,;加第二个字,带进位带进位ADCS R2ADCS R2,R6R6,R10 R10 ;加第三个字,;加第三个字,带进位带进位ADCS R3ADCS R3,R7R7,R11 R11 ;加第四个字,;加第四个字,带进位带进位实现程序为:实现程序为:这段程序有缺陷这段程序有缺陷吗?吗?能否不要这些能否不要这些 S S ?共129页5959(4 4)SBCSBC指令指令 SBCSBC指令的格式为:指令的格式为:SBCS , , SBCS , , SBCSBC 指令把指令把 RnRn 作为被减数,作为

46、被减数,operand2 operand2 作为减数进行减法运算,作为减数进行减法运算,然后再减去然后再减去 CPSRCPSR 中中 C C 条件标志位条件标志位的的反码反码,最后将结果存入,最后将结果存入 RdRd。共129页6060 SBCSBC指令执行流程为:指令执行流程为:共129页6161SBCS R0SBCS R0,R1R1,R2 R2 ;R0(R1)-(R2)-R0(R1)-(R2)-!C C 该指令主要用于字长大于该指令主要用于字长大于 3232 位的数位的数据的减法运算。据的减法运算。 标志位的修改同标志位的修改同 SUBSUB。例子:例子:共129页6262(5 5)RSB

47、RSB指令指令 RSBRSB指令的格式为:指令的格式为:RSBS ,RSBS , RSBRSB 指令之所以被称为逆向减指令之所以被称为逆向减法指令,是因为该指令把法指令,是因为该指令把 operand2operand2 作为被减数,而把作为被减数,而把 RnRn 作为减数来作为减数来进行减法运算,运算结果仍然被存进行减法运算,运算结果仍然被存入入 RdRd。共129页6363RSB R0RSB R0,R1R1,R2 R2 ;R0R0(R2R2)- -(R1R1)RSB R0RSB R0,R1R1,#256 #256 ;R0256 -R0256 -(R1R1)RSB R0RSB R0,R2R2,

48、R3R3,LSL#1LSL#1;R0R0(R31R31)- - (R2R2)例子:例子:共129页6464(6 6)RSCRSC指令指令 RSCRSC指令的格式为:指令的格式为:RSCS ,RSCS , RSCRSC 指令把指令把 operand2operand2 作为被减数,作为被减数,而把而把 RnRn 作为减数,然后再减去作为减数,然后再减去 CPSR CPSR 中中的的 C C 条件标志位的条件标志位的 反码反码,最后将结果存,最后将结果存入入 RdRd。 RSC R0RSC R0,R1R1,R2R2共129页653.3.2.2 3.3.2.2 按位逻辑操作指令按位逻辑操作指令 按位逻

49、辑操作指令包括:按位逻辑操作指令包括:逻辑与操作逻辑与操作指令指令ANDAND、逻辑或操作指令逻辑或操作指令ORRORR、逻辑异或逻辑异或操作指令操作指令EOREOR 以及以及 位清除指令位清除指令BICBIC。(1 1)ANDAND指令指令 AND AND指令的格式为:指令的格式为:ANDS ,ANDS , ANDAND 指令把指令把 RnRn 和和 operand2operand2 按位按位 进行逻辑进行逻辑“与与”运算,并把结果存入运算,并把结果存入 RdRd。共129页6666 AND AND 指令执行流程:指令执行流程:共129页6767例:例: AND R0 AND R0,R0R0

50、,#3 #3 ;该指令保持;该指令保持R0R0的的0 0、1 1位,其余位清零位,其余位清零受影响的受影响的CPSRCPSR标志位标志位取值取值N N寄存器寄存器Rd31Rd31被复制到被复制到N NZ Z如果如果RdRd为为0 0则则Z=1Z=1,否则,否则Z=0Z=0C CC=0C=0共129页6868(2 2)ORRORR指令指令 ORR ORR指令的格式为:指令的格式为:ORRS ,ORRS , ORRORR 指令把指令把 Rn Rn 和和 operand2operand2 按位进行逻辑按位进行逻辑“或或”运算,并把结运算,并把结果存入果存入 RdRd。ORR R0ORR R0,R0R

51、0,#3 #3 ;该指令设置;该指令设置R0R0的的0 0、1 1位,其余位不变位,其余位不变例:请把寄存器例:请把寄存器R2R2中的高中的高8 8位数据传送到位数据传送到寄存器寄存器R3R3的低的低8 8位。位。共129页6969MOV R0MOV R0,R2R2,LSR #24 LSR #24 ;将;将R2R2右移右移2424位,位,即将其高即将其高8 8位移至低位移至低8 8位送位送R0R0。ORR R3ORR R3,R0R0,R3R3,LSL #8 LSL #8 ;将;将R3R3左移左移8 8位位后将后将R0R0低低8 8位送至位送至R3R3。 标志位的影响同标志位的影响同ANDAND

52、。注意:注意:R2R2原来的原来的内容没有变内容没有变注意:注意:R3R3原来的高原来的高2424位内容变了位内容变了共129页7070(3 3)EOREOR指令指令 EOR EOR指令的格式为:指令的格式为:EORS ,EORS , EOR EOR 指令把指令把 RnRn 和和 operand2operand2 按位按位进行逻辑进行逻辑“异或异或”运算,并把结果存入运算,并把结果存入 RdRd。EOR R0EOR R0,R0R0,#3 #3 ;该指令反转;该指令反转R0R0的的0 0、1 1位,其余位保持不变。位,其余位保持不变。 标志位的修改同标志位的修改同ANDAND。共129页7171

53、(4 4)BICBIC指令指令 BICBIC指令的格式为:指令的格式为:BICS ,BICS , BIC BIC 指令的功能是清除指令的功能是清除 RnRn 的的某些位,并把结果存入某些位,并把结果存入 RdRd。共129页7272 Rn Rn 为寄存器寻址方式;为寄存器寻址方式;operand2operand2 可可以是寄存器寻址方式,也可以是立即数寻以是寄存器寻址方式,也可以是立即数寻址方式。址方式。Operand2Operand2 为为 3232位位 掩码,如果掩码,如果在掩码中设置了某一位,则清除这一位,在掩码中设置了某一位,则清除这一位,未设置的掩码位保持不变。未设置的掩码位保持不变

54、。BIC R0BIC R0,R0R0,#0 xB #0 xB ;该指令清除;该指令清除R0R0中的中的0 0、1 1和和3 3位,其余位保持不变。位,其余位保持不变。 标志位的修改同标志位的修改同ANDAND。共129页733.3.2.3 3.3.2.3 寄存器移位操作指令寄存器移位操作指令 包括:包括:数据传送指令数据传送指令MOV MOV 和和 数据非传数据非传送指令送指令MVNMVN。(1 1)MOVMOV指令指令 MOVMOV 指令将一个数指令将一个数 N N 送到目标寄存送到目标寄存器器 RdRd ,其中,其中 N N 可以是可以是 寄存器寄存器,也可以,也可以是是 立即数立即数。

55、MOV MOV 指令的格式为:指令的格式为: MOVS , MOVS , 共129页74 MOV MOV 指令的执行流程:指令的执行流程:共129页7575例:例:MOV R2MOV R2,#0 x7E#0 x7E ;将立即数;将立即数0 x7E0 x7E传传 送到寄存器送到寄存器R2R2中中MOV R1MOV R1,R0R0,LSL#3LSL#3 ;将寄存器;将寄存器R0 R0 * * 8 8 传送到寄存器传送到寄存器R1R1受影响的受影响的CPSRCPSR标志位标志位取值取值N N寄存器寄存器Rd31Rd31被复制到被复制到N NZ Z如果如果RdRd为为0 0,则,则Z=1Z=1,否则,

56、否则Z=0Z=0C CC=0C=0共129页7676(2 2)MVNMVN指令指令 MVNMVN指令的格式为:指令的格式为:MVNS , MVNS , MVN MVN 指令在进行数据传送之前,指令在进行数据传送之前,先把源操作数先把源操作数 operand2 operand2 按位取反,按位取反,然后再传送到目的寄存器然后再传送到目的寄存器 RdRd。MVN R0MVN R0,#0 #0 ;将立即数;将立即数0 0取反传送到寄取反传送到寄 存器存器R0R0中,完成后中,完成后R0=-1R0=-1。 标志修改同标志修改同MOVMOV指令,只修改指令,只修改N N、Z Z、C C。共129页773

57、.3.2.4 3.3.2.4 比较操作指令比较操作指令 包括:包括:比较指令比较指令CMPCMP、负数比较指令、负数比较指令CMNCMN、位测试指令位测试指令TST TST 以及以及 相等测试指令相等测试指令TEQTEQ。(1 1)CMPCMP指令指令 CMP CMP指令的格式为:指令的格式为:CMP , CMP , CMP CMP 指令把指令把 RdRd 作为被减数和作为被减数和operand2operand2 进行一次减法运算操作,但不进行一次减法运算操作,但不存储运算结果,只根据结果来更新存储运算结果,只根据结果来更新 CPSRCPSR 的相应条件标志位的相应条件标志位 N N、Z Z、

58、C C、V V。共129页7878受影响的受影响的CPSRCPSR标志位标志位取值取值N N运算结果的第运算结果的第3131位被复制到位被复制到N NZ Z运算结果为运算结果为0 0则则Z=1Z=1,否则,否则Z=0Z=0C C运算结果有借位则运算结果有借位则C=0C=0,否则,否则C=1C=1V V运算结果有溢出则运算结果有溢出则V=1V=1,否则,否则V=0V=0CMP R1CMP R1,R0 R0 ;(R1)-(R0)(R1)-(R0);根据结果设置;根据结果设置CPSRCPSR的标志位。的标志位。CMP R1CMP R1,#100 #100 ;(R1)-100(R1)-100;根据结果

59、设置;根据结果设置CPSRCPSR的标志位。的标志位。共129页7979 CMN CMN 指令把指令把 RdRd 作为被减数与作为被减数与operand2operand2 的的 反反 进行一次减法运算,但不进行一次减法运算,但不存储结果,只更新存储结果,只更新 CPSRCPSR 中条件标志位。中条件标志位。(2 2)CMNCMN指令指令 CMNCMN指令的格式为:指令的格式为:CMN , CMN , 注意:比较类指令本身带有更新注意:比较类指令本身带有更新 CPSRCPSR的功能,故在该指令中不能使用后缀的功能,故在该指令中不能使用后缀 S S。共129页8080(3 3)TSTTST测试指令

60、测试指令 TST TST指令的格式为:指令的格式为:TST , TST , TST TST 指令的功能是把指令的功能是把 RdRd 和和 operand2operand2 按位进行逻辑按位进行逻辑“与与”运算,并根据运算结运算,并根据运算结果更新果更新 CPSRCPSR 中的条件标志位的值。中的条件标志位的值。RdRd 是是要测试的数据,要测试的数据,operand2operand2 是一个掩码。该是一个掩码。该指令一般用来检测是否设置了特定的位。指令一般用来检测是否设置了特定的位。TST R1TST R1,#0 x5 #0 x5 ;测试寄存器;测试寄存器R1R1中的第中的第0 0位和第位和第2 2位是否是位是否是1 1。共129页8181 TEQT

温馨提示

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

评论

0/150

提交评论