ARM的指令集
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
举例
LDR R0,[R1,#4] LDR R0,[R1,#4]! LDR R0,[R1 ] ,#4 LDR R0,[R1,R2] LDR R0,[R1,R2,LSL,#2] LDRB R0,[R1] LDRH R1,[R0,#20]
半字传送: R1 ←Mem16[R0+20]
指定操作数产生的方式
8. 操作数类型
地址
无符号整数32位 整数或定点数 浮点数 十进制数 BCD(Binary Coded Decimal) ASCII码
数值
字符
逻辑数据
9. 操作类型
典型分类 CPU动作
传送数据到另一个位置
ALU内完成功能 设置条件代码和标志 指令举例
数据传送
采用符号表示法来描述机器指令 e.g. ADD, SUB,Load,Store。 由编译器完成符号→二进制的转换
5. 指令类型
指令集必须充分,应允许用户表达任何处理任务,可 以表示任何高级语言的指令形式。
1.将内存513位置的值放入寄存器reg_x; Load
E.g.一行简单程序: X = X + Y 设: X的内存位置513; Y的内存位置514;
回 顾
第六章 ARM基本指令集与寻址介绍
6.1 指令集的特征与功能
6.2 ARM寻址方式 6.3 ARM指令集编码格式 6.4 Thumb指令集
6.1 指令集的特征与功能
1 指令概念
机器指令(machine instruction)
指令集 (Instruction Set)
4.4 异常中断产生指令
SWI指令用于产生SWI异常中断,可以实现在 用户模式下对OS中特权模式的程序调用。
SWI代表“软件中断”,用户可通过其调用系统例 程,又被称为监控调用。 它将处理器至于SVC监控模式,从0x08开始执行指 令。 指令格式与举例 用于软件调试,使处理器停止执行正常指令而进入 相应的调试程序。
LDR|STR {<cond>} {B} Rd, LABEL
模式即特权模式下使 用。作用是选择用户 角度的存储器变换系 统
LDR/STR 举例
4.2.2 多寄存器存取指令
LDM/STM
可用一条指令将16个可见寄存器的任意子集存储到 内存或者相反。 寻址模式受到限制
LDM/STM的两种用途
将数据从存储器中调入寄存器中进行处理; 处理完成后经过寄存器将结果存回到存储器中
I/O功能是通过存储器映射的可循之外围寄存器和终 端输入的组合来实现。
在存储器映射系统中,外设中的寄存器被映射为存储器的地 址,对这些寄存器的操作方法与对存储器的操作相同 处理器对外设的操作也是适用Load/Store指令通过类似存储 器操作来完成。
7. 相对寻址
可以认为是基址为PC的 变址寻址,偏移量给出 了目的地址于现行指令
举例
BL SUBR
转移到SUBR
。。。。。。 SUBR MOV PC,R14
之间的相对位置。
子程序入口 地址 返回
小 结
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
32位有效立即数通过 循环右移偶数位而间 接得到
2. 寄存器寻址
利用寄存器中的数值作 为操作数,指令中的地 址码给出的是寄存器名
举例
ADD R0,R1,R2 ADD R3,R2,R1,LSR #2
第二操作数位寄存器型
时,可以选择对第二操
ADD R3,R2,R1,LSR R4
作数进行移位
6. 块拷贝寻址
是多寄存器传送指令 LDM/STM的寻址方式, 可以把内存中的数据块
举例
STMIA R9!,(R0,R1,R5) STMIB R9!,(R0,R1,R5) STMDA R9!,(R0,R1,R5) STMDB R9!,(R0,R1,R5)
加载到多个寄存器中去。
LDM/STM根据其后缀名, 其寻址方式有所不同 LDM/STM的后缀选择
算术
Load,Store,Push, Pop
Add,Sub,Mul, Div
逻辑
I/O
同算术指令
向I/O模块发出命令
AND,OR,NOT, Shift
Read,Write
系统控制
控制传递
特权指令,保留给操作系统使用
修改PC,以完成程序调用/返回,管 理参数传送
SWI(软中断), BKPT
Jump,Return, NOP,
LSL,LSR,ASL, ASR,ROR,RRX
3. 寄存器间接寻址
ARM的数据传送指令都 是基于寄存器间接寻址, 通过Load/Store完成对
举例
LDR R0,[R1] STR R0,[R1]
数据的操作。
R0 ← mem32[R1]
R0 → mem32[R1]
4. 基址加偏址寻址(变址寻址)
可允许OS加载或存储用户模式寄存器来保护和恢复 用户处理状态(保存作业现场); 可作为异常处理返回的一部分,完成从SPSR中恢复 CPSR。
多寄存器存取指令形式 指令举例
4.3 状态寄存器与GPRs之间的 传送
MSR/MRS
PSW到GPRs的传送指令MRS; GPRs 到PSW的传送指令MSR; 修改PSW一般是通过“读-修改-写”3个步骤来完成。 不能通过该指令直接修改CPSR中的T位直接将程序 状态切换到Thumb状态,而是必须通过BX指令完 成状态切换。
寄存器间接寻址实际是偏移 量为0的基址加偏址寻址
字节传送: R0 ←Mem8[R1]
5. 堆栈寻址
Stack是用于保存数据的 一块连续内存,按照 FIFO或FILO顺序存取 指向堆栈的地址寄存器 成为堆栈指针(SP) 对堆栈的访问通过堆栈 指针R13指向堆栈区域来 实现
举例
STMFD SP!{R1-R7,LR} LDMFD SP!{R1-R7,LR}
4.2.1 单寄存器存取指令
LDR/STR
传送的数据可以是8位字节、16位半字或32位字 可以适用7种寻址方式; B表示传送无符号字 可以适用自动变址寻址方式(硬件支持) 节还是字。缺省
B=0为传送字
指令格式
来自百度文库
前变址: LDR|STR {<cond>} {B} Rd,[Rn,<offset>] {!} 后变址 LDR|STR {<cond>} {B} {T} Rd,[Rn],<offset> T标志位只能在非用户 相对PC变址
源操作数引用
对谁做此操作? 如何寻找被操作数据的寄 存器或存储器位置?
结果操作数引用
下一指令引用
完成后到哪里去取下一个 操作?
3. 机器指令的表示方法—指令格式
指令格式有多 种表示形式: 定长,变长, 混合长度
对于32位RISC 处理器,一般 采用定长格式 的32位二进制 码。
4. 机器指令的表示方法
LDR R0,[R1]
BEQ DATAEVEN
ADDS R2,R1,#1
SUBNES
R2,R1,#0x20
N
Z
C
V
……
I
F
T
M4 M3
M2
M1
M0
4. 数据处理指令
数 1.算术运算指令 据 处 2.逻辑运算指令 理
3. 比较指令 4.测试指令 5. 乘法指令 6. 数据传送指令
ADD、 SUB、 ADC、SBC 、 RSB、RSC ; AND、ORR、EOR、BIC; CMP、CMN; TST、TEQ; MUL、MLA、UMULL、UMLAL、SMULL、SMLAL MOV、MVN;
BKPT用于产生软件断点,供调试程序使用。
6.4 Thumb指令
1. Thumb指令编码格式
2. Thumb指令集特点
16位指令编码 压缩指令,在ARM的Pipeline中先动态解压,再作为标准32位 ARM指令执行 CPSR[5]位T决定指令流类型:T=1则Thumb;
2. 机器指令要素
每一个机器指令必须包含CPU执行所需的全部信息
CPU访问 存储器或 I/O
取指令
取操作数
存操作数
多操 作数 指令地址 计算 指令译码 操作数 地址 计算 数据操作
多结果 操作数 地址 计算
CPU内部 操作
指令完成取 下一条
2. 机器指令要素
做何操作?
操作码 (opcode)
4.1 乘法指令
完成2个寄存器的数据相乘。按照结果位宽可分成两类:
64位结果; 仅保留最低有效32位。
2种类型都有“乘-累加”变形,即将成绩连续相加成总和,且适用 于无符号和有符号数 乘法指令举例
MUL、 MLA、 UMULL、 乘(32位结果) 乘-累加(32位结果) 无符号数长乘
Rd ← (Rm*Rs)[31:0] Rd ← (Rm*Rs+Rn)[31:0]
10. 汇编语言 -举例
用机器语言编程语句 N = I + J + K
6.2 ARM寻址方式
6.2.1 寻址方式
1. 寻址方式的考虑
为什么要采用多种寻址方式? 基本寻址方式:
立即寻址 直接寻址
间接寻址
寄存器寻址 寄存器间接寻址 偏移寻址 堆栈寻址
2. RISC体系采用的指令集结构ISA
有两种ISA:
Register-memory
Register-Register
RISC采用
Register-Regiter (Load-Store)
6.2.2 ARM处理器的 寻址方式
1. 立即寻址
操作数直接通过指令 给出,数据包含在32 位指令编码中。
举例
ADD R0,R0,#1 AND R8,R7,#0xFF MOV R1,#0x00012800
3. 基本指令格式
<opcode> {<cond>} {S} <Rd>,<Rn> {,<operand2>}
指令助记符
可选后缀,可根 据指令结果更新 CPSR条件码 Rd:目标寄存器; Rn:第一操作数寄 存器
第2操作数
可选条件码; 指令执行条件
3. 基本指令格式举例
条件执行减法: 读取R1地址上的 R2 ←R1 -0x20; 内容,执行条件 加法指令: 执行条件 NE,影 AL (总是) 条件执行分支指令, R2 ←R1+1 响CPSR的标志位 ; 执行条件 , 影响 CPSREQ 的标志 即相等则跳转 位
RdHi:RdLo ← Rn * Rs
UMLAL、
SMULL、 SMLAL
无符号数长乘-累加
符号数长乘 符号数长乘-累加
RdHi:RdLo += Rn * Rs
RdHi:RdLo ← Rn * Rs RdHi:RdLo += Rn * Rs
4.2 Load/Store 指令
ARM处理器是Load/Store型的。
2.将内存514的值放到另一寄存器reg_y; Load
3.将reg_y加到reg_x,将结果放入reg_x;ADD
4.将结果值存入内存513位置;
Store
6. 指令类型的基本分类
典型分类 数据传送 算术
逻辑 I/O 系统控制 控制传递
指令举例 Load,Store,Push,Pop Add,Sub,Mul,Div
数据处理
数据传送
LDR、STR(单寄存器存取); LDM、STM(多寄存器存取);SWP(信号量)
状态寄存器访问 MRS、MSR
分支指令 异常产生 协处理器
B、BL;BX、BLX; SWI(软中断产生);BKPT(断点指令); CDP;LDC、STC;MCR、MRC;
2. ARM指令编码
ARM指令编码格式 ARM条件编码格式
将基址寄存器的内容与指令 中给出的偏移量相加,形成 存储器的有效地址,用于访 问基址附近的存储器单元。 偏移量不超过4KB(指令编 码中Offset 为12位) 前变址,后变址,自动变址 三种模式
前变址: 自动变址:后变址: R0 ←Mem32[R1+4]; R0 ←Mem32[R1+4 ]; R0 ←Mem32[R1] ; R1←R1+4 R1 ←R1+4;
AND,OR,NOT,Shift Read,Write SWI(软中断),BKPT Jump,Return,NOP,
7. 指令集设计的关键环节
指令集设计是计算机设计最有影响的方面 基本设计出发点 应提供多少和怎样的操作?
操作指令表 数据类型 指令格式 寄存器 寻址方式
对几种数据类型完成操作? 8位字节?32位字?64位双字? 指令位长度,地址数目,各字段大小 CPU寄存器数目以及其用途