ARM嵌入式体系结构与接口技术 Cortex-A8版 教学课件 ppt 作者 华清远见嵌入式学院 杨胜利 刘洪涛 第三章

上传人:E**** 文档编号:89448412 上传时间:2019-05-25 格式:PPTX 页数:39 大小:462.31KB
返回 下载 相关 举报
ARM嵌入式体系结构与接口技术 Cortex-A8版  教学课件 ppt 作者  华清远见嵌入式学院 杨胜利 刘洪涛 第三章_第1页
第1页 / 共39页
ARM嵌入式体系结构与接口技术 Cortex-A8版  教学课件 ppt 作者  华清远见嵌入式学院 杨胜利 刘洪涛 第三章_第2页
第2页 / 共39页
ARM嵌入式体系结构与接口技术 Cortex-A8版  教学课件 ppt 作者  华清远见嵌入式学院 杨胜利 刘洪涛 第三章_第3页
第3页 / 共39页
ARM嵌入式体系结构与接口技术 Cortex-A8版  教学课件 ppt 作者  华清远见嵌入式学院 杨胜利 刘洪涛 第三章_第4页
第4页 / 共39页
ARM嵌入式体系结构与接口技术 Cortex-A8版  教学课件 ppt 作者  华清远见嵌入式学院 杨胜利 刘洪涛 第三章_第5页
第5页 / 共39页
点击查看更多>>
资源描述

《ARM嵌入式体系结构与接口技术 Cortex-A8版 教学课件 ppt 作者 华清远见嵌入式学院 杨胜利 刘洪涛 第三章》由会员分享,可在线阅读,更多相关《ARM嵌入式体系结构与接口技术 Cortex-A8版 教学课件 ppt 作者 华清远见嵌入式学院 杨胜利 刘洪涛 第三章(39页珍藏版)》请在金锄头文库上搜索。

1、,ARM汇编指令集,www.embedu.org,ARM指令可以通过添加适当的条件码前缀来达到条件执行的目的。 这样可以提高代码密度,减少分支跳转指令数目,提高性能。 CMP r3,#0 CMP r3,#0 BEQ skip ADDNE r0,r1,r2 ADD r0,r1,r2 skip 默认情况下,数据处理指令不影响条件码标志位,但可以选择通过添加“S”来影响标志位。 CMP不需要增加 “S”就可改变相应的标志位。 SUBS r3,r3,#0 BEQ skip,条件执行及标志位,www.embedu.org,条件码,下表为所有可能的条件码: 注意:AL为默认状态,需要单独指出,www.em

2、bedu.org,条件执行示例,一系列的指令都使用条件指令 if (a=0) func(1); CMP r1,#0 MOVEQ r0,#1 BLEQ func 置标志位,再使用不同的条件码 if (a=0) x=0; if (a0) x=1; CMP r0,#0 MOVEQ r1,#0 MOVGT r1,#1 使用条件比较指令 if (a=4 | a=10) x=0; CMP r0,#4 CMPNE r0,#10 MOVEQ r1,#0,www.embedu.org,ARM数据处理指令机器码格式,mov r1,r2,lsl #2 指令机器码 0xe1a01102 Cond:指令的条件码。 Op

3、code:指令操作码。 S:操作是否影响cpsr,S=0不影响,S=1影响。 Rn:包含第一个操作数的寄存器编码。 Rd:目标寄存器编码。 Operand2:第2操作数、Rm I :用于区别Operand2是立即数(I=1),还是寄存器移位(I=0) Shift amount :移位数 Shift : 移位方式,www.embedu.org,ARM处理指令机器码格式,www.embedu.org,Branch : B label Branch with Link : BL subroutine_label 处理器核按偏移量左移两位,符号扩展,再把该值加到当前PC寄存器内 跳转范围: 32 Mb

4、yte 如何执行长跳转?,28,31,24,0,Cond 1 0 1 L 偏移量,条件码区域,Link bit 0 = Branch 1 = Branch with link,23,25,27,分支指令,www.embedu.org,数据处理指令,包括: 算术指令: ADD ADC SUB SBC RSB RSC 逻辑指令: AND ORR EOR BIC 比较指令: CMP CMN TST TEQ 数据搬移: MOV MVN 上述指令只能对寄存器操作,不能针对存储器。 语法: S Rd, Rn, Operand2 只有比较指令影响标志位 -不指定Rd 数据搬移(MOV指令)不指定Rn 第二个

5、操作数通过桶型移位器送到ALU中。,数据处理指令,加法指令 ADD R1,R2,R3 R1=R2+R3 带进位加法 ADC R1,R2,R3 R1=R2+R3+C 减法指令 SUB R1,R2,R3 R1=R2-R3 逆向减法 RSB R1,R2,R3 R1=R3-R2 带借位减法 SBC R1,R2,R3 R1=R2-R3-!C 带借位逆减法 RSC R1,R2,R3 R1=R3-R2-!C 逻辑与指令 AND R0,R0,#0X0F 逻辑或指令 ORR R0,R0,#0X0F 逻辑异或 EOR R0,R0,#0X0F 位清除 BIC R0,R0,#9 比较指令 CMP R1,#10 cps

6、r = R1-10 反值比较指令 CMN R1,R2 cpsr =R1+R2 位测试指令 TST R1,#3 cpsr = R1 AND 3 相等测试 TEQ R1,R2 cpsr = R1 EOR R2 数据传输指令 MOV R1,R2 R1=R2 取反传送指令 MVN R1,R2 R1= R2,www.embedu.org,Destination,CF,0,Destination,CF,LSL : Logical Left Shift,ASR: Arithmetic Right Shift,(无符号数)乘2,除2,并保留符号位,Destination,CF,.0,Destination,C

7、F,LSR : Logical Shift Right,ROR: Rotate Right,(无符号数)除2,位轮换,Destination,RRX: Rotate Right Extended,位轮换,从 CF到MSB都参与操作,CF,桶型移位器,www.embedu.org,寄存器, 可选择是否增加移位操作. 移位值可以是: 5 bit 无符号整数 放在另一个寄存器的低字节 用于常数乘法 立即数 8 bit ,大小范围0-255。 右移偶数位 允许直接加载32-bit 常数到寄存器中。,结果,桶型移位器:第二个操作数,www.embedu.org,没有任何一条ARM 指令可包括一个32 b

8、it的立即数 所有的ARM指令都是32 bits固定长度 数据处理指令格式中,第二个操作数有12位 4 bit 移位值 (0-15)乘于2,得到一个范围在0-30,步长为 2的移位值。 记住一条准则: “最后8位一定要移动偶数位”.,0,7,11,8,immed_8,Shifter ROR,rot,x2,Quick Quiz: 0xe3a004ff MOV r0, #? MOV r0, #0xff00000,立即数 (1),www.embedu.org,Examples: 下列命令中,汇编器把立即数转换为移位操作: MOV r0,#4096 ; uses 0x40 ror 26 ADD r1,

9、r2,#0xFF0000 ; uses 0xFF ror 16 也可使用 MVN来进行位反转: MOV r0, #0xFFFFFFFF ; assembles to MVN r0,#0 立即数不能使用上述方法产生,否则将导致错误。,0,31,ror #0,range 0-0xff000000 step 0x01000000,ror #8,range 0-0x000000ff step 0x00000001,range 0-0x000003fc step 0x00000004,ror #30,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,

10、0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,立即数 (2),www.embedu.org,为允许装载大常数,汇编器提供了一条伪指令: LDR rd, =const 它可能汇编成下列指令: MOV or MVN。 或 LDR 指令,从数据池(Literal pools)读取常数。 For example LDR r0,=0xFF = MOV r0,#0xFF LDR r0,=0x55555555 = LDR r0,PC,#Imm12 DCD 0x555555

11、55 建议把常数装载到寄存器中时一律使用该伪指令。,装载32 bit常数,www.embedu.org,测验 #1,1. 写一条 ARM 指令,分别完成下列操作: a) r0 = 16 b) r0 = r1 / 16 (带符号的数字) c) r1 = r2 * 3 d) r0 = -r0 2. 下面哪些立即数是数据处理指令中有效的数据? a) 0x00AB0000 b) 0x0000FFFF c) 0xF000000F d) 0x08000012 e) 0x00001f80 f) 0xFFFFFFFF 3. BIC指令做什么用? 4. 为什么ARM 处理器增加了一条RSB 指令?,www.em

12、bedu.org,Start,stop,r0 = r1 ?,r0 r1 ?,r0 = r0 - r1,r1 = r1 - r0,Yes,No,Yes,No,你只需要使用CMP、SUB和B指令。 充分使用条件执行!,.global _start _start: MOV r0, #9 MOV r1, #15 Loop: ;your code here stop: B stop .end,测验 #2 - GCD,新建一个 ARM Executable Image 项目 新建一个 text文件 另存为 “gcd.s” 加入到项目中 Build 并执行,www.embedu.org,乘法,语法: 32位

13、乘法 MULS R0, R1, R2 R0 = R1 * R2 MLAS R0,R1,R2,R3 R0 = (R1 * R2) + R3 64位乘法 U|SMULLS R0, R1, R2, R3 R0=R2*R3(低32位) R1=R2*R3(高32位) U|SMLALS R0, R1, R2, R3 R0=R2*R3+R0 (低32位) R1=R2*R3+R1 占用的周期数 基本 MUL 指令 ARM7TDMI 上为2-5 周期 StrongARM/XScale上为1-3 周期 ARM9E/ARM102xE上为2 周期 ARM9TDMI 比 ARM7TDMI多1 周期 累加再多1 周期 (

14、不针对9E,尽管结果延迟多于1周期) 对于“long”型数据,多1 周期 以上均为一般规则,确切细节查看相应手册。,www.embedu.org,单寄存器数据传送,LDR STR Word LDRB STRB Byte LDRH STRH Halfword LDRSB 带符号的byte load LDRSH 带符号的halfword load 存储器系统必须支持所有访问宽度 语法: LDR Rd, STR Rd, e.g. LDREQB,www.embedu.org,地址访问,LDR/STR访问的地址由基址寄存器加上偏移量来产生。 针对word和无符号byte 的访问, 偏移量可以是: 一个无符号12-bit立即数 (如 0 - 4095 bytes). LDR r0,r1,#8 一个寄存器,或再加上移位(由立即数指定) LDR r0,r1,r2 LDR r0,r1,r2,LSL#2 可以是从基址寄存器上加或减去偏移量: LDR r0,r1,#-8 LDR r0,r1,-r2 LDR r0,r1,-r2,LSL#2 对于halfword和带符号的hal

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

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

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