ARM的指令集.ppt

相关主题
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
数 1.算术运算指令 ADD、 SUB、 ADC、SBC 、 RSB、RSC ; 据 处 2.逻辑运算指令 AND、ORR、EOR、BIC; 理 3. 比较指令 CMP、CMN;
4.测试指令 TST、TEQ; 5. 乘法指令 MUL、MLA、UMULL、UMLAL、SMULL、SMLAL 6. 数据传送指令 MOV、MVN;
2. Thumb指令集特点
16位指令编码
压缩指令,在ARM的Pipeline中先动态解压,再作为标准32位 ARM指令执行
CPSR[5]位T决定指令流类型:T=1则Thumb;
Thumb指令集没有协处理器、信号量、乘加、64位乘、状态寄 存器等指令;
指令均为无条件执行,只有B指令除外;
执响R条2行C件←P条条执S影R读R内件件执行1的响RA-取容加执0N2行减L标CxR←,(法E行2P条法1志,0R执地总指S分件:;位影1R行址是令支+E的1Q条上):指;标,件的令志, 即相等位则跳转
SUBNES R2,R1,#0x20
NZ C V
……
I F T M4 M3 M2 M1 M0
4. 数据处理指令
可用一条指令将16个可见寄存器的任意子集存储到 内存或者相反。
寻址模式受到限制
LDM/STM的两种用途
可允许OS加载或存储用户模式寄存器来保护和恢复 用户处理状态(保存作业现场);
可作为异常处理返回的一部分,完成从SPSR中恢复 CPSR。
多寄存器存取指令形式 指令举例
4.3 状态寄存器与GPRs之间的 传送
将数据从存储器中调入寄存器中进行处理; 处理完成后经过寄存器将结果存回到存储器中
I/O功能是通过存储器映射的可循之外围寄存器和终 端输入的组合来实现。
在存储器映射系统中,外设中的寄存器被映射为存储器的地 址,对这些寄存器的操作方法与对存储器的操作相同
处理器对外设的操作也是适用Load/Store指令通过类似存储 器操作来完成。
每一个机器指令必须包含CPU执行所需的全部信息
CPU访问 存储器或
I/O
取指令
CPU内部 操作
指令地址 计算
指令译码
指令完成取 下一条
取操作数
多操 作数
操作数 地址 计算
数据操作
存操作数
多结果
操作数 地址 计算
2. 机器指令要素
操作码 (opcode) 源操作数引用 结果操作数引用 下一指令引用
4. 基址加偏址寻址(变址寻址)
前变址:
自动变址:后变址:
R0 ←Mem32[R1+4]; R0 ←Mem3R20[R←1+M4e]m;32[R1];
将基址寄存器的内容与指令 举例 R1←R1+R41 ←R1+4;
中给出的偏移量相加,形成
存储器的有效地址,用于访
LDR R0,[R1,#4]
问基址附近的存储器单元。 LDR R0,[R1,#4]!
地址
无符号整数32位
数值
整数或定点数 浮点数 十进制数 BCD(Binary Coded Decimal)
字符
ASCII码
逻辑数据
9. 操作类型
典型分类
CPU动作
指令举例
数据传送 算术
逻辑 I/O 系统控制 控制传递
传送数据到另一个位置
ALU内完成功能 设置条件代码和标志
同算术指令
用机器语言编程语句 N = I + J + K
6.2 ARM寻址方式
6.2.1 寻址方式
1. 寻址方式的考虑
为什么要采用多种寻址方式? 基本寻址方式:
立即寻址 直接寻址 间接寻址 寄存器寻址 寄存器间接寻址 偏移寻址 堆栈寻址
2. RISC体系采用的指令集结构ISA
有两种ISA:
4.将结果值存入内存513位置;
Store
6. 指令类型的基本分类
典型分类 数据传送
算术 逻辑 I/O 系统控制 控制传递
指令举例 Load,Store,Push,Pop
Add,Sub,Mul,Div AND,OR,NOT,Shift
Read,Write SWI(软中断),BKPT Jump,Return,NOP,
LDM/STM根据其后缀名,
STMDB
R9!,(R0,R1,R5)
其寻址方式有所不同
LDM/STM的后缀选择
7. 相对寻址
可以认为是基址为PC的 变址寻址,偏移量给出 了目的地址于现行指令 之间的相对位置。
子程序入口 地址
举例
转移到SUBR
BL SUBR 。。。。。。
SUBR MOV PC,R14
举例
ADD R0,R0,#1 AND R8,R7,#0xFF MOV R1,#0x00012800
2. 寄存器寻址
利用寄存器中的数值作 为操作数,指令中的地 址码给出的是寄存器名
举例
ADD R0,R1,R2 ADD R3,R2,R1,LSR #2
第二操作数位寄存器型 ADD R3,R2,R1,LSR R4
时,可以选择对第二操
作数进行移位
LSL,LSR,ASL, ASR,ROR,RRX
3. 寄存器间接寻址
ARM的数据传送指令都 举例
是基于寄存器间接寻址, 通过Load/Store完成对 数据的操作。
LDR R0,[R1] STR R0,[R1]
R0 ← mem32[R1]
R0 → mem32[R1]
3. 基本指令格式
<opcode> {<cond>} {S} <Rd>,<Rn> {,<operand2>}
指令助记符
可选条件码; 指令执行条件
可选后缀,可根 据指令结果更新
CPSR条件码
Rd:目标寄存器; Rn:第一操作数寄
存器
第2操作数
3. 基本指令格式举例
LDR R0,[R1] BEQ DATAEVEN ADDS R2,R1,#1
字节传送: R0 ←Mem8[R1]
半字传送: R1 ←Mem16[R0+20]
5. 堆栈寻址
Stack是用于保存数据的 一块连续内存,按照 FIFO或FILO顺序存取
举例
STMFD SP!{R1-R7,LR}
指向堆栈的地址寄存器 成为堆栈指针(SP)
LDMFD SP!{R1-R7,LR}
Rd ← (Rm*Rs)[31:0] Rd ← (Rm*Rs+Rn)[31:0] RdHi:RdLo ← Rn * Rs RdHi:RdLo += Rn * Rs RdHi:RdLo ← Rn * Rs RdHi:RdLo += Rn * Rs
4.2 Load/Store 指令
ARM处理器是Load/Store型的。
返回
小结
6.3 ARM指令集编码与格 式
1. ARM指令分类
分类指令
指令列举
数据处理 数据传送
状态寄存器访问
ADD、ADC、SUB、RSB、SBC; MOV、MVN; AND、ORR、EOR、BIC;CMP、CMN;TST、TEQ; MUL、MLA、UMULL、UMLAL、SMULL、SMLAL
后变址
LDR|STR {<cond>} {B} {T} Rd,[Rn],<offset>
相对PC变址 LDR|STR {<cond>} {B} Rd, LABEL
LDR/STR 举例
T标志位只能在非用户 模式即特权模式下使 用。作用是选择用户 角度的存储器变换系

4.2.2 多寄存器存取指令
LDM/STM
LDR、STR(单寄存器存取); LDM、STM(多寄存器存取);SWP(信号量) MRS、MSR
分支指令 B、BL;BX、BLX;
异常产生 协处理器
SWI(软中断产生);BKPT(断点指令); CDP;LDC、STC;MCR、MRC;
2. ARM指令编码
ARM指令编码格式 ARM条件编码格式
4.2.1 单寄存器存取指令
LDR/STR
传送的数据可以是8位字节、16位半字或32位字
可以适用7种寻址方式;
B表示传送无符号字
可以适用自动变址寻址方式(硬件支持) 节还是字。缺省
指令格式
B=0为传送字
前变址:
LDR|STR {<cond>} {B} Rd,[Rn,<offset>] {!}
偏移量不超过4KB(指令编 码中Offset 为12位)
前变址,后变址,自动变址 三种模式
寄存器间接寻址实际是偏移 量为0的基址加偏址寻址
LDR R0,[R1 ] ,#4 LDR R0,[R1,R2] LDR R0,[R1,R2,LSL,#2] LDRB R0,[R1] LDRH R1,[R0,#20]
向I/O模块发出命令
Load,Store,Push, Pop
Add,Sub,Mul, Div
AND,OR,NOT, Shift
Read,Write
特权指令,保留给操作系统使用
修改PC,以完成程序调用/返回,管 理参数传送
SWI(软中断), BKPT
Jump,Return, NOP,
10. 汇编语言 -举例
对堆栈的访问通过堆栈 指针R13指向堆栈区域来 实现
6. 块拷贝寻址
是多寄存器传送指令 举例
LDM/STM的寻址方式, STMIA R9!,(R0,R1,R5)
可以把内存中的数据块 STMIB R9!,(R0,R1,R5) 加载到多个寄存器中去。
STMDA R9!,(R0,R1,R5)
4.1 乘法指令
完成2个寄存器的数据相乘。按照结果位宽可分成两类:
64位结果; 仅保留最低有效32位。
2种类型都有“乘-累加”变形,即将成绩连续相加成总和,且适用 于无符号和有符号数
乘法指令举例
MUL、 MLA、 UMULL、 UMLALwenku.baidu.com SMULL、 SMLAL
乘(32位结果) 乘-累加(32位结果) 无符号数长乘 无符号数长乘-累加 符号数长乘 符号数长乘-累加
SWI代表“软件中断”,用户可通过其调用系统例 程,又被称为监控调用。
它将处理器至于SVC监控模式,从0x08开始执行指 令。
指令格式与举例
BKPT用于产生软件断点,供调试程序使用。
用于软件调试,使处理器停止执行正常指令而进入 相应的调试程序。
6.4 Thumb指令
1. Thumb指令编码格式
回顾
第六章 ARM基本指令集与寻址介 绍
6.1 指令集的特征与功能 6.2 ARM寻址方式 6.3 ARM指令集编码格式 6.4 Thumb指令集
6.1 指令集的特征与功能
1 指令概念
机器指令(machine instruction) 指令集 (Instruction Set)
2. 机器指令要素
做何操作?
对谁做此操作? 如何寻找被操作数据的寄
存器或存储器位置?
完成后到哪里去取下一个 操作?
3. 机器指令的表示方法—指令格式
指令格式有多 种表示形式: 定长,变长, 混合长度
对于32位RISC 处理器,一般 采用定长格式 的32位二进制 码。
4. 机器指令的表示方法
采用符号表示法来描述机器指令 e.g. ADD, SUB,Load,Store。
由编译器完成符号→二进制的转换
5. 指令类型
指令集必须充分,应允许用户表达任何处理任务,可 以表示任何高级语言的指令形式。
E.g.一行简单程序:
➢ X=X+Y ➢ 设:
X的内存位置513; Y的内存位置514;
1.将内存513位置的值放入寄存器reg_x; Load 2.将内存514的值放到另一寄存器reg_y; Load 3.将reg_y加到reg_x,将结果放入reg_x;ADD
Register-memory Register-Register
RISC采用 Register-Regiter (Load-Store)
6.2.2 ARM处理器的 寻址方式
1. 立即寻址
操作数直接通过指令 给出,数据包含在32 位指令编码中。
32位有效立即数通过 循环右移偶数位而间 接得到
MSR/MRS
PSW到GPRs的传送指令MRS; GPRs 到PSW的传送指令MSR; 修改PSW一般是通过“读-修改-写”3个步骤来完成。 不能通过该指令直接修改CPSR中的T位直接将程序
状态切换到Thumb状态,而是必须通过BX指令完 成状态切换。
4.4 异常中断产生指令
SWI指令用于产生SWI异常中断,可以实现在 用户模式下对OS中特权模式的程序调用。
7. 指令集设计的关键环节
指令集设计是计算机设计最有影响的方面
基本设计出发点
操作指令表
应提供多少和怎样的操作?
数据类型 指令格式 寄存器
对几种数据类型完成操作? 8位字节?32位字?64位双字?
指令位长度,地址数目,各字段大小
寻址方式
CPU寄存器数目以及其用途
指定操作数产生的方式
8. 操作数类型
相关文档
最新文档