嵌入式系统_arm指令系统

上传人:第*** 文档编号:58367345 上传时间:2018-10-29 格式:PPT 页数:117 大小:945.50KB
返回 下载 相关 举报
嵌入式系统_arm指令系统_第1页
第1页 / 共117页
嵌入式系统_arm指令系统_第2页
第2页 / 共117页
嵌入式系统_arm指令系统_第3页
第3页 / 共117页
嵌入式系统_arm指令系统_第4页
第4页 / 共117页
嵌入式系统_arm指令系统_第5页
第5页 / 共117页
点击查看更多>>
资源描述

《嵌入式系统_arm指令系统》由会员分享,可在线阅读,更多相关《嵌入式系统_arm指令系统(117页珍藏版)》请在金锄头文库上搜索。

1、第三讲 ARM指令系统,电信学院,本讲主要内容,ARM指令系统 寻址方式 指令简介 汇编实例,本讲目的,概要介绍ARM、Thumb指令集,能够达到通过查找工具书可以编写简单汇编程序的目的。,ARM处理器指令集概述(),ARM处理器指令集为加载/存储型ARM处理器指令集分为ARM指令集(32位编码长度) 和Thumb指令集(16位编码长度)。Thumb指令集是ARM指令集的一个子集,即所有的Thumb指令均有相对应的ARM指令。ARM指令集包括: 跳转指令 数据处理指令 程序状态寄存器处理指令,ARM处理器指令集概述(二),加载/存储指令 协处理器指令 异常产生指令 Thumb指令集包括: 跳转

2、指令 数据处理指令 加载/存储指令 异常产生指令,指令语法格式, 指令助记符,如ADD 指令执行的条件 S 决定指令的操作是否影响CPSR目标寄存器包含第一个操作数的寄存器第二个操作数, S ,ARM指令编码格式,指令的条件执行,条件执行几乎所有的ARM指令都是有条件执行,不仅包括常规的跳转指令,也包括所有其他的指令。普通类型的指令集不同,一般情况下,只有跳转指令才会有条件执行。条件是否满足要根据CPSR和指令的条件域来确定;大多数的Thumb指令均为无条件执行。,指令的条件码(一),指令的条件码 ARM处理器指令的条件域为4位,ARM状态指令的条件域一般为指令编码的高4位。 条件码共有16种

3、,每种条件码用2个字符表示, 2个字符的条件码可以添加在指令助记符的后面,和指令同时使用。例如,BEQ,表示“相等则跳转”。,指令的条件码(二),基本寻址方式(一),寄存器寻址 例:ADD R0, R1, R2 ;R1+R2R0 立即数寻址 例:ADD R3, R3, #2 ;R3+2R3 寄存器间接寻址 例:LDR R0, R3 ;R3R0 寄存器移位寻址 ADD R3,R2,R1,LSL #3 ;R1*8+R2 R3,基本寻址方式(二),寄存器变址寻址,前索引 偏移:基址寄存器的内容加(或减)偏移量形成存储器地址 立即数偏移: LDR R0,R1, #4 ;R1+4R0 LDR R0,R1

4、, #4! ;R1+4R0,R1+4R1 !表明数据传送后更新基址寄存器 寄存器偏移:LDR R0,R1,-R2 ;R1-R2R0 移位寄存器偏移: LDR R0,R1,R2,LSL #2 ;R2*4+R1R0,基本寻址方式(三),寄存器变址寻址,后索引 立即数偏移: LDR R0,R1, #4 ;R1R0,R1+4R1 寄存器偏移:LDR R0,R3,-R8 ;R3R0,R3-R8R3 移位寄存器偏移: LDR R0,R3,R2,LSL #2 ;R3R0,R2*4+R3R3,基本寻址方式(四),相对寻址 例:B Label ;(PC)+LabelPC多寄存器寻址,一条指令传递多个寄存器值,例

5、 STMIA R1,R2,R3,R4 ;R2R1;R3R1+4;R4R1+8,基本寻址方式(五),堆栈寻址 堆栈是一种按特定顺序进行存取的存储区,即“后进先出”,堆栈指针指向栈顶。递增堆栈(Ascending):向高地址方向生长的堆栈;递减堆栈(Descending):向低地址方向生长的堆栈;空堆栈(Empty):栈指针指向下一个数据项放入的空位置;满堆栈(Full):栈指针指向上一个压入堆栈的有效数据项。,基本寻址方式(五),ARM共支持4种类型的堆栈:FA(Full Ascending):满递增堆栈;FD(Full Descending):满递减堆栈;EA(Empty Ascending)

6、:空递增堆栈;ED(Empty Descending):空递减堆栈; 例如(详解见后面):STMFD R13, R0-R12, LR ;LRR13-4;R12R13-8;LDMFD R13, R0-R12, PC ;R13R0; R13+4R1 ;,基本寻址方式(六),块寻址 类似于堆栈寻址,但堆栈寻址要配合堆栈进行,而块拷贝则应用于普通数据传送指令。 ARM的块拷贝寻址支持4种方式:IB(Increment Before):向上前变址IA(Increment After):向上后变址DB(Decrement Before):向下前变址DA(Decrement After):向下后变址,跳转指

7、令(一),跳转指令主要有以下几种形式: 格式1:B/BL cond label 格式2:BX/BLX Rm 格式3:BLX label 符号含义: B: branch(分支) L:link(链接,保存R14) X: exchange(ARM/Thumb状态切换),跳转指令(二),AREA pt1, CODE, READONLYENTRY mov r0,#6cmp r0, #5bllt sub1 ;less thanblgt sub2 ;great than,sub1mov pc,lr sub2 mov pc,lrEND,跳转指令(三),CODE32 ;ARM代码blx TSUB ;调用Thum

8、b指令子程序TSUBCODE16 ;Thumb代码 TSUBbx R14 ;返回ARM代码,数据处理指令(总述),数据处理指令包括 3类:数据运算指令、前导零计数指令、乘法指令。,数据运算指令(一),主要包括数据传送指令、算术逻辑运算指令和比较测试指令等。 数据传送指令用于在寄存器间进行数据传送; 算术逻辑运算指令完成常用的算术与逻辑运算,同时可以选择更新CPSR中的相应条件标志位; 比较测试指令不保存运算结果,仅根据运算结果更新CPSR中相应的条件标志位。,前导零计数CLZ(Count Leading Zeros),CLZcond Rd, Rm计算寄存器中的前导0(第一个1以前的0) 源寄存

9、器从最高位开始计算。1个周期完成(ARM9E-S/ARM102x)如果没有任何一位是1,结果是32;如果 bit 31是1,结果为0。该指令不影响条件标志位。,0000 0010 1110 1101.0,R0 =,CLZ R1, R0,0x6,R1 =,1011 1011 0100 0000.0,Rm =,MOV R0, R0 LSL R1,第2操作数移位操作,ASR n 算术右移,最高位补符号 LSL n 逻辑左移,右补0 LSR n 逻辑右移,左补0 ROR n 循环右移 RRX 带进位的循环右移1位,移位操作,Destination,CF,0,Destination,CF,LSL : L

10、ogical Left Shift,ASR: Arithmetic Right Shift,(无符号数)乘2,除2,并保留符号位,Destination,CF,.0,Destination,CF,LSR : Logical Shift Right,ROR: Rotate Right,(无符号数)除2,位循环,Destination,RRX: Rotate Right Extended,位轮换,从 CF到MSB都参与操作,CF,乘法指令,ARM处理器的普通乘法指令共6条: 32位的运算结果 64位运算结果 乘法类指令的所有操作数和结果必须为通用寄存器 且不能是立即数或者寄存器的移位结果 结果寄存

11、器与操作数1不能相同; r15不能作为操作数寄存器或结果寄存器。,乘法指令格式,32位结果的乘法: MUL cond S Rd, Rm, Rs MLA cond S Rd, Rm, Rs, Rn 64位结果的长乘法: MUL cond S RdH, RdL, Rm, Rs Mul为下列符号之一:MUL、MLA、UMULL、UMLAL、SMULL、SMLAL。,程序状态寄存器处理指令,程序状态寄存器处理指令 该指令用于在程序状态寄存器和通用寄存器之间传送数据。包括2条指令: MRS 程序状态寄存器到通用寄存器的数据传送; MSR 通用寄存器到程序状态寄存器的数据传送。指令格式: MRS cond

12、 Rd, CPSR | SPSR MSR cond CPSR_field | SPSR_field, 操作数,加载/存储指令(一),加载/存储指令(load/store) 加载/存储指令完成寄存器与存储器之间的数据传送; 加载指令将存储器中的数据传送到寄存器; 存储指令则将寄存器中的数据传送到存储器。 存储器地址由基址寄存器的内容和偏移量来确定,不支持绝对地址寻址方式。 例如:LDR R1, R0 ;R0R1STR R1, R0, #-4 ;R1R0-4,加载/存储指令(二),偏移量具有如下3种形式: 无符号立即数 通用寄存器内容 通用寄存器的移位结果 例如:STR R1, R0, #-4 ;

13、R1R0-4LDR R0,R1,R2 ;R1+R2R0LDR R0, R5,R7,LSR #2 ;R5+R7逻辑右移2R0,加载/存储指令(三),存储器寻址支持3种方式: 寄存器间接寻址,如 LDR R1, R0 前变址偏移寻址 STR R1,R0,#0x100 ;R1R0+0x100 STR R0,R1,R2 ;R0R1+R2 LDR R0, R5,R7,LSR #2 ;R7/4 +R5R0 LDR R1,R0,#4 ! ;R0+4-R1,R0=R0+4 STR R1,R0,#0x100 ! ;R1R0+0x100,R0=R0+0x100,加载/存储指令(四),3, 后变址偏移索引 LDR

14、R1,R0,#-4 ;R0-R1,R0=R0-4 STR R0,R1,-R2 ;R0-R1,R1=R1-R2 LDR R0, R5,R7,LSL #2 ;R5R0,R7*4+R5R5,0x5,0x5,r1,0x200,基址 寄存器,0x200,r0,0x5,源寄存器 for STR,偏移量,12,0x20c,r1,0x200,原基址 寄存器,0x200,r0,0x5,源寄存器 for STR,偏移量,12,0x20c,r1,0x20c,更新 基址寄存器,通过 STR r0,r1,#12!来自动更新基址寄存器,Pre or Post Indexed 寻址,Pre-indexed: STR r0,

15、r1,#12,Post-indexed: STR r0,r1,#12,单字/无符号字节加载/存储指令(略),格式:LDR|STR cond B T Rd, 寻址方式 B:指无符号字节数据传送,仅传送最低有效位; T:强制处理器为用户模式,用于特权模式下使用用户寄存器;不能与前变址偏移同时 例如LDRB R5,R9;传送最低有效字节,其他清零(大端和小端不同结果)STRT R0,R1,R2,半字/有符号字节加载/存储指令(略),LDR|STR cond H|SH|SB Rd, 寻址方式; H: 无符号半字; SH: 有符号半字;(仅LDR) SB:有符号字节;(仅LDR) 例如 LDRH R8,R3,#2 ;R3+2-R8,读取低16位,其他清零LDRSB R4,R10,#0xC1 ;R10+0xC1-R4,读取字节,有符号扩展到32位(用符号填充)LDRSH R1,R0,#2! ; R0+2-R1,R0=R0+2;读取半字,有符号扩展到32位 其中: 偏移量不支持通用寄存器的移位的格式; 半字传送的地址必须是偶数; 不能将半字或字节读取到R15;,

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

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

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