更好说明寻址过程

上传人:san****019 文档编号:70093286 上传时间:2019-01-15 格式:PPT 页数:56 大小:391.81KB
返回 下载 相关 举报
更好说明寻址过程_第1页
第1页 / 共56页
更好说明寻址过程_第2页
第2页 / 共56页
更好说明寻址过程_第3页
第3页 / 共56页
更好说明寻址过程_第4页
第4页 / 共56页
更好说明寻址过程_第5页
第5页 / 共56页
点击查看更多>>
资源描述

《更好说明寻址过程》由会员分享,可在线阅读,更多相关《更好说明寻址过程(56页珍藏版)》请在金锄头文库上搜索。

1、事项,更好理解MMU,下载http:/10.1.4.123中的mmu.pdf,更好说明寻址过程,为什么我们要学指令?,C 语言:y=a*(b+c) ARM指令实现:ADR R4,b LDR R0,R4 ADR r4,c LDR r1,r4 ADD r2,r0,r1 ADR r4,a LDR r0,r4 MUL r2,r2,r0 ADR r4,y STR r2,r4,本课内容,ARM指令的条件执行 Load/Store类指令 ARM数据处理类指令 ARM转移类指令 ARM协处理器类指令 ARM杂项指令 XScale指令,5.2.2 ARM指令的条件执行,几乎所有的ARM指令均可包含一个可选的条件

2、码,句法说明中以cond表示。只有在CPSR中的条件码标志满足指定的条件时,带条件码的指令才能执行。 几乎所有的ARM数据处理指令均可以根据执行结果来选择是否更新条件码标志。 条件码中的N,Z,C和V位的值将决定指令如何执行,条件码如表所示,5.2.3 Load/Store类指令,单字和无符号字节Load/Store类指令 半字和有符号字节Load/Store类指令 双字Load/Store类指令 多寄存器Load/Store类指令 预读取PLD指令 内存和寄存器交换类指令,单字和无符号字节Load/Store类指令,功能:提供ARM寄存器和内存之间单字节(8位)或单字(32位)数据的传送 格

3、式: 1)零偏移(zero offset) LDR | STR BT Rd ,Rn ;(Rn)Rd 零偏移指的是将Rn的内容作为传送数据的地址。 2)前变址(pre-indexed offset) LDR | STR B Rd , Rn , ! ;(Rn)+ offset)Rd 前变址指的是在数据传送之前,将偏移量加到Rn中,其结果作为传送数据的存储地址。若使用后缀“!”,则结果写回到Rn中,Rn不允许是R15 3)程序相对偏移(programrelative) LDR | STR Rd , LABEL ;(LABEL)Rd 程序相对偏移指的是由PC计算偏移量,并将PC作为Rn生成前变址指令。

4、不能使用后缀“!”。 4)后变址(post-indexed offset) LDR | STR B T Rd , Rn , 后变址指的是将Rn的值用作传送数据的存储器地址,数据传送后,偏移量加到Rn中,结果写回到Rn。Rn不允许是R15。LDR Rd , Rn , offset 等价为:(Rn)Rd,(Rn)+offsetRn,例 1) :将R0中的内容存放进外设中。 LDR R1 , UARTADD ; 将UART地址放进R1中 STRB R0 , R1 ;将数据放进外设中 UARTADD 读取一个字,该字位于标号lacaldata所在地址,半字和有符号字节Load/Store类指令,功能:

5、提供ARM寄存器和内存之间半字(16位)和有符号字节(8位)数据的传送。 格式:1)零偏移(zero offset) LDR | STR H | SH | SB Rd,Rn 2)前变址(pre-indexed offset) LDR | STR H | SH | SB Rd , Rn , ! 3)程序相对偏移(pregramrelatve) LDR | STR H | SH | SB Rd , LABEL 4)后变址(post-indexed offset) LDR | STRH | SH | SB Rd , Rn , 其中: H | SH | SB 表示数据类型选择 SH 对有符号半字(仅L

6、DR) H 对无符号半字; SB 对有符号字节(仅LDR)。,例:LDREQSH R11,R6 ;(有条件地)R11R6,读取16位半字,有符号扩展到32位 LDRH R1,R0,#22 ;R1R0+22,读取16位半字,零扩展到32位 STRH R4,R0+R1 ;存储最低的有效半字到R0+R1地址开始的两个字节,地址写回到R0 LDRSB R6,constf ;读取位于标号constf地址中的字节,有符号扩展,双字Load/Store类指令,功能:提供ARM寄存器和内存之间双字(64位)数据的传送 格式:1)零偏移(zero offset) LDR | STR D Rd,Rn 2)前变址格

7、式(pre-indexed offset) LDR | STR D Rd , Rn , ! 3)程序相对偏移(pregramrelatve) LDR | STR D Rd , LABEL 4)后变址格式(post-indexed offset) LDR | STR D Rd , Rn , ,多寄存器Load/Store类指令,功能: 装入和存储多个寄存器,可以传送R0R15的任何组合 格式: 1)标准格式 LDM | STM Rn! , 2)非用户模式下,用下面格式可以同时把当前的SPSR写入CPSR中,转向用户模式,寄存器组包含PC。 LDM Rn! , 3)非用户模式下,用下面格式可以实现

8、访问用户模式的寄存器,但寄存器组不包含PC。 LDM | STM Rn , ,例 1) 若保存三个工作寄存器状态和返回地址, STMFD R13! , R0-R2 , R14 若恢复三个工作寄存器状态和返回地址 LDMFD R13! , R0-R2 , PC 例 2) LDMIA R8,R0,R2,R9 ; (R8)R0 ; (R8)+4)R2 ; (R8)+8)R9 STMDB R1!,R3R6,R11,R12 ; (R3)R1- 4 ; (R4)R1- 8 ; (R5)R1- 12 ; (R6)R1- 16 ; (R11)R1- 20 ; (R12)R1- 24 ; (R1)- 24R1

9、STMFD R13!,R0,R4-R7,LR ;寄存器进栈 LDMFD R13!,R0,R4-R7,PC ; 同样的寄存器出栈,从子程序返回 例 3) 子程序调用 SUB1 STMFD SP! , R0-R2 , R14 ;保护R0R2和返回地址 ; 其它指令 BL label ; 允许子程序嵌套 ; 其它指令 LDMFD SP! , R0-R2 , R15 ;恢复R0R2,返回子程序调用程序后执行,预读取PLD指令,功能:Cache 预读取(PLD,PreLoaD),使用PLD指示存储系统从后面几条新指令所指定的存储器地址读取。存储系统可使用这种方法加速以后的存储器访问。 格式:PLD Rn

10、,offset 其中:Rn 存储器的基址寄存器。 Offset 加在Rn上的偏移量 PLD R9,#-2481,内存和寄存器交换类指令,功能:用一条指令实现在寄存器和存储器之间交换数据 格式:SWP B Rd , Rm , Rn ;(Rn)Rd , (Rm)Rn; nm ,d , ;如d=m, 为交换,Rm(Rn),5.2.4 ARM数据处理类指令,第二操作数 数据运算类指令 前导零计数指令 乘法类指令 QADD、QSUB、QDADD和QDSUB指令,第二操作数,大多数ARM通用数据处理指令有一个灵活的第二操作数(flexible second operand)。在每一个指令的格式中以“Ope

11、rand2”表示 。,两种可能的格式: (1)# immed-8r 常量的表达式。常量必须对应于8位位图(pattern)。该位图在32位字中,被循环移位偶数位(0、2、4、8、26、28、30)。合法常量:0xFF、0xFF000、0xF000000F。非法常量:0x101、0xFF04、0xFF003、0xFFFFFFFF。 (2)Rm , shift Rm 存储第二操作数的ARM寄存器。可用各种方法对寄存器中的位图进行移位或循环移位。在指令中移位操作的结果用作第二操作数,但Rm本身不变。 Shift Rm的移位方法,数据运算类指令,功能:完成数据在寄存器中的运算,这些运算包括32位数据的

12、算术、位操作,其中某一个操作数可以经过移位或循环运算。 格式: S Rd , Rn , Operand2 操作码 包括ADD、SUB、RSB、ADC、SBC、RSC、AND、ORR、EOR、BIC MOV、MVN、CMP、CMN、TST和TEQ指令,例 1: ADD R2,R1,R3 ;(R1)+(R3)R2 例 2: SUBS R2, R2, #1 ; (R2)-1R2 BEQ LABEL ; 如等于0,转向LABEL 例 3: R0中的内容乘5 ADD R0, R0, R0, LSL #2 ; (R0)*5R0 例 4: R0中的内容乘10 ADD R0, R0, R0, LSL #2 ;

13、 (R0)*10R0 MOV R0, R0, LSL #1,前导零计数指令,功能:CLZ(Count Leading Zeros)指令对Rm中值的低位零(leading zeros)的个数进行计数,结果放到Rd中。若源寄存器全为0,则结果为32。若位31为1,则结果为0 格式:CLZ Rd , Rm 其中: Rd ARM结果寄存器,Rd不允许是R15。 Rm 操作数寄存器。,乘法类指令,QADD、QSUB、QDADD和QDSUB指令,功能:这四条指令属于DSP增强指令,完成饱和加、饱和减、饱和乘2加、饱和乘2减四种饱和运算功能 格式:条件码 Rd, Rm, Rn 包括:QADD、QSUB、QD

14、ADD和QDSUB指令。 其中: Rd 结果寄存器 Rm,Rn 操作数寄存器,说明:饱和运算是DSP指令所特有的功能,对加/减法指令的结果做了如下修改: 如果加/减法指令的结果在-231231-1之间,饱和运算的结果取加/减法指令的结果。 如果加/减法指令的结果大于231-1,饱和运算的结果取最终结果为231-1。 如果加/减法指令的结果小于-231,饱和运算的结果取最终结果为-231。 QDADD和QDSUB指令计算SAT(Rm+SAT(Rn*2)。饱和可发生在加倍操作、加法上,或两种情况下同时发生。若饱和仅发生在加倍操作上,则标志Q置位,但最后结果是不饱和的。SAT意为饱和运算。,例子:

15、QADD R0,R1,R9 ;SAT(R1+R9)R0 QDSUBLT R9,R0,R1 ;SAT(R0-SAT(R9)*2)R9,5.2.5 ARM转移类指令,ARM转移类指令完成循环、调用子程序和从ARM状态转向Thumb状态等功能,包括B、BL、BX和BLX指令 。 转移/转移带链接类指令 转移交换、转移带链接和交换指令BX,BLX,转移/转移带链接类指令,功能:B、BL指令完成当前执行指令地址的转移,偏移地址量可以达到32M,BL指令还可以把转移指令后第一条指令的地址放进链接寄存器R14中完成连接作用,通常用来完成子程序的调用 格式:BL 其中:Label 程序相对偏移表达式。,说明:BL(Branch and Link)指令将下一条指令的地址拷贝到R14(LR,链接寄存器),并引起处理器转移到Label。BL指令(L=1) , 等价于先把(PC)R14,再(PC)+offset PC。 机器级

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 高等教育 > 大学课件

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号