版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、金城学院自动化系金城学院自动化系第三章第三章 ARM9 ARM9指令系统指令系统vARM9指令集,包括指令集,包括ARM指令集指令集Thumb指令集。指令集。vARM微处理器的指令集是微处理器的指令集是加载加载/存储型存储型的的. 即指令集仅能处理寄存器中的数据,处理结即指令集仅能处理寄存器中的数据,处理结果仍要放回寄存器中,而对果仍要放回寄存器中,而对系统存储器的访问则系统存储器的访问则需要通过专门的加载需要通过专门的加载/存储指令来完成存储指令来完成。3.1 ARM3.1 ARM指令集指令集33.1 ARM3.1 ARM指令集指令集43.1 ARM3.1 ARM指令集指令集4vARM指令的
2、助记符指令的助记符 ARM指令在汇编程序中用助记符表示,一般指令在汇编程序中用助记符表示,一般ARM指令的助指令的助记符格式为:记符格式为: S , , 例:ADDEQS R1,R2,#5操作码操作码决定指令执行的条件域决定指令执行的条件域决定指令执行是否影响决定指令执行是否影响CPSRCPSR寄存器的值寄存器的值第一个操作数,为寄存器第一个操作数,为寄存器目的寄存器目的寄存器第二个操作数第二个操作数其中操作码其中操作码opcodeopcode为为ADDADD,条件域,条件域condcond为为EQEQ,表示该指令只有当,表示该指令只有当CPSRCPSR中中Z Z标标志置位时才执行,目的寄存器
3、志置位时才执行,目的寄存器RdRd为为R1,R1,第一个操作数寄存器第一个操作数寄存器RnRn为为R2R2,第二,第二个操作数个操作数op2op2为为5 5;执行的结果为;执行的结果为R1=R2+5R1=R2+5,S S表示将影响表示将影响CPSRCPSR寄存器的值。寄存器的值。3.1 ARM3.1 ARM指令集指令集v实际指令语法格式为:实际指令语法格式为: ADDEQS R0,R1,R2; 其中操作码其中操作码opcode为为ADD,条件域,条件域cond为为EQ,表示,表示该指令只有当该指令只有当CPSR中中Z标志置位时才执行,目的寄存标志置位时才执行,目的寄存器器Rd为为R0,第一个操
4、作数寄存器第一个操作数寄存器Rn为为R1,第二个操作,第二个操作数数op2为为R12;执行的结果为;执行的结果为R0=R1+R2,S表示将影表示将影响响CPSR寄存器的值。寄存器的值。v该指令的编码格式为:该指令的编码格式为: 3128272524212019161512110cond opcodeSRnRdop200000010100100010000000000000010条件域条件域v 当处理器工作在当处理器工作在ARM状态时,几乎所有的指令均根据状态时,几乎所有的指令均根据CPSR中条件标志位的状态和指令的条件域有条件的执中条件标志位的状态和指令的条件域有条件的执行。当指令的执行条件满
5、足时,指令被执行,否则指令行。当指令的执行条件满足时,指令被执行,否则指令被忽略。被忽略。v 每一条每一条ARM指令包含指令包含4位的条件码位的条件码,位于指令的最高,位于指令的最高4位位31:28。条件码共有。条件码共有16种,每种条件码可用两个字符种,每种条件码可用两个字符表示,这两个字符可以添加在指令助记符的后面和指令表示,这两个字符可以添加在指令助记符的后面和指令同时使用。同时使用。例如:例如:跳转指令跳转指令B可以加上后缀可以加上后缀EQ变为变为BEQ表示表示“相等则相等则跳转跳转”,即当,即当CPSR中的中的Z标志置位时发生跳转。标志置位时发生跳转。v 在在16种条件标志码中,只有
6、种条件标志码中,只有15种可以使用。种可以使用。条件码条件码条件码条件码助记符后缀助记符后缀标标 志志含含 义义0000EQZ置位置位相等相等0001NEZ清零清零不相等不相等0010CSC置位置位无符号数大于或等于无符号数大于或等于0011CCC清零清零无符号数小于无符号数小于0100MIN置位置位负数负数0101PLN清零清零正数或零正数或零0110VSV置位置位溢出溢出0111VCV清零清零未溢出未溢出1000HIC置位置位Z清零清零无符号数大于无符号数大于1001LSC清零清零Z置位置位无符号数小于或等于无符号数小于或等于1010GEN等于等于V带符号数大于或等于带符号数大于或等于10
7、11LTN不等于不等于V带符号数小于带符号数小于1100GTZ清零且(清零且(N等于等于V)带符号数大于带符号数大于1101LEZ置位或(置位或(N不等于不等于V)带符号数小于或等于带符号数小于或等于1110AL忽略忽略无条件执行无条件执行C代码:代码:if(a b) a+;else b+;对应的汇编代码:对应的汇编代码:CMP R0,R1;R0与与R1比较比较ADDHI R0,R0,#1;若若R0R1,则,则R0=R0+1ADDLS R1,R1,#1;若若R0R1,则,则R1=R1+1示例:示例:条件码条件码3.1.1 3.1.1 寄存器装载及存储指令寄存器装载及存储指令9v Load/St
8、ore指令用于寄存器和内存间数据的传送指令用于寄存器和内存间数据的传送.v Load用于把内存中的数据装载到寄存器中用于把内存中的数据装载到寄存器中v Store则用于把寄存器中的数据存入内存。则用于把寄存器中的数据存入内存。 Load/Store指令分为三类:指令分为三类:(1)单一数据传送指令()单一数据传送指令(LDR和和STR等)等)(2)多数据传送指令()多数据传送指令(LDM和和STM)(3)数据交换指令()数据交换指令(SWP和和SWPB) 存储器存储器寄存器(寄存器(R0-R15R0-R15)ARMARM微处理器微处理器外围模块或芯片外围模块或芯片存储存储加载加载1 1、单一数
9、据加载单一数据加载/存储指令存储指令vLDRLDR和和STR STR 字:字:3232位字加载寄存器(位字加载寄存器(LDRLDR)和存储和存储寄存器(寄存器(STRSTR)指令。指令。vLDRLDR和和STRSTR指令都有以下指令都有以下4 4种句法形式:种句法形式: opcond Rd,Rn opcond Rd,Rn 零偏移零偏移 opcond Rd,Rn,Flexoffset! opcond Rd,Rn,Flexoffset! 前索引偏移前索引偏移 opcond Rd,label opcond Rd,label 程序相对偏移程序相对偏移 opcond Rd,Rn,Flexoffset o
10、pcond Rd,Rn,Flexoffset 后索引偏移后索引偏移vlabel label 程序相对偏移表达式。偏移量必须是在当前程序相对偏移表达式。偏移量必须是在当前指令的上下指令的上下4 4KBKB范围内。范围内。v! ! 可选后缀。若有可选后缀。若有“!”,则将包含偏移量的地,则将包含偏移量的地址写回到址写回到RnRn,若若RnRn是是R15R15,则不能使用该后缀。则不能使用该后缀。后面所用时意义相同。后面所用时意义相同。v 表示括号内的内容是可选的。后面所用时意义表示括号内的内容是可选的。后面所用时意义相同。相同。1 1、单一数据加载单一数据加载/存储指令存储指令v Flexoffs
11、et Flexoffset 加到加到RnRn上的灵活偏移量。该偏移量可以是下面上的灵活偏移量。该偏移量可以是下面两种形式之一:两种形式之一: # #expr expr 是取值范围为是取值范围为-4095+4095-4095+4095的整数,经常是常量的整数,经常是常量或常量表达式。或常量表达式。 - -Rm,shift RmRm,shift Rm是内含偏移量的寄存器,它不能是是内含偏移量的寄存器,它不能是R15R15。shiftshift是是RmRm的可选移位方法,可以是下列形式中的一种。的可选移位方法,可以是下列形式中的一种。ASR n ASR n 算术右移算术右移n n位(位(11n32n
12、32););LSL n LSL n 逻辑左移逻辑左移n n位(位(00n31n31););LSR n LSR n 逻辑右移逻辑右移n n位(位(11n32n32););ROR n ROR n 循环右移循环右移n n位(位(11n31n31););RRX RRX 循环右移循环右移1 1位,带扩展。位,带扩展。1 1、单一数据加载单一数据加载/存储指令存储指令(1)LDR指令指令格式为:格式为:LDR条件条件 目的寄存器,目的寄存器,LDR指令是指令是字加载指令字加载指令,用于从存储器中将一个,用于从存储器中将一个32位的字数据传送到目的寄存器中。位的字数据传送到目的寄存器中。0 x55R3R4
13、0 x400000000 x123456780 x400000000 x40000000存储器存储器地址地址应用示例:应用示例:LDR R3,R4;将将R4指向地址的字数据存入指向地址的字数据存入R30 x12345678示例示例示例示例v 指令示例:指令示例:LDR R3,R4 ;将存储器地址为;将存储器地址为R4的字数据读入寄存器的字数据读入寄存器R3。LDR R3,R1,R2 ;将存储器地址为;将存储器地址为R1+R2的字数据读入寄存器的字数据读入寄存器R3。LDR R3,R1,8 ;将存储器地址为;将存储器地址为R1+8的字数据读入寄存器的字数据读入寄存器R3。LDR R3,R1,R2
14、!;将存储器地址为;将存储器地址为R1+R2的字数据读入寄存器的字数据读入寄存器R3,并将新地址,并将新地址R1R2写入写入R1。LDR R3,R1,8 !;将存储器地址为;将存储器地址为R1+8的字数据读入寄存器的字数据读入寄存器R3,并将新地址,并将新地址R18写入写入R1。示例示例LDR R3,R1,R2;将存储器地址为;将存储器地址为R1的字数据读入寄存器的字数据读入寄存器R3,并,并将新地址将新地址R1R2写入写入R1。LDR R3,R1,R2,LSL3!;将存储器地址为;将存储器地址为R1R28的字数据读入寄存的字数据读入寄存器器R3,并将新地址,并将新地址R1R28写入写入R1。
15、LDR R3,R1,R2,LSL3;将存储器地址为;将存储器地址为R1的字数据读入寄存器的字数据读入寄存器R3,并,并将新地址将新地址R1R28写入写入R1。注:注:R15不可以作为偏移寄存器使用。不可以作为偏移寄存器使用。161 1、单一数据加载单一数据加载/存储指令存储指令(2)STR指令指令格式为:格式为:STR条件条件 源寄存器,源寄存器, STR指令是指令是字存储指令字存储指令,用于从源寄存器,用于从源寄存器中将一个中将一个32位的字数据传送到存储器中。使用方位的字数据传送到存储器中。使用方式可参考指令式可参考指令LDR。171 1、单一数据加载单一数据加载/存储指令存储指令指令示例
16、:指令示例:STRR3,R1,8;将;将R3中的字数据写入以中的字数据写入以R1为地址的存储器中为地址的存储器中,并将新地址,并将新地址R18写入写入R1。STRR3,R1,8;将;将R3中的字数据写入以中的字数据写入以R18为地址的存储为地址的存储器中。器中。188B/16B/8B/16B/双字的操作双字的操作v单一数据加载单一数据加载/ /存储指令还可以完成带符号和无符存储指令还可以完成带符号和无符号的号的8 8位字节位字节, ,带符号和无符号的带符号和无符号的1616位半字以及双位半字以及双字操作。字操作。v对于带符号加载时是带符号扩展到对于带符号加载时是带符号扩展到3232位,无符号位
17、,无符号加载时是用加载时是用“0 0” 扩展到扩展到3232位。位。v该组该组LDRLDR和和STRSTR指令也都有以下指令也都有以下4 4种句法形式:种句法形式: Op cond type RdOp cond type Rd,Rn Rn 零偏移零偏移 op cond type Rdop cond type Rd,RnRn,offset!offset!前索引偏移前索引偏移 Op cond type RdOp cond type Rd,label label 程序相对偏移程序相对偏移 Op cond type RdOp cond type Rd,RnRn,offset offset 后索引偏移后
18、索引偏移19其中:其中:type type 必须是下面所列的形式之一:必须是下面所列的形式之一:vH H 无符号半字;无符号半字;vSH SH 带符号半字(仅对带符号半字(仅对LDRLDR););vB B 无符号字节;无符号字节;vSB SB 带符号字节(仅对带符号字节(仅对LDRLDR);vD D 双字;双字;20例如例如v LDRH R1LDRH R1,R0R0,#22 #22 ;R1R0+22R1R0+22,加载加载1616位半字,位半字,0 0扩展到扩展到3232位位v LDREQSH R11LDREQSH R11,R6 R6 ;R11R6R11R6,加载加载1616位半字,带符号扩展
19、到位半字,带符号扩展到3232位位v STRH R4STRH R4,R0R0,R1R1! ;R4R0+R1R4R0+R1,存储最低的有效半到存储最低的有效半到R0+R1R0+R1所指的地址开所指的地址开始的两个字节处,地址写回始的两个字节处,地址写回R0R0v LDRD R6LDRD R6,R11 R11 ;R6R11R6R11,R7R11+4R7R11+4v STRD R4STRD R4,R9R9,#24 #24 ;R4R9+24R4R9+24,R5R9+28R5R9+281 1、单一数据加载单一数据加载/存储指令存储指令(3)LDRB指令指令 格式为:格式为:LDR条件条件B 目的寄存器,
20、目的寄存器, LDRB指令是指令是字节加载指令字节加载指令,用于从存储器,用于从存储器中将一个中将一个8位的字节数据传送到目的寄存器中,位的字节数据传送到目的寄存器中,同时将寄存器的高同时将寄存器的高24位清零。位清零。1 1、单一数据加载单一数据加载/存储指令存储指令指令示例:指令示例:LDRB R3,R1 ;将存储器地址为;将存储器地址为R1的字节数据读入寄存器的字节数据读入寄存器R0,并将并将R3的高的高24位清零。位清零。LDRB R3,R1,8 ;将存储器地址为;将存储器地址为R18的字节数据读入寄存器的字节数据读入寄存器R3,并将,并将R3的高的高24位清零。位清零。1 1、单一数
21、据加载单一数据加载/存储指令存储指令(4)LDRH指令指令格式为:格式为:LDR条件条件H 目的寄存器,目的寄存器,LDRH指令是指令是无符号半字加载指令无符号半字加载指令,用于从,用于从存储器中将一个存储器中将一个16位的半字数据传送到目的寄存位的半字数据传送到目的寄存器中,同时将寄存器的高器中,同时将寄存器的高16位清零。位清零。1 1、单一数据加载单一数据加载/存储指令存储指令指令示例:指令示例:LDRH R3,R1;将存储器地址为;将存储器地址为R1的半字数据读入寄存器的半字数据读入寄存器R3,并将并将R3的高的高16位清零。位清零。LDRH R3,R1,8 ;将存储器地址为;将存储器
22、地址为R18的半字数据读入寄存器的半字数据读入寄存器R3,并将,并将R3的高的高16位清零。位清零。LDRH R3,R1,R2 ;将存储器地址为;将存储器地址为R1R2的半字数据读入寄存的半字数据读入寄存器器R3,并将,并将R3的高的高16位清零。位清零。1 1、单一数据加载单一数据加载/存储指令存储指令(5) LDRSB 有符号的字节数据加载指令有符号的字节数据加载指令v格式:格式:LDRSB ,v功能:功能:同同LDRB指令,但该指令将寄存器指令,但该指令将寄存器Rd的高的高24位设置成所装载的字节数据符号位的值。位设置成所装载的字节数据符号位的值。v例如:例如:vLDRSB R0,R1v
23、;将内存中起始地址为将内存中起始地址为R1的一个字节数据装入的一个字节数据装入R0中中,R0的高的高24位设置成该字节数据的符号位位设置成该字节数据的符号位 1 1、单一数据加载单一数据加载/存储指令存储指令(6) LDRSH 有符号的半字数据加载指令有符号的半字数据加载指令v格式:格式:LDRSH ,v功能:功能:同同LDRH指令,但该指令将寄存器指令,但该指令将寄存器Rd的高的高16位设置成所装载的半字数据符号位的值。位设置成所装载的半字数据符号位的值。v例如:例如:vLDRSH R0,R1v;将内存中起始地址为将内存中起始地址为R1的一个的一个16位半字数据装入位半字数据装入R0中,中,
24、R0的高的高16位设置成该半字数据的符号位位设置成该半字数据的符号位 1 1、单一数据加载单一数据加载/存储指令存储指令(7)STRB指令指令格式为:格式为: STR条件条件B 源寄存器,源寄存器, STRB指令是指令是无符号字节存储指令无符号字节存储指令,用于从,用于从源寄存器中将一个源寄存器中将一个8位的字节数据传送到存储器位的字节数据传送到存储器中。该字节数据为源寄存器中的低中。该字节数据为源寄存器中的低8位。位。1 1、单一数据加载单一数据加载/存储指令存储指令指令示例:指令示例:STRB R3,R1 ;将寄存器;将寄存器R3中的字节数据写入以中的字节数据写入以R1为地址的存为地址的存
25、储器中。储器中。STRB R3,R1,8;将寄存器;将寄存器R3中的字节数据写入以中的字节数据写入以R18为地址为地址的存储器中。的存储器中。1 1、单一数据加载单一数据加载/存储指令存储指令(8)STRH指令指令格式为:格式为: STR条件条件H 源寄存器,源寄存器, STRH指令是指令是无符号半字存储指令无符号半字存储指令,用于从,用于从源寄存器中将一个源寄存器中将一个16位的半字数据传送到存储位的半字数据传送到存储器中。该半字数据为源寄存器中的低器中。该半字数据为源寄存器中的低16位。位。1 1、单一数据加载单一数据加载/存储指令存储指令指令示例:指令示例:STRH R3,R1 ;将寄存
26、器;将寄存器R3中的半字数据写入以中的半字数据写入以R1为地址的存为地址的存储器中。储器中。STRH R3,R1,8 ;将寄存器;将寄存器R3中的半字数据写入以中的半字数据写入以R18为地址为地址的存储器中。的存储器中。2.2.多数据加载多数据加载/ /存储指令(存储指令( LDM LDM和和STM STM ) ARM微处理器所支持微处理器所支持批量数据加载批量数据加载/存储指令存储指令可以一次在可以一次在一片连续的一片连续的存储器单元和存储器单元和多个寄存器多个寄存器之之间传送数据。间传送数据。 批量加载指令用于将一片连续的存储器中的数批量加载指令用于将一片连续的存储器中的数据传送到多个寄存
27、器,批量数据存储指令则完成相据传送到多个寄存器,批量数据存储指令则完成相反的操作。反的操作。2.2.多数据加载多数据加载/ /存储指令(存储指令( LDM LDM和和STM STM )常用的加载存储指令如下:常用的加载存储指令如下:LDM(或(或STM)指令)指令格式为:格式为:LDM(或(或STM)条件条件类型类型 基址寄存器基址寄存器!,寄存器列表,寄存器列表 LDM(或(或STM)指令用于从由基址寄存器所指示的)指令用于从由基址寄存器所指示的一片连续存储器到寄存器列表所指示的多个寄存器之间传一片连续存储器到寄存器列表所指示的多个寄存器之间传送数据,该指令的常见用途是将多个寄存器的内容入栈
28、或送数据,该指令的常见用途是将多个寄存器的内容入栈或出栈。出栈。v !为可选后缀,若选用该后缀,则当数据传送完毕之后,将为可选后缀,若选用该后缀,则当数据传送完毕之后,将最后的地址写入基址寄存器,否则基址寄存器的内容不改变。最后的地址写入基址寄存器,否则基址寄存器的内容不改变。v为可选后缀,这是一个只是在数据块传送中使用的后缀,为可选后缀,这是一个只是在数据块传送中使用的后缀,不允许在用户模式或系统模式下使用。不允许在用户模式或系统模式下使用。 当指令为当指令为LDM且寄存器列表中包含且寄存器列表中包含R15,选用该后缀时表示:除,选用该后缀时表示:除了正常的数据传送之外,还将了正常的数据传送
29、之外,还将SPSR复制到复制到CPSR。 同时,该后缀还表示传入或传出的是用户模式下的寄存器,而不同时,该后缀还表示传入或传出的是用户模式下的寄存器,而不是当前模式下的寄存器。是当前模式下的寄存器。v 基址寄存器不允许为基址寄存器不允许为R15。v 寄存器列表可以为寄存器列表可以为R0R15的任意组合,若使用连续的的任意组合,若使用连续的寄存器时,可以使用寄存器时,可以使用“-”表示省略。表示省略。2.2.多数据加载多数据加载/ /存储指令(存储指令( LDM LDM和和STM STM )其中,其中,类型类型为以下几种情况:为以下几种情况:v IA 每次传送后地址加每次传送后地址加1,递增方式
30、;,递增方式;v IB 每次传送前地址加每次传送前地址加1,递增方式;,递增方式;v DA 每次传送后地址减每次传送后地址减1,递减方式;,递减方式;v DB 每次传送前地址减每次传送前地址减1,递减方式;,递减方式;v FD 满递减堆栈;满递减堆栈;v ED 空递减堆栈;空递减堆栈;v FA 满递增堆栈;满递增堆栈;v EA 空递增堆栈;空递增堆栈;343.2.3 ARM 存储器访问指令存储器访问指令STMIBSTMIB R0R0!,R1,R2,R3R1,R2,R3指令执行前指令执行前指令执行后指令执行后R0R0R3R3R2R2R1R1R0R0STMIA R0!,R1,R2,R3STMIA
31、R0!,R1,R2,R3指令执行前指令执行前指令执行后指令执行后R0R0R3R3R2R2R1R1R0R0地址增地址增STMDA R0!,R1,R2,R3STMDA R0!,R1,R2,R3指令执行前指令执行前指令执行后指令执行后R0R0R3R3R2R2R1R1R0R0STMDB R0!,R1,R2,R3STMDB R0!,R1,R2,R3指令执行前指令执行前指令执行后指令执行后R0R0R3R3R2R2R1R1R0R0地址减地址减2.2.多数据加载多数据加载/ /存储指令(存储指令( LDM LDM和和STM STM )v 例如例如 LDMIA/IB/DA/DB R13!,R0-R1,R3;v
32、各指令执行完后,结果如图所示。各指令执行完后,结果如图所示。 IB DA DB2.2.多数据加载多数据加载/ /存储指令(存储指令( LDM LDM和和STM STM )v FD、ED、FA和和EA指定是满栈还是空栈,是升序栈还是降序指定是满栈还是空栈,是升序栈还是降序栈,用于堆栈寻址。栈,用于堆栈寻址。v 一个满栈的栈指针指向上次写的最后一个数据单元一个满栈的栈指针指向上次写的最后一个数据单元.v 空栈的栈指针指向第一个空闲单元。空栈的栈指针指向第一个空闲单元。v 一个降序栈是在内存中反向增长而升序栈在内存中正向增长。一个降序栈是在内存中反向增长而升序栈在内存中正向增长。372.2.多数据加
33、载多数据加载/ /存储指令(存储指令( LDM LDM和和STM STM )指令示例:指令示例:STMFD R13!,R0,R4-R12,LR;将寄存器列表中的寄存器(;将寄存器列表中的寄存器(R0,R4到到R12,LR)存入)存入堆栈。堆栈。.LDMFD R13!,R0,R4-R12,PC;将堆栈内容恢复到寄存器(;将堆栈内容恢复到寄存器(R0,R4到到R12,PC)。)。3.交换指令交换指令(SWP)格式为:格式为: SWP条件条件 Rd,Rm,Rn SWP指令是数据指令是数据字交换字交换指令,用于将源寄存器指令,用于将源寄存器Rn所指向的存储器中的字数据传送到目的寄存器中,所指向的存储器
34、中的字数据传送到目的寄存器中,同时将源寄存器同时将源寄存器Rm中的字数据传送到源寄存器中的字数据传送到源寄存器Rn所指向的存储器中。所指向的存储器中。 RdRn,RnRm 当源寄存器当源寄存器Rm和目的寄存器为同一个寄存器时,和目的寄存器为同一个寄存器时,指令交换该寄存器和存储器的内容。指令交换该寄存器和存储器的内容。3.交换指令交换指令(SWP)指令示例:指令示例:SWP R1,R2,R3 ;将将R3所指向的存储器中的字数据传送到所指向的存储器中的字数据传送到R1,同时,同时;将;将R2中的字数据传送到中的字数据传送到R3所指向的存储单元。所指向的存储单元。SWPEQ R1,R1,R2 ;Z
35、=1时,完成将时,完成将R2所指向的存储器中的字数据与所指向的存储器中的字数据与;R1中的字数据交换。中的字数据交换。3.交换指令交换指令(SWP)SWPB指令指令格式为:格式为:SWP条件条件B 目的寄存器,源寄存器目的寄存器,源寄存器1,源寄存器源寄存器2SWPB指令是指令是字节交换指令字节交换指令,用于将源寄存器,用于将源寄存器2所所指向的存储器中的字节数据传送到目的寄存器中,指向的存储器中的字节数据传送到目的寄存器中,目的寄存器的高目的寄存器的高24位清零,同时将源寄存器位清零,同时将源寄存器1中的中的字节数据传送到源寄存器字节数据传送到源寄存器2所指向的存储器中。所指向的存储器中。3
36、.交换指令交换指令(SWP)指令示例:指令示例:SWPB R1,R2,R3;将;将R3所指向的存储器中的字节数据传送到所指向的存储器中的字节数据传送到R1,R1的高的高24位清零,同时将位清零,同时将R2中的低中的低8位数据传位数据传送到送到R3所指向的存储单元。所指向的存储单元。SWPB R1,R1,R2;该指令完成将;该指令完成将R2所指向的存储器中的字节数据所指向的存储器中的字节数据与与R1中的低中的低8位数据交换。位数据交换。3.1.2 3.1.2 算术和逻辑指令算术和逻辑指令v算术和逻辑算术和逻辑指令只能对寄存器的内容进行操作,指令只能对寄存器的内容进行操作,不允许对存储器不允许对存
37、储器中的数据进行操作,也中的数据进行操作,也不允许不允许指指令令直接使用存储器直接使用存储器的数据或在的数据或在寄存器与存储器寄存器与存储器之之间传送数据。间传送数据。v算术和逻辑算术和逻辑指令可分为指令可分为3大类:大类: 数据传送指令数据传送指令 算术逻辑运算指令算术逻辑运算指令 比较指令比较指令3.1.2 3.1.2 算术和逻辑指令算术和逻辑指令v数据传送指令数据传送指令用于在用于在寄存器和寄存器之间寄存器和寄存器之间进行数进行数据的传输。据的传输。v算术逻辑运算指令算术逻辑运算指令完成常用的算术与逻辑的运算,完成常用的算术与逻辑的运算,该类指令不但将运算该类指令不但将运算结果保存结果保
38、存在目的寄存器中,在目的寄存器中,同时同时更新更新CPSR中的相应中的相应条件标志位条件标志位。v比较指令比较指令是完成对指定的两个寄存器(或是完成对指定的两个寄存器(或1个寄个寄存器,存器,1个立即数)进行比较,个立即数)进行比较,不保存不保存运算结果,运算结果,只影响只影响CPSR中相应的中相应的条件标志位条件标志位。1.1.算术指令算术指令(1)ADD,SUB,RSB,ADC,SBC和和RSC指令指令v加、减和反减指令,前三个不带进位或借位,后加、减和反减指令,前三个不带进位或借位,后三个带进位或借位。三个带进位或借位。v其句法是:其句法是:opcondS Rd,Op1,Op21.1.算
39、术指令算术指令ADDADD加法指令加法指令(Addition) ADDS , v功能:功能:ADDADD将把两个操作数加起来,把结果放置将把两个操作数加起来,把结果放置到目的寄存器中。到目的寄存器中。 Rd = op1 + op2l 操作数操作数1 1是一个寄存器;是一个寄存器;l 操作数操作数2 2可以是一个寄存器,被移位的寄存器,或一个可以是一个寄存器,被移位的寄存器,或一个立即数。立即数。例:例:ADD R0, R1, R2 ; R0 = R1 + R2R0 = R1 + R2 ADD R0, R1, #256 ; R0 = R1 + 256R0 = R1 + 256 ADD R0, R
40、2, R3,LSL#1 ; R0 = R2 + (R3 1) R0 = R2 + (R3 1) 451.1.算术指令算术指令ADCADC带进位加法指令带进位加法指令 (Addition with Carry)ADCS ,v 功能:将寄存器功能:将寄存器RnRn、操作数、操作数op2op2表示的值以及进位标志位表示的值以及进位标志位三者相加,然后把结果存入目的寄存器三者相加,然后把结果存入目的寄存器RdRd中。它使用一中。它使用一个进位标志位,这样就可以做比个进位标志位,这样就可以做比3232位大的加法。位大的加法。 Rd= op1 + op2 + carry 进位标志值进位标志值 461.1.
41、算术指令算术指令 ADCv 下列例子将完成两个下列例子将完成两个128位数的相加。位数的相加。128 位结果位结果:寄存器寄存器 0、1、2、和、和 3;第一个第一个 128 位数位数: 寄存器寄存器 4、5、6、和、和 7;第二个第二个 128 位数位数: 寄存器寄存器 8、9、10、和、和 11。 ADDS R0, R4, R8 ; 加低端的字加低端的字 ADCS R1, R5, R9 ; 加下一个字,带进位加下一个字,带进位 ADCS R2, R6, R10 ; 加第三个字,带进位加第三个字,带进位 ADCS R3, R7, R11 ; 加高端的字,带进位加高端的字,带进位47注意:注意
42、:相加时,不要忘记设置相加时,不要忘记设置S S后缀来更改进位标志。后缀来更改进位标志。1.1.算术指令算术指令 SUB48SUB减法指令减法指令(Subtraction)SUBS ,v 功能:功能:SUB SUB 用操作数用操作数op1减去操作数减去操作数op2 ,把结果放置,把结果放置到目的寄存器中。到目的寄存器中。 Rd = op1 - op2 l 操作数操作数1 1是一个寄存器,是一个寄存器,l 操作数操作数2 2可以是一个寄存器,被移位的寄存器,或一个立可以是一个寄存器,被移位的寄存器,或一个立即数即数: : SUB R0, R1, R2 ;R0 = R1 - R2 R0 = R1
43、- R2 SUB R0, R1, #256 ; R0 = R1 - 256 R0 = R1 - 256 SUB R0, R2, R3,LSL#1 ; R0 = R2 - (R3 R0 = R2 - (R3 左移左移1 1位位) )1.1.算术指令算术指令 SBC49SBC带借位减法指令带借位减法指令:(Subtraction with Carry)SBCS ,v 功能:用寄存器功能:用寄存器op1的值减去操作数的值减去操作数op2表示的值,再减表示的值,再减去进位标志取反的值,然后把结果存入目的寄存器去进位标志取反的值,然后把结果存入目的寄存器RdRd中。中。它使用进位标志来表示借位,这样就可
44、以做大于它使用进位标志来表示借位,这样就可以做大于 32 32 位位的减法。的减法。 Rd= op1 - op2 - !carry lSBCSBC生成进位标志时如果需要借位则清除进位标志。所以,生成进位标志时如果需要借位则清除进位标志。所以,指令要对进位标志进行一个非操作指令要对进位标志进行一个非操作, ,在指令执行期间自动的在指令执行期间自动的反转此位。反转此位。1.1.算术指令算术指令 SBCv 例如:例如: 第一个第一个6464位操作数存放在寄存器位操作数存放在寄存器R2R2,R3R3中;中; 第二个第二个6464位操作数存放在寄存器位操作数存放在寄存器R4R4,R5R5中;中;6464
45、位结果存放在位结果存放在R0R0,R1R1中。中。 SUBS R0,R2,R4; 低低32位相减,位相减,S表示结果影响条表示结果影响条件标志位的值件标志位的值 SBC R1,R3,R5;高高32位相减位相减501.1.算术指令算术指令 RSB51RSB反向减法指令反向减法指令(Reverse Subtraction) RSBS ,v 功能:功能:SUBSUB用操作数用操作数op2减去操作数减去操作数op1,把结果放置到目的,把结果放置到目的寄存器中寄存器中 。Rd = op2 op1l 操作数操作数1 1是一个寄存器,是一个寄存器,l 操作数操作数2 2可以是一个寄存器,被移位的寄存器,或一
46、个立可以是一个寄存器,被移位的寄存器,或一个立即数。即数。 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=(R31)-R2R0=(R31)-R21.1.算术指令算术指令 RSC52RSC带借位的反向减法指令带借位的反向减法指令(Reverse Subtraction with Carry)RSCS ,v 功能:同于功能:同于SBCSBC,但倒换了两个操作数的前后位置。,但倒换了两个操作数的前后位置。 Rd = op2 - op1 - !carr
47、y l例如:第一个例如:第一个6464位操作数存放在寄存器位操作数存放在寄存器R2R2,R3R3中;中; 第二个第二个6464位操作数存放在寄存器位操作数存放在寄存器R4R4,R5R5中;中; 64 64位结果存放在位结果存放在R0R0,R1R1中。中。 SUBS R0,R2,R4; 低低3232位相减,位相减,S S表示结果影响表示结果影响 寄存器寄存器CPSRCPSR的值的值 RSC R1, R5,R3; 高高3232位相减位相减2.2.逻辑指令逻辑指令ANDAND逻辑与指令逻辑与指令(logical AND) ANDS ,v 功能:功能:AND AND 将在两个操作数上按位进行逻辑与,把
48、结果放置将在两个操作数上按位进行逻辑与,把结果放置到目的寄存器中:到目的寄存器中:Rd = op1 AND op2。v 用于清除特定的位;用于清除特定的位; 操作数操作数1 1是一个寄存器是一个寄存器 操作数操作数2 2可以是一个寄存器,被移位的寄存器,或一个立可以是一个寄存器,被移位的寄存器,或一个立即数即数 例如:例如:AND R0, R0, #3 ; 保持保持 R0 R0 的位的位0 0和和1 1,其余位清,其余位清0 0532.2.逻辑指令逻辑指令ORRORR逻辑或指令逻辑或指令(logical OR) ORRS ,v 功能:功能:OROR将在两个操作数上按位进行逻辑或,把结果放置将在
49、两个操作数上按位进行逻辑或,把结果放置到目的寄存器中,到目的寄存器中,Rd = op1 OR op2 ;v 将特定的位将特定的位置置1 1。 操作数操作数1 1是一个寄存器是一个寄存器 操作数操作数2 2可以是一个寄存器,被移位的寄存器,或一个可以是一个寄存器,被移位的寄存器,或一个立即数。立即数。例如:例如: ORR R0, R0, #3 ; 设置设置 R0 R0 中位中位 0 0 和和 1 ,1 ,其余位不变其余位不变 542.2.逻辑指令逻辑指令EOREOR逻辑异或指令逻辑异或指令(logical Exclusive OR) EORS ,v 功能:功能:EOR EOR 将在两个操作数上按
50、位进行逻辑异或,把结果放将在两个操作数上按位进行逻辑异或,把结果放置到目的寄存器中,置到目的寄存器中,Rd = op1 EOR op2 ;v 将特定的位将特定的位反转反转。 操作数操作数1 1是一个寄存器是一个寄存器 操作数操作数2 2可以是一个寄存器,被移位的寄存器,或一个立可以是一个寄存器,被移位的寄存器,或一个立即数即数例如:例如:EOR R0, R0, #3 ; 反转反转 R0 R0 中的位中的位0 0和和1 1552.2.逻辑指令逻辑指令BICBIC位清除指令位清除指令(Bit Clear) BICS ,;v 功能:功能:BIC BIC 是在一个字中是在一个字中清除位清除位的一种方法
51、,与的一种方法,与 OR OR 位设置是相位设置是相反的操作反的操作。Rd = op1 AND (!op2) vop2op2是一个是一个3232位位位掩码位掩码(mask)(mask)。如果在掩码中设置了某。如果在掩码中设置了某一位,则清除一位,则清除op1中的这一位。未设置的掩码位指示中的这一位。未设置的掩码位指示op1中此位保持不变。中此位保持不变。BICS R0,R2,0 x80000000 ;清除;清除 R2 中的位中的位 31,其余的位保持不变,刷新标志位。,其余的位保持不变,刷新标志位。563.3.传送指令传送指令MOVMOV57MOV数据传送指令数据传送指令 (Move) MOV
52、S , v 功能:从另一个寄存器、被移位的寄存器、或一个立即数功能:从另一个寄存器、被移位的寄存器、或一个立即数装载一个值到目的寄存器装载一个值到目的寄存器; Rdop1 。l指定指定RdRd和和op1op1为同一寄存器,实现为同一寄存器,实现NOPNOP指令的效果,或可以实指令的效果,或可以实现移位操作。现移位操作。 MOV R0, R0 ; R0 = R0. NOPR0 = R0. NOPMOV R0, R0, LSL #3 ; R0 = R0 R0 = R0 * * 8 8l如果如果R15R15是目的寄存器,将修改程序计数器或标志。用于返是目的寄存器,将修改程序计数器或标志。用于返回到调
53、用代码,方法是把连接寄存器的内容传送到回到调用代码,方法是把连接寄存器的内容传送到 R15:R15: MOV PC, R14 ; 退出到调用者退出到调用者MOVS PC, R14 ;退出到调用者并恢复标志位退出到调用者并恢复标志位3.传送指令传送指令MVNMVN数据取反传送指令数据取反传送指令(Move Negative) MVNS ,v 功能:功能:MVN从另一个寄存器、被移位的寄存器、或一个从另一个寄存器、被移位的寄存器、或一个立即值装载一个被取反的值到目的寄存器;立即值装载一个被取反的值到目的寄存器; Rd = !op1v 实际是逻辑非操作:取反的值加实际是逻辑非操作:取反的值加1 1才
54、是它的取负的值才是它的取负的值. . MVN R0, #4 ; R0 =-5 R0 =-5 MVN R0, #0 ; R0 =-1 R0 =-1 584.乘法指令乘法指令v 乘法指令与普通算术指令在对操作数的限制上有所不同乘法指令与普通算术指令在对操作数的限制上有所不同: 给出的所有操作数和目的寄存器必须为简单的寄存器。给出的所有操作数和目的寄存器必须为简单的寄存器。 操作数操作数 2不能使用立即数或被移位的寄存器。不能使用立即数或被移位的寄存器。 目的寄存器和操作数目的寄存器和操作数1必须是不同的寄存器。必须是不同的寄存器。 不能指定不能指定R15为目的寄存器。为目的寄存器。4.乘法指令乘法
55、指令MUL(32位)位)MUL32MUL32位乘法指令位乘法指令(Multiplication)(Multiplication) MULS ,v 功能:功能:MULMUL提供提供3232位整数乘法。该指令根据位整数乘法。该指令根据S S标志,决定标志,决定操作是否影响操作是否影响CPSRCPSR的值。的值。RnRn和和op2op2的值为的值为3232位的有符号数位的有符号数或无符号数。或无符号数。 Rd=Rn*op2 例如:例如: MULS R0,R1,R2 ;R0R0R1R1R2R2,结果影响寄结果影响寄 ;存器;存器CPSRCPSR的值的值 604.乘法指令乘法指令 MLA(32位)位)6
56、1MLA 32位乘加指令位乘加指令 (Multiplication with Accumulate) MLAS ,v 功能:功能:MLAMLA的行为同于的行为同于MULMUL,但它把操作数,但它把操作数3 3的值加到结果上,的值加到结果上,其中其中op2op2,op3op3必须为寄存器必须为寄存器 。 Rd=(Rn*op2)+op3,这在这在求总和求总和时有用时有用l Rn Rn、op2op2和和op3op3的值为的值为3232位的有符号数或无符号数。位的有符号数或无符号数。 例如:例如: MLA R0,R1,R2,R3; R0 R0R1R1R2R2R3 R3 1.CMP比较指令比较指令 (C
57、ompare) CMP ,v 功能:将寄存器功能:将寄存器RnRn的值和操作数的值和操作数op2op2所表示的值进行比较,所表示的值进行比较,根据结果更新根据结果更新CPSRCPSR中条件标志位的值。中条件标志位的值。 status = Rn - op2的结果的结果 l 该指令进行一次减法运算,但该指令进行一次减法运算,但不存储结果,只更改条件标志不存储结果,只更改条件标志位位,后面的指令就可以根据条件标志位来决定是否执行。该指令,后面的指令就可以根据条件标志位来决定是否执行。该指令不需要显式的指定不需要显式的指定S S后缀来更改状态标志。后缀来更改状态标志。l 操作数操作数op1op1为寄存
58、器或立即数。为寄存器或立即数。CMP R0,5; 计算计算R0R0-5 5,根据结果设置条件标志位根据结果设置条件标志位ADDGT R0,R0,5; 如果如果R05R05,则执行则执行ADDGTADDGT指令指令3.1.3 比较指令比较指令3.1.3比较指令比较指令2.CMN取负比较指令取负比较指令CMN ,v CMN指令是指令是比较非指令比较非指令,也是做一次减法运算,用第,也是做一次减法运算,用第1操操作数减去第作数减去第2操作数的负值,结果不保存,只是刷新条件操作数的负值,结果不保存,只是刷新条件标志位,对条件标志位的影响和比较指令标志位,对条件标志位的影响和比较指令CMP相同。相同。v
59、status = Rn ( op2)的结果的结果例:例:CMNR1,#0 x00;比较;比较R1和和0 xFFFFFFFFADDCS R5,R5,#0 x20;如果;如果C=1,则,则R5=R5+0 x20ADDCC R5,R5,#0 x10;如果;如果C=0,则,则R5=R5+0 x103.1.3比较指令比较指令3.TST位测试指令位测试指令(Test bits) TST ,v 功能:将寄存器功能:将寄存器RnRn的值和操作数的值和操作数op2op2所表示的值按位做逻所表示的值按位做逻辑与操作,根据结果更新辑与操作,根据结果更新CPSRCPSR中条件标志位的值,但不中条件标志位的值,但不储存
60、结果。储存结果。用于检查寄存器用于检查寄存器RnRn是否设置了是否设置了op2op2中相应的位中相应的位。 Status = Rn AND op2 64v 操作数操作数RnRn是要测试的数据字而操作数是要测试的数据字而操作数op2op2是一个位掩码。是一个位掩码。经过测试后,设置经过测试后,设置ZeroZero标志。不需要指定标志。不需要指定S S后缀。后缀。 TST R0,5; 测试测试R0R0中第中第0 0位和第位和第2 2位是否为位是否为1 13.1.3比较指令比较指令4.TEQ指令指令TEQ ,v TEQ指令是指令是测试指令测试指令,用于把一个寄存器的内容和另一,用于把一个寄存器的内容
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2024年农作物种植与养护合同3篇
- 2024年度电梯设备安全检查与维修合同范本2篇
- 2024年度医疗机构与养老机构之间的医养结合服务合同3篇
- 2024年度企业招聘服务及招聘广告投放合同3篇
- 2024年育儿护理专家合作合同版B版
- 2024压缩天然气运输与加气站运营维护服务合同3篇
- 2024年装修施工包工包料协议样本
- 2024年汽车喷漆原材料供应与仓储服务合同3篇
- 混凝土浇筑课程设计
- 淘宝课程设计可以退吗
- 徒手整形教学课件
- 西方思想经典-南京大学中国大学mooc课后章节答案期末考试题库2023年
- 跨平台移动应用开发-Flutter实践-南京师范大学泰州学院中国大学mooc课后章节答案期末考试题库2023年
- 文化资源数字化技术有哪些
- 2023年杭州联合银行校园招聘笔试历年高频考点试题答案详解
- 灌装轧盖机和供瓶机设备验证方案
- 人教版五年级下册数学讲义
- 瓦楞纸箱工艺流程演示文稿
- 汉语教学 《成功之路+进步篇+2》第16课课件
- SB/T 10756-2012泡菜
- GB/T 36393-2018土壤质量自然、近自然及耕作土壤调查程序指南
评论
0/150
提交评论