第2章 指令系统(2013年2月28日).ppt

第2章 指令系统(2013年2月28日)

共142页 由存储器向寄存器传送数据的指令叫做加载指令;而由寄存器向存储器传送数据的指令叫做存储指令。 Load指令的基本格式为: LDR{cond} Rd,address_mode Store指令的基本格式为: STR{cond} Rd,address_mode 2.3.7 加载/存储指令(续) 1、address_mode的寻址方式 address_mode具有:寄存器变址寻址和比例寄存器变址寻址两种方式。 变址寻址方式的操作数地址由两部分组成: 操作数地址 = 基地址 + 偏移量(有符号数) 基地址由Rn提供,偏移量由立即数、寄存器Rm或对Rm进行移位来提供。 address_mode有下表列的两种基本方式。 偏移量为进行了移位运算的寄存器中的数 [Rn,Rm,shift#shift_imm] 偏移量为立即数或寄存器中的数据 [Rn,#offset_12|Rm] 说明 寻址方式 根据数据传送的时机以及在指令执行后基址寄存器是否被更新,寄存器变址又有:前变址、回写前变址和后变址三种方式。 1、address_mode的寻址方式(续) 执行指令时,如果先进行变址运算,后传送数据,那么这种方式就叫做前变址方式。 1、address_mode的寻址方式(续) LDR R0,[R1,R2] ;R0←((R1)+(R2)) LDR R0,[R1,#8] ; R0←((R1)+8) 如果先传送数据,后进行变址运算的方式就叫做后变址方式。从指令格式上来看,后变址指令的格式如下: LDR R0,[R1],#8 1、address_mode的寻址方式(续) UMLAL指令把Rm作为被乘数,Rs作为乘数进行乘法运算,并把结果的低32位同RdLo原有的值相加后再存入目的寄存器RdLo;同样结果的高32位同RdHi原有的值相加后再存入目的寄存器RdHi。所有操作数均为寄存器寻址,且两个源操作数应为无符号数。 12、无符号数的带加法运算的64位积32位乘法指令UMLAL(续) UMLAL R0,R1,R2,R3 ; R0←(R2)X(R3)的低32位 +(R0), R1←(R2)X(R3)的高32位 +(R1) 标志的修改同SMULL。 12、无符号数的带加法运算的64位积32位乘法指令UMLAL(续) 2.3.3 逻辑运算指令 1、逻辑“与”运算指令AND AND指令的格式为: AND{cond}{S} Rd,Rn,operand2 AND 指令把 Rn 和 operand2 按位进行逻辑“与”运算,并把结果存入 Rd。 1、逻辑“与”运算指令AND(续) AND R0,R0,#3 ;该指令保持R0的0、1位,其余位清零 C=0 C 如果Rd为0则Z=1,否则Z=0 Z 寄存器Rd[31]被复制到N N 取值 受影响的CPSR标志位 1、逻辑“与”运算指令AND(续) 2、逻辑“或”运算指令ORR ORR指令的格式为: ORR{cond}{S} Rd,Rn,operand2 ORR 指令把 Rn 和 operand2 按位进行逻辑“或”运算,并把结果存入 Rd。 ORR R0,R0,#3 ;该指令设置R0的0、1位,其余位不变 例:请把寄存器R2中的高8位数据传送到寄存器R3的低8位。 MOV R0,R2,LSR #24 ;将R2右移24位,即将其高8位移至低8位送R0。 ORR R3,R0,R3,LSL #8 ;将R3左移8位后将R0低8位送至R3。 标志位的影响同AND。 2、逻辑“或”运算指令ORR(续) 注意:R2原来的内容没有变 注意:R3原来的高24位内容变了 3、逻辑“异或”指令EOR EOR指令的格式为: EOR{cond}{S} Rd,Rn,operand2 EOR 指令把 Rn 和 operand2 按位进行逻辑“异或”运算,并把结果存入 Rd。 EOR R0,R0,#3 ;该指令反转R0的0、1位,其余位保持不变。 标志位的修改同AND。 4、位清除指令BIC BIC指令的格式为: BIC{cond}{S} Rd,Rn,operand2 BIC 指令的功能是清除 Rn 的某些位,并把结果存入 Rd。 Rn为寄存器寻址方式;operand2可以是寄存器寻址方式,也可以是立即数寻址方式。operand2为32位掩码,如果在掩码中设置了某一位,则清除这一位,未设置的掩码位保持不变。 BIC R0,R0,#0xB ;该指令清除R0中的0、1和3位,其余位保持

文档评论(0)

1亿VIP精品文档

相关文档