第3章ARM寻址方式与指令系统_第1页
第3章ARM寻址方式与指令系统_第2页
第3章ARM寻址方式与指令系统_第3页
第3章ARM寻址方式与指令系统_第4页
第3章ARM寻址方式与指令系统_第5页
已阅读5页,还剩82页未读 继续免费阅读

下载本文档

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

文档简介

1、第三章第三章ARM寻址方式与指令系统寻址方式与指令系统2 内容提要内容提要 思考题思考题 Thumb指令集指令集 ARM指令集指令集 ARM指令格式和寻址方式指令格式和寻址方式 ARM编程模型编程模型( (第二章已讲第二章已讲) ) 3机器指令、伪指令和宏指令机器指令、伪指令和宏指令l机器指令机器指令能被处理器直接执行,而汇编指令能被处理器直接执行,而汇编指令、伪指令和宏指令不能。机器指令包括、伪指令和宏指令不能。机器指令包括ARMARM指指令集和令集和ThumbThumb指令集指令集 。l伪指令伪指令是在源程序汇编期间,由汇编编译器是在源程序汇编期间,由汇编编译器处理。其作用是为汇编程序完成

2、准备工作。处理。其作用是为汇编程序完成准备工作。l宏指令宏指令在程序中用于调用宏,宏是一段独立在程序中用于调用宏,宏是一段独立的程序代码;在程序汇编时,对宏调用进行的程序代码;在程序汇编时,对宏调用进行展开,用宏体代替宏指令。展开,用宏体代替宏指令。4 内容提要内容提要 思考题思考题 Thumb指令集指令集 ARM指令集指令集 ARM指令格式和寻址方式指令格式和寻址方式 ARM编程模型编程模型 53.1 3.1 ARM编程模型编程模型 3.1.2 处理器工作状态处理器工作状态 3.1.3 寄存器组织寄存器组织 3.1.4 异常中断异常中断 3.1.1 处理器模式处理器模式 63.1.1 3.1

3、.1 处理器模式处理器模式l ARMARM微处理器支持微处理器支持7 7种工作模式种工作模式; ;l 除用户模式之外的其余除用户模式之外的其余6 6种称为种称为非用户模式非用户模式,或,或特权模式(特权模式(Privileged ModesPrivileged Modes););l 而特权模式中,除系统模式之外的其余而特权模式中,除系统模式之外的其余5 5种又称种又称为为异常模式异常模式(Exception ModesException Modes),),不同的工作模不同的工作模式间可以相互切换式间可以相互切换。l 处理器的各种工作模式由当前程序状态寄存器处理器的各种工作模式由当前程序状态寄存

4、器CPSRCPSR的低的低4 4位位M4:0M4:0决定,对应关系如下表。决定,对应关系如下表。 7处理器模式处理器模式用于高速数据传输或通道处理用于高速数据传输或通道处理10001 10001 快速中断模式快速中断模式 (fiqfiq)运行特权级的操作系统任务运行特权级的操作系统任务 11111 11111系统模式(系统模式(syssys)用于支持硬件协处理器的软件用于支持硬件协处理器的软件仿真仿真 11011 11011未定义指令模式未定义指令模式(undund)用于虚拟存储及存储保护用于虚拟存储及存储保护 10111 10111中止模式中止模式( (abt)abt)操作系统的保护模式操作

5、系统的保护模式 10011 10011管理模式(管理模式(svcsvc)用于通用的中断处理用于通用的中断处理 1001010010外部中断模式外部中断模式 (irqirq)正常的程序执行状态正常的程序执行状态 10000 10000 用户模式用户模式 (usr)(usr)功能功能M4:0M4:0工作模式工作模式非用户模式或特权模式非用户模式或特权模式 异常模式异常模式 83.1.2 3.1.2 处理器工作状态处理器工作状态 从编程的角度来讲,从编程的角度来讲,ARMARM处理器可工作在两种处理器可工作在两种状态:状态:ARMARM状态或状态或ThumbThumb状态,并可在两种状态间状态,并可

6、在两种状态间进行切换。进行切换。 lARMARM状态:处理器执行状态:处理器执行3232位的位的ARMARM指令集时,工作指令集时,工作在此状态;在此状态;lThumbThumb状态:处理器执行状态:处理器执行1616位的位的ThumbThumb指令集时,指令集时,工作在此状态。工作在此状态。93.1.3 3.1.3 寄存器组织寄存器组织lARMARM处理器总共有处理器总共有3737个寄存器,各寄存器均为个寄存器,各寄存器均为3232位。位。3131个通用寄存器,包括程序计数器个通用寄存器,包括程序计数器PCPC;6 6个状态寄存器。个状态寄存器。10 寄存器组织寄存器组织用户模式R0R1R2

7、R3R4R5R6R7R8R9R10R11R12R13R14R15CPSR系统模式R0R1R2R3R4R5R6R7R8R9R10R11R12R13R14R15CPSR管理模式R0R1R2R3R4R5R6R7R8R9R10R11R12R13_svcR14_svcR15SPSRCPSR_svc中止模式R0R1R2R3R4R5R6R7R8R9R10R11R12R13_abtR14_abtR15SPSRCPSR_abt未定义指令模式R0R1R2R3R4R5R6R7R8R9R10R11R12R13_undR14_undR15SPSRCPSR_und外部中断模式R0R1R2R3R4R5R6R7R8R9R10

8、R11R12R13_irqR14_irqR15SPSRCPSR_irq快速中断模式R0R1R2R3R4R5R6R7R8_fiqR9_fiqR10_fiqR11_fiqR12_fiqR13_fiqR14_fiqR15SPSRCPSR_fiq11通用寄存器通用寄存器1.1.通用寄存器通用寄存器: :包括包括R0R0R15R15,以及程序计数器以及程序计数器PC PC 。R0R0R7R7称为不分组寄存器;称为不分组寄存器;R8R8R12R12有两组物理寄存器。一组属于快速中断模式有两组物理寄存器。一组属于快速中断模式( (R8_fiqR8_fiqR12_fiqR12_fiq),),另一组属于其它模式

9、另一组属于其它模式 ( (R8_usr R8_usr R12_usr) R12_usr) ;R13R13和和R14R14有有6 6组物理寄存器。其中用户模式和系统模式组物理寄存器。其中用户模式和系统模式共用一组共用一组 。寄存器。寄存器R13R13通常作为堆栈指针(通常作为堆栈指针(SPSP) , ,寄存寄存器器R14R14常用作连接寄存器(常用作连接寄存器(LRLR)寄存器寄存器R15R15,又称为又称为PCPC12状态寄存器状态寄存器2.2.状态寄存器状态寄存器: :当前程序状态寄存器当前程序状态寄存器CPSR,可以在任何工作模式下被访问可以在任何工作模式下被访问程序状态备份寄存器程序状态

10、备份寄存器SPSR,只有在异常模式下,才能被访问只有在异常模式下,才能被访问 负数标志负数标志零标志零标志进位标志进位标志溢出标志溢出标志中断请求禁中断请求禁 用用快速中断请求禁快速中断请求禁 用用处理器工作模式处理器工作模式Nz c vFIM0M1M2M3M413状态寄存器状态寄存器对于加对于加/ /减法运算指令,当操作数和运算结果为二进制的补码表减法运算指令,当操作数和运算结果为二进制的补码表示的带符号数时,示的带符号数时,V=1V=1表示符号位溢出。表示符号位溢出。V V有有3 3种情况会改变种情况会改变C C的值:的值:加法运算(包括比较指令加法运算(包括比较指令CMNCMN):):当

11、运算结果产生了进位时(无当运算结果产生了进位时(无符号数上溢出),符号数上溢出),C=1C=1,否则否则C=0C=0。减法运算(包括比较指令减法运算(包括比较指令CMPCMP):):当运算时产生了借位(无符号当运算时产生了借位(无符号数下溢出),数下溢出),C=0C=0,否则否则C=1C=1。对于包含移位操作的非加对于包含移位操作的非加/ /减运算指令,减运算指令,C C为移出值的最后一位为移出值的最后一位C CZ=1 Z=1 表示运算的结果为零;表示运算的结果为零;Z=0Z=0表示运算的结果不为零;表示运算的结果不为零;Z Z当两个补码表示的带符号数运算时,当两个补码表示的带符号数运算时,N

12、=1 N=1 表示运算的结果为负数表示运算的结果为负数;N=0 N=0 表示运算的结果为正数或零;表示运算的结果为正数或零;N N含义含义标志位标志位条件标志位条件标志位 14状态寄存器状态寄存器对于对于ARM v4ARM v4以上版本的以上版本的T T系列处理器,系列处理器,T T0 0,表示执行表示执行ARMARM指令指令,否则,表示执行,否则,表示执行ThumbThumb指令;指令;对于对于ARM v5ARM v5以上版本的非以上版本的非T T系列处理器,系列处理器,T T0 0,表示指令表示指令ARMARM指指令,否则,表示强制下一条执行的指令产生未定义指令中断。令,否则,表示强制下一

13、条执行的指令产生未定义指令中断。T TF F1 1,表示禁止表示禁止FIQFIQ中断;否则,表示允许中断;否则,表示允许FIQFIQ中断中断F FI I1 1,表示禁止表示禁止IRQIRQ中断;否则,表示允许中断;否则,表示允许IRQIRQ中断中断I I在在ARM v5ARM v5及以上版本的及以上版本的E E系列处理器中,用系列处理器中,用Q Q标志位指示增强的标志位指示增强的DSPDSP运算指令是否发生了溢出。运算指令是否发生了溢出。Q Q含义含义标志位标志位 条件标志位条件标志位 控制位控制位 15状态寄存器状态寄存器PCPC,R0R0R12R12,R13_undR14_und,CPSR

14、,SPSR_undR13_undR14_und,CPSR,SPSR_und未定义指令模式未定义指令模式1101111011PCPC,R0R0R14R14,CPSRCPSR系统模式系统模式1111111111PCPC,R0R0R12R12,R13_abtR14_abt,CPSR,SPSR_abtR13_abtR14_abt,CPSR,SPSR_abt中止模式中止模式1011110111PCPC,R0R0R12R12,R13_svcR14_svc,CPSR,SPSR_svcR13_svcR14_svc,CPSR,SPSR_svc管理模式管理模式1001110011PCPC,R0R0R12R12,R

15、13_irqR14_irq,CPSR,SPSR_irqR13_irqR14_irq,CPSR,SPSR_irq外部中断模式外部中断模式1001010010PCPC,R0R0R7R7,R8_fiqR14_fiq,CPSR,SPSR_fiqR8_fiqR14_fiq,CPSR,SPSR_fiq快速中断模式快速中断模式1000110001PCPC,R0R0R14R14,CPSRCPSR用户模式用户模式1000010000可访问的寄存器可访问的寄存器处理器工作模式处理器工作模式M4:0M4:0M4:0M4:0含义含义标志位标志位控制位控制位 163.1.4 3.1.4 异常中断异常中断l异常中断异常中

16、断是指处理器由于外部或内部的原因,停止是指处理器由于外部或内部的原因,停止执行当前任务,转而处理特定的事件,处理完后返执行当前任务,转而处理特定的事件,处理完后返回原程序,继续执行。回原程序,继续执行。l ARM ARM共有共有7 7种类型的异常,不同类型的异常将导致种类型的异常,不同类型的异常将导致处理器进入不同的工作模式,并执行不同特定地址的处理器进入不同的工作模式,并执行不同特定地址的指令。各异常类型具有不同的优先级指令。各异常类型具有不同的优先级 ,如下表所示,如下表所示17异常中断异常中断 3 30 0 xFFFF001CxFFFF001C0 0 x0000001Cx0000001C

17、快速中断模式快速中断模式快速中断请求快速中断请求(FIQFIQ) 4 40 0 xFFFF0018xFFFF00180 0 x00000018x00000018外部中断模式外部中断模式外部中断请求外部中断请求(IRQIRQ) 2 20 0 xFFFF0010 xFFFF00100 0 x00000010 x00000010中止模式中止模式数据访问中止数据访问中止 5 50 0 xFFFF000CxFFFF000C0 0 x0000000Cx0000000C中止模式中止模式指令预取中止指令预取中止 6 60 0 xFFFF0008xFFFF00080 0 x00000008x00000008管理

18、模式管理模式软件中断软件中断(SWISWI) 6 60 0 xFFFF0004xFFFF00040 0 x00000004x00000004未定义指令中止未定义指令中止模式模式未定义指令未定义指令 1 10 0 xFFFF0000 xFFFF00000 0 x00000000 x00000000管理模式管理模式复位复位优先级优先级特定地址特定地址( (高端高端) ) 特定地址特定地址 ( (低端低端) )工作模式工作模式异常类型异常类型18举例举例 1. 1. 整个地址空间的起始位置(地址整个地址空间的起始位置(地址0 0 x00000000 x00000000开始)有以下开始)有以下指令指令

19、 对应地址bSYS_RST_HANDLER;0 x00000000bUDF_INS_HANDLER;0 x00000004bSWI_SVC_HANDLER;0 x00000008bINS_ABT_HANDLER;0 x0000000cbDAT_ABT_HANDLER;0 x00000010b.;bIRQ_SVC_HANDLER;0 x00000018bFIQ_SVC_HANDLER;0 x0000001c 一旦发生外部中断请求,处理器首先自动保存当前状态,进入外部中断一旦发生外部中断请求,处理器首先自动保存当前状态,进入外部中断 模式模式 接着执行地址接着执行地址0 0 x00000018x0

20、0000018处的指令,即处的指令,即b IRQ_SVC_HANDLERb IRQ_SVC_HANDLER 跳转到标号跳转到标号IRQ_SVC_HANDLERIRQ_SVC_HANDLER处开始执行处开始执行PC-R14 CPSR-SPSR19举例举例 2. IRQ_SVC_HANDLER 2. IRQ_SVC_HANDLER处的代码为:处的代码为: IRQ_SVC_HANDLERIRQ_SVC_HANDLERsubsublr, lr, #4lr, lr, #4stmfdstmfdsp!, r0-r3, lrsp!, r0-r3, lrldrldrr0, =IRQ_SVC_Vectorr0,

21、=IRQ_SVC_Vectorldrldrpc, r0pc, r0处理器将通用寄存器和返回地址压入堆栈处理器将通用寄存器和返回地址压入堆栈 IRQ_SVC_VectorIRQ_SVC_Vector为外部中断请求的中断向量为外部中断请求的中断向量 跳转到外部中断请求的中断服务程序中跳转到外部中断请求的中断服务程序中 20 内容提要内容提要 思考题思考题 Thumb指令集指令集 ARM指令集指令集 ARM指令格式和寻址方式指令格式和寻址方式 ARM编程模型编程模型( (第二章已讲第二章已讲) ) 213.2 ARM3.2 ARM指令格式和寻址方式指令格式和寻址方式 3.2.1 ARM3.2.1 A

22、RM指令的一般格式指令的一般格式 3.2.2 3.2.2 条件域条件域 cond 3.2.3 3.2.3 寻址方式寻址方式 223.2.1 ARM3.2.1 ARM指令的一般格式指令的一般格式lARMARM指令的编码格式指令的编码格式首先来看一条实际的指令,其语法结构(助记符)为首先来看一条实际的指令,其语法结构(助记符)为 ADDEQS R0,R1,R23128272524212019161512110cond opcodeSRnRdop200000010100100010000000000000010该指令的编码格式为:该指令的编码格式为:23ARMARM指令的一般格式指令的一般格式lAR

23、MARM指令的助记符指令的助记符 ARM指令在汇编程序中用助记符表示,一般指令在汇编程序中用助记符表示,一般ARM指令的助指令的助记符格式为:记符格式为: S ,例:例:ADDEQS R1,R2,#5操作码操作码决定指令执行的条件决定指令执行的条件域域决定指令执行是否影响决定指令执行是否影响CPSRCPSR寄存器的值寄存器的值第一个操作数,为寄存器第一个操作数,为寄存器目的寄存器目的寄存器第二个操作数第二个操作数其中操作码其中操作码opcodeopcode为为ADDADD,条件域,条件域condcond为为EQEQ,表示该指令只有当,表示该指令只有当CPSRCPSR中中Z Z标标志置位时才执行

24、,目的寄存器志置位时才执行,目的寄存器RdRd为为R1,R1,第一个操作数寄存器第一个操作数寄存器RnRn为为R2R2,第二,第二个操作数个操作数op2op2为为5 5;执行的结果为;执行的结果为R1=R2+5R1=R2+5,S S表示将影响表示将影响CPSRCPSR寄存器的值。寄存器的值。243.2.2 3.2.2 条件域条件域 cond 溢出溢出V V置位置位VSVS正数或零正数或零N N清零清零PLPL负数负数N N置位置位MIMI无符号数小于无符号数小于C C清零清零CCCC无符号数大于或等于无符号数大于或等于C C置位置位CSCS不相等不相等Z Z清零清零NENE相等相等Z Z置位置

25、位EQEQ含义含义CPSRCPSR中标志位中标志位condcond25 条件域条件域 cond 含义含义CPSRCPSR中标志位中标志位condcond无条件执行无条件执行忽略忽略 AL AL带符号数小于或等于带符号数小于或等于Z Z置位或(置位或(N N不等于不等于V V)LELE带符号数大于带符号数大于Z Z清零且(清零且(N N等于等于V V)GTGT带符号数小于带符号数小于N N不等于不等于V VLTLT带符号数大于或等于带符号数大于或等于N N等于等于V VGEGE无符号数小于或等于无符号数小于或等于C C清零清零Z Z置位置位LSLS无符号数大于无符号数大于C C置位置位Z Z清零

26、清零HIHI未溢出未溢出V V清零清零VCVC263.2.3 3.2.3 寻址方式寻址方式 l立即数寻址立即数寻址l寄存器寻址寄存器寻址l寄存器移位寻址寄存器移位寻址l寄存器间接寻址寄存器间接寻址 l基址变址寻址基址变址寻址l相对寻址相对寻址 l多寄存器寻址多寄存器寻址 l块拷贝寻址块拷贝寻址 l堆栈寻址堆栈寻址 所谓寻址方式,就是根据指令中操作数的信息所谓寻址方式,就是根据指令中操作数的信息寻找操作数实际物理地址的方式。依据指令中给出寻找操作数实际物理地址的方式。依据指令中给出的操作数的不同格式,的操作数的不同格式,ARMARM指令系统具有以下几种常指令系统具有以下几种常见的寻址方式。见的寻

27、址方式。27立即数寻址立即数寻址 在立即数寻址中,操作数本身直接在指令中给出,取出指在立即数寻址中,操作数本身直接在指令中给出,取出指令也就获得了操作数,这个操作数也称为立即数。令也就获得了操作数,这个操作数也称为立即数。 例如例如: : ADD R0ADD R0,R1R1,5 5; R0=R1R0=R15 5 MOV R0 MOV R0,0 x550 x55; R0=0 x55R0=0 x55 其中:操作数其中:操作数5 5,0 0 x55x55就是立即数,立即数在指令中要以就是立即数,立即数在指令中要以“”为前缀,后面跟实际数值。为前缀,后面跟实际数值。0 x00R0MOV R0,#0 x

28、55程序存储程序存储MOV R0,0 x550 x55从代码中获得数据从代码中获得数据28寄存器寻址寄存器寻址 在寄存器寻址方式下,寄存器的值即为操作数。在寄存器寻址方式下,寄存器的值即为操作数。ARMARM指指令普遍采用此种寻址方式。令普遍采用此种寻址方式。 例如:例如: ADD R0 ADD R0,R1R1,R2R2; R0=R1 R0=R1R2R2 MOV R0 MOV R0,R1R1; R0=R1 R0=R10 xAA0 x55R2R10 xAAMOV R0,R1寄存器移位寻址寄存器移位寻址 寄存器移位寻址的操作数由寄存器的数值做相应移位而寄存器移位寻址的操作数由寄存器的数值做相应移位

29、而得到;移位的方式在指令中以助记符的形式给出,而移位的得到;移位的方式在指令中以助记符的形式给出,而移位的位数可用立即数或寄存器寻址方式表示。位数可用立即数或寄存器寻址方式表示。 例如:例如: ADD R0 ADD R0,R1R1,R2R2,ROR R3ROR R3 ; R0=R1 R0=R1R2R2循环右移循环右移R3R3位位 MOV R0 MOV R0,R1R1,LSL LSL 3 3 ; R0=R1 R0=R1逻辑左移逻辑左移3 3位位 移位操作在移位操作在ARMARM指令集中不作为单独的指令使用,指令集中不作为单独的指令使用,ARMARM指指令集共有令集共有5 5种位移操作。如下所示:

30、种位移操作。如下所示:0 x00000000R0R1 0 x00000001MOV R0,R1,LSL 30 x00001000逻辑左移逻辑左移3 3位位0 x000010002930 寄存器移位寻址寄存器移位寻址 0LSL逻辑左移逻辑左移 :Rx,LSL (Logical Shift Left)LSR逻辑右移逻辑右移 : Rx,LSR (Logical Shift Right)ASR算术右移算术右移 :Rx,ASR (Arithmetic Shift Right)ROR循环右移循环右移 :Rx,ROR (Rotate Right)RRX带扩展的循环右移带扩展的循环右移:Rx,RRX (Rot

31、ate Right with extend)0C0 031 31 31 31 31 31 31 31 31 31 0 00 00 00 0 注意:将寄存器的值作为操作数的物理地址的寻址方式注意:将寄存器的值作为操作数的物理地址的寻址方式中,寄存器助记符放在中,寄存器助记符放在“”中。中。31寄存器间接寻址寄存器间接寻址 寄存器中的值为操作数的物理地址寄存器中的值为操作数的物理地址, ,而实际的操作数存而实际的操作数存放在存储器中。放在存储器中。 例如:例如: STR R0 STR R0,R1R1; R1=R0 R1=R0 LDR R0 LDR R0,R1R1; R0=R1 R0=R10 x55

32、R0R1 0 x400000000 xAA0 x400000000 xAALDR R0,R1;32基址变址寻址基址变址寻址 将寄存器(称为基址寄存器)的值与指令中给出的将寄存器(称为基址寄存器)的值与指令中给出的偏移地址量相加,所得结果作为操作数的物理地址。偏移地址量相加,所得结果作为操作数的物理地址。 例如:例如: LDR R0 LDR R0,R1R1,5;5; R0=R1+5 R0=R1+5 LDR R0 LDR R0,R1,R2;R1,R2; R0=R1+R2 R0=R1+R20 x55R0R1 0 x400000000 xAA0 x40000005将将R1+5R1+5作为地址装作为地址

33、装载数据载数据0 xAALDR R0,R1,5;33相对寻址相对寻址 相对寻址同基址变址寻址相似,区别只是将程序计数相对寻址同基址变址寻址相似,区别只是将程序计数器器PCPC作为基址寄存器,指令中的标记作为地址偏移量。作为基址寄存器,指令中的标记作为地址偏移量。 例如:例如: BEQ process1 BEQ process1 process1process1: BEQBEQ指令采用了相对寻址方式,指令采用了相对寻址方式,它将程序跳转到它将程序跳转到prscess1prscess1处执行处执行34多寄存器寻址多寄存器寻址 在多寄存器寻址方式中,一条指令可实现一组在多寄存器寻址方式中,一条指令可

34、实现一组寄存器寄存器值的值的传送。连续的寄存器间用传送。连续的寄存器间用“”连接,否则用连接,否则用“,”分隔。分隔。 例如例如: : LDMIA R0 LDMIA R0,R1-R5 R1-R5 ; R1=R0,R2=R0+4,R3=R0+8,R1=R0,R2=R0+4,R3=R0+8, R4=R0+12 R4=R0+12,R5=R0+16R5=R0+16 指令中指令中IAIA表示在执行完一次表示在执行完一次LoadLoad操作后,操作后,R0R0自增自增4 4。该。该指令将以指令将以R0R0为起始地址的为起始地址的5 5个字数据分别装入个字数据分别装入R1R1,R2R2,R3R3,R4R4,

35、R5R5中。中。0 x40000000R0R10 x?0 x010 x400000000 x?R2R30 x?R40 x?0 x020 x030 x040 x400000040 x400000080 x4000000CR50 x?0 x050 x400000100 x010 x020 x030 x040 x05LDMIA R0,R1-R50 x40000014数据数据 地址地址35块拷贝寻址块拷贝寻址 块拷贝寻址可实现连续地址数据从块拷贝寻址可实现连续地址数据从存储器存储器的某一位置的某一位置拷贝到另一位置。拷贝到另一位置。 例如例如: :将取出的数据存入以将取出的数据存入以R1R1的值为起始

36、的值为起始地址的存储单元中地址的存储单元中LDMIA R0LDMIA R0,R1-R5R1-R5;STMIA R1STMIA R1,R1-R5R1-R5; 从以从以R0R0的值为起始地址的存储单元中的值为起始地址的存储单元中取出取出5 5个字的数据个字的数据36堆栈寻址堆栈寻址 堆栈寻址用于数据栈与寄存器组之间批量数据传输。堆堆栈寻址用于数据栈与寄存器组之间批量数据传输。堆栈是一种后进先出的数据结构。当数据写入和读出内存的顺栈是一种后进先出的数据结构。当数据写入和读出内存的顺序不同时,使用堆栈寻址可以很好的解决这问题。序不同时,使用堆栈寻址可以很好的解决这问题。 例如:例如:将数据出栈,恢复将

37、数据出栈,恢复R0R0R4R4原先的值。原先的值。STMFD R13!STMFD R13!,R0,R1,R2,R3,R4R0,R1,R2,R3,R4; LDMFD R13!LDMFD R13!,R0,R1,R2,R3,R4R0,R1,R2,R3,R4; 将将R0R0R4R4中的数据压入堆栈,中的数据压入堆栈,R13R13为堆栈指针为堆栈指针37 内容提要内容提要 思考题思考题 Thumb指令集指令集 ARM指令集指令集 ARM指令格式和寻址方式指令格式和寻址方式 ARM编程模型编程模型 38 3.3 ARM3.3 ARM指令集指令集3.3.1 3.3.1 数据处理指令数据处理指令 3.3.3

38、Load/Store3.3.3 Load/Store指令指令 3.3.2 3.3.2 跳转指令跳转指令 3.3.4 3.3.4 程序状态寄存器指令程序状态寄存器指令3.3.6 3.3.6 异常中断指令异常中断指令 3.3.5 3.3.5 协处理器指令协处理器指令 393.3.1 3.3.1 数据处理指令数据处理指令1. MOV1. MOV数据传送指令数据传送指令 ( (Move)Move) MOVS ,; l功能:从另一个寄存器、被移位的寄存器、或一个立即数功能:从另一个寄存器、被移位的寄存器、或一个立即数装载一个值到目的寄存器装载一个值到目的寄存器; Rdop1 。l指定相同的寄存器来实现指

39、定相同的寄存器来实现 NOP NOP 指令的效果,还可以专门移指令的效果,还可以专门移位一个寄存器位一个寄存器: : MOV R0, R0 ; R0 = R0. NOP R0 = R0. NOP MOV R0, R0, LSL #3 ; R0 = R0 R0 = R0 * * 8 8l如果如果 R15 R15 是目的寄存器,将修改程序计数器或标志。用于是目的寄存器,将修改程序计数器或标志。用于返回到调用代码,方法是把连接寄存器的内容传送到返回到调用代码,方法是把连接寄存器的内容传送到 R15:R15: MOV PC, R14 ; 退出到调用者退出到调用者 MOVS PC, R14 ; 退出到调

40、用者并恢复标志位退出到调用者并恢复标志位40MVNMVN数据取反传送指令数据取反传送指令2.2. MVNMVN数据取反传送指令数据取反传送指令( (Move Negative)Move Negative) MVNS ,;l功能:功能:MVN MVN 从另一个寄存器、被移位的寄存器、或一个立从另一个寄存器、被移位的寄存器、或一个立即值装载一个被取反的值到目的寄存器;即值装载一个被取反的值到目的寄存器; Rd = !op1 l 这是逻辑非操作而不是算术操作,这个取反的值加这是逻辑非操作而不是算术操作,这个取反的值加 1 1 才是才是它的取负的值它的取负的值. . MVN R0, #4 ; R0 =

41、 -5 R0 = -5 MVN R0, #0 ; R0 = -1 R0 = -1 ADDADD加法指令加法指令3. ADD3. ADD加法指令加法指令(Addition)(Addition) ADDS ,; l功能:功能:ADD ADD 将把两个操作数加起来,把结果放置到目的寄将把两个操作数加起来,把结果放置到目的寄存器中。存器中。 Rd = Rn + op2l操作数操作数 1 1 是一个寄存器,操作数是一个寄存器,操作数 2 2 可以是一个寄存器,被可以是一个寄存器,被移位的寄存器,或一个立即数移位的寄存器,或一个立即数: : ADD R0, R1, R2 ; R0 = R1 + R2R0

42、= R1 + R2 ADD R0, R1, #256 ; R0 = R1 + 256R0 = R1 + 256 ADD R0, R2, R3,LSL#1 ; R0 = R2 + (R3 1) R0 = R2 + (R3 1) 加法可以在有符号和无符号加法可以在有符号和无符号数上进行。数上进行。41ADCADC带进位加法指令带进位加法指令4 4. ADC. ADC带进位加法指令带进位加法指令 ( (Addition with Carry)Addition with Carry) ADCS ,; l功能:将寄存器功能:将寄存器RnRn、操作数、操作数op2op2表示的值以及进位标志位三表示的值以及

43、进位标志位三者相加,然后把结果存入目的寄存器者相加,然后把结果存入目的寄存器RdRd中。它使用一个进位中。它使用一个进位标志位,这样就可以做比标志位,这样就可以做比 32 32 位大的加法。位大的加法。 Rd= Rn + op2 + carry 进位标志值进位标志值 4243ADCADC带进位加法指令带进位加法指令l下列例子将加两个下列例子将加两个 128 128 位的数。位的数。128 128 位结果位结果: :寄存器寄存器 0 0、1 1、2 2、和、和 3; 3;第一个第一个 128 128 位数位数: : 寄存器寄存器 4 4、5 5、6 6、和、和 7; 7;第二个第二个 128 1

44、28 位数位数: : 寄存器寄存器 8 8、9 9、1010、和、和 11 11。 ADDS R0, R4, R8 ; 加低端的字加低端的字 ADCS R1, R5, R9 ; 加下一个字,带进位加下一个字,带进位 ADCS R2, R6, R10 ; 加第三个字,带进位加第三个字,带进位 ADCS R3, R7, R11 ; 加高端的字,带进位加高端的字,带进位注意:注意:相加时,不要忘记设置相加时,不要忘记设置 S S 后缀来更改进位标志。后缀来更改进位标志。44SUBSUB减法指令减法指令5. SUB5. SUB减法指令减法指令(Subtraction)(Subtraction) SUB

45、S ,;l功能:功能:SUB SUB 用操作数用操作数 Rn Rn 减去操作数减去操作数 op2op2,把结果放置,把结果放置到目的寄存器中。到目的寄存器中。 Rd = Rn - op2 l 操作数操作数 1 1 是一个寄存器,操作数是一个寄存器,操作数 2 2 可以是一个寄存器,可以是一个寄存器,被移位的寄存器,或一个立即值被移位的寄存器,或一个立即值: : SUB R0, R1, R2 ; R0 = R1 - R2 R0 = R1 - R2 SUB R0, R1, #256 ; R0 = R1 - 256 R0 = R1 - 256 SUB R0, R2, R3,LSL#1 ; R0 =

46、R2 - (R3 1) R0 = R2 - (R3 1) 减法可以在有符号和无减法可以在有符号和无符号数上进行符号数上进行45RSBRSB反向减法指令反向减法指令6. RSB6. RSB反向减法指令反向减法指令(Reverse Subtraction)(Reverse Subtraction) RSBS ,;l功能:功能:SUB SUB 用操作数用操作数 op2 op2 减去操作数减去操作数 RnRn,把结果放置,把结果放置到目的寄存器中到目的寄存器中 。Rd = op2 Rnl 操作数操作数 1 1 是一个寄存器,操作数是一个寄存器,操作数 2 2 可以是一个寄存器,可以是一个寄存器,被移位

47、的寄存器,或一个立即值被移位的寄存器,或一个立即值: : RSB R0, R1, R2 ; R0 = R2 - R1R0 = R2 - R1 RSB R0, R1, #256 ; R0 = 256 - R1 R0 = 256 - R1 RSB R0, R2, R3,LSL#1 ; R0 = (R3 1) - R2R0 = (R3 1) - R2反向减法可以在有符号或无反向减法可以在有符号或无符号数上进行。符号数上进行。46SBCSBC带借位减法指令带借位减法指令7. 7. SBCSBC带借位减法指令带借位减法指令: :(Subtraction with (Subtraction with Ca

48、rry)Carry) SBCS ,;l功能:用寄存器功能:用寄存器RnRn的值减去操作数的值减去操作数op2op2表示的值,再减去表示的值,再减去进位标志取反的值,然后把结果存入目的寄存器进位标志取反的值,然后把结果存入目的寄存器RdRd中。中。它使用进位标志来表示借位,这样就可以做大于它使用进位标志来表示借位,这样就可以做大于 32 32 位位的减法。的减法。 Rd= Rn - op2 - !carry l SUB SUB 和和 SBC SBC 生成进位标志的方式不同于常规,如果需要生成进位标志的方式不同于常规,如果需要借位则清除进位标志。所以,指令要对进位标志进行一个借位则清除进位标志。所

49、以,指令要对进位标志进行一个非操作非操作 , ,在指令执行期间自动的反转此位。在指令执行期间自动的反转此位。47SBCSBC带借位减法指令带借位减法指令l该指令用于实现超过该指令用于实现超过3232位的数的减法。位的数的减法。l例如:例如: 第一个第一个6464位操作数存放在寄存器位操作数存放在寄存器R2R2,R3R3中;中; 第二个第二个6464位操作数存放在寄存器位操作数存放在寄存器R4R4,R5R5中;中; 64 64位结果存放在位结果存放在R0R0,R1R1中。中。 SUBS R0,R2,R4; 低低3232位相减,位相减,S S表示结果影响条件表示结果影响条件 标志位的值标志位的值

50、SBC R1,R3,R5;高高3232位相减位相减48RSCRSC带借位的反向减法指令带借位的反向减法指令8. 8. RSCRSC带借位的反向减法指令带借位的反向减法指令(Reverse Subtraction (Reverse Subtraction with Carry)with Carry) RSCS ,;l功能:同于功能:同于SBCSBC,但倒换了两个操作数的前后位置。,但倒换了两个操作数的前后位置。 Rd = op2 - Rn - !carry l例如:第一个例如:第一个6464位操作数存放在寄存器位操作数存放在寄存器R2R2,R3R3中;中; 第二个第二个6464位操作数存放在寄存

51、器位操作数存放在寄存器R4R4,R5R5中;中; 64 64位结果存放在位结果存放在R0R0,R1R1中。中。 SUBS R0,R2,R4; 低低3232位相减,位相减,S S表示结果影响表示结果影响 寄存器寄存器CPSRCPSR的值的值 RSC R1, R5,R3; 高高3232位相减位相减49MUL32MUL32位乘法指令位乘法指令l乘法指令与普通算术指令在对操作数的限制上有所不同乘法指令与普通算术指令在对操作数的限制上有所不同: : 给出的所有操作数和目的寄存器必须为简单的寄存器。给出的所有操作数和目的寄存器必须为简单的寄存器。 操作数操作数 2 2不能使用立即值或被移位的寄存器。不能使

52、用立即值或被移位的寄存器。 目的寄存器和操作数目的寄存器和操作数 1 1 必须是不同的寄存器。必须是不同的寄存器。 不能指定不能指定 R15 R15 为目的寄存器。为目的寄存器。9 9MUL32MUL32位乘法指令位乘法指令(Multiplication)(Multiplication) MULS ,; l 功能:功能:MUL MUL 提供提供 32 32 位整数乘法。该指令根据位整数乘法。该指令根据S S标志,决标志,决定操作是否影响定操作是否影响CPSRCPSR的值的值 。 RnRn和和op2op2的值为的值为3232位的有符号位的有符号数或无符号数。数或无符号数。 Rd = Rn * o

53、p2 例如:例如: MULS R0,R1,R2; R0R0R1R1R2R2,结果影响寄结果影响寄存器存器CPSRCPSR的值的值 50MLA 32MLA 32位乘加指令位乘加指令1010MLA 32MLA 32位乘加指令位乘加指令 (Multiplication with (Multiplication with Accumulate)Accumulate) MLAS ,;l功能:功能: MLA MLA 的行为同于的行为同于 MULMUL,但它把操作数,但它把操作数 3 3 的值加到结的值加到结果上,其中果上,其中op2op2,op3op3必须为寄存器必须为寄存器 。 Rd =( Rn * o

54、p2) + op3,这在这在求总和求总和时有用时有用l Rn Rn、op2op2和和op3op3的值为的值为3232位的有符号数或无符号数。位的有符号数或无符号数。 例如:例如: MLA R0,R1,R2,R3; R0 R0R1R1R2R2R3 R3 51ANDAND逻辑与指令逻辑与指令1 11 1ANDAND逻辑与指令逻辑与指令(logical AND)(logical AND) ANDS ,;l功能:功能:AND AND 将在两个操作数上按位进行逻辑与,把结果放将在两个操作数上按位进行逻辑与,把结果放置到目的寄存器中;置到目的寄存器中; Rd = Rn AND op2。对对屏蔽屏蔽某些位很

55、某些位很有用。有用。l 操作数操作数 1 1 是一个寄存器,操作数是一个寄存器,操作数 2 2 可以是一个寄存器,可以是一个寄存器,被移位的寄存器,或一个立即值被移位的寄存器,或一个立即值: : 例如:例如: AND R0, R0, #3 ; R0 = R0 = 保持保持 R0 R0 的位的位 和和 1 1, 其余位清其余位清0 0 。52ORRORR逻辑或指令逻辑或指令1 12 2ORRORR逻辑或指令逻辑或指令(logical OR)(logical OR) ORRS ,;l功能:功能:OR OR 将在两个操作数上按位进行逻辑或,把结果放将在两个操作数上按位进行逻辑或,把结果放置到目的寄存

56、器中,置到目的寄存器中,Rd = Rn OR op2 ;对对设置设置特定的位特定的位有用。有用。l 操作数操作数 1 1 是一个寄存器,操作数是一个寄存器,操作数 2 2 可以是一个寄存器,可以是一个寄存器,被移位的寄存器,或一个立即值。被移位的寄存器,或一个立即值。 例如:例如: ORR R0, R0, #3 ; 设置设置 R0 R0 中位中位 0 0 和和 1 ,1 ,其余位不变其余位不变 53EOREOR逻辑异或指令逻辑异或指令13. EOR13. EOR逻辑异或指令逻辑异或指令(logical Exclusive OR)(logical Exclusive OR) EORS ,;l功能

57、:功能:EOR EOR 将在两个操作数上按位进行逻辑异或,把结果放将在两个操作数上按位进行逻辑异或,把结果放置到目的寄存器中,置到目的寄存器中,Rd = Rn EOR op2 ;对;对反转反转特定的位特定的位有用。有用。l 操作数操作数 1 1 是一个寄存器,操作数是一个寄存器,操作数 2 2 可以是一个寄存器,可以是一个寄存器,被移位的寄存器,或一个立即值。被移位的寄存器,或一个立即值。 例如:例如: EOR R0, R0, #3 ; 反转反转 R0 R0 中的位中的位 0 0 和和 1 154BICBIC位清除指令位清除指令1 14 4BICBIC位清除指令位清除指令(Bit Clear)

58、(Bit Clear) BICS ,; l功能:功能:BIC BIC 是在一个字中是在一个字中清除位清除位的一种方法,与的一种方法,与 OR OR 位设位设置是相反的操作置是相反的操作。Rd = Rn AND (!op_2) l操作数操作数2 2是一个是一个3232位位位掩码位掩码(mask)(mask)。如果在掩码中设置了某。如果在掩码中设置了某一位,则清除一位,则清除RnRn中的这一位。未设置的掩码位指示中的这一位。未设置的掩码位指示RnRn中此位中此位保持不变。保持不变。 BIC R0, R0, #11 ; 清除清除 R0 R0 中的位中的位 0 0和位和位4 4。其余位不变。其余位不变

59、BIC R0, R0, #5; R0 R0中第中第0 0位和第位和第3 3位清位清0 0,其余位不变,其余位不变CMPCMP比较指令比较指令1 15 5CMPCMP比较指令比较指令 ( (Compare)Compare) CMP ,;l功能:将寄存器功能:将寄存器RnRn的值和操作数的值和操作数op1op1所表示的值进行比较,所表示的值进行比较,根据结果更新根据结果更新CPSRCPSR中条件标志位的值。中条件标志位的值。 status = Rn - op2 l 该指令进行一次减法运算,但该指令进行一次减法运算,但不存储结果,只更改条件标不存储结果,只更改条件标志位志位,后面的指令就可以根据条件

60、标志位来决定是否执行。,后面的指令就可以根据条件标志位来决定是否执行。该指令不需要显式的指定该指令不需要显式的指定S S后缀来更改状态标志。后缀来更改状态标志。l 操作数操作数op1op1为寄存器或立即数。为寄存器或立即数。CMP R0,5; 计算计算R0R05 5,根据结果设置条件标志位根据结果设置条件标志位ADDGT R0,R0,5; 如果如果R05R05,则执行则执行ADDGTADDGT指令指令56TSTTST位测试指令位测试指令1616TSTTST位测试指令位测试指令( (Test bits)Test bits) TST ,; l功能:将寄存器功能:将寄存器RnRn的值和操作数的值和操

温馨提示

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

评论

0/150

提交评论