当前位置:文档之家› ARM的指令集.ppt

ARM的指令集.ppt

MSR/MRS
PSW到GPRs的传送指令MRS; GPRs 到PSW的传送指令MSR; 修改PSW一般是通过“读-修改-写”3个步骤来完成。 不能通过该指令直接修改CPSR中的T位直接将程序
状态切换到Thumb状态,而是必须通过BX指令完 成状态切换。
4.4 异常中断产生指令
SWI指令用于产生SWI异常中断,可以实现在 用户模式下对OS中特权模式的程序调用。
举例
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
4.1 乘法指令
完成2个寄存器的数据相乘。按照结果位宽可分成两类:
64位结果; 仅保留最低有效32位。
2种类型都有“乘-累加”变形,即将成绩连续相加成总和,且适用 于无符号和有符号数
乘法指令举例
MUL、 MLA、 UMULL、 UMLAL、 SMULL、 SMLAL
乘(32位结果) 乘-累加(32位结果) 无符号数长乘 无符号数长乘-累加 符号数长乘 符号数长乘-累加
回顾
第六章 ARM基本指令集与寻址介 绍
6.1 指令集的特征与功能 6.2 ARM寻址方式 6.3 ARM指令集编码格式 6.4 Thumb指令集
6.1 指令集的特征与功能
1 指令概念
机器指令(machine instruction) 指令集 (Instruction Set)
2. 机器指令要素
执响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. 数据处理指令
Register-memory Register-Register
RISC采用 Register-Regiter (Load-Store)
6.2.2 ARM处理器的 寻址方式
1. 立即寻址
操作数直接通过指令 给出,数据包含在32 位指令编码中。
32位有效立即数通过 循环右移偶数位而间 接得到
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,
返回
小结
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
对堆栈的访问通过堆栈 指针R13指向堆栈区域来 实现
6. 块拷贝寻址
是多寄存器传送指令 举例
LDM/STM的寻址方式, STMIA R9!,(R0,R1,R5)
可以把内存中的数据块 STMIB R9!,(R0,R1,R5) 加载到多个寄存器中去。
STMDA R9!,(R0,R1,R5)
字节传送: R0 ←Mem8[R1]
半字传送: R1 ←Mem16[R0+20]
5. 堆栈寻址
Stack是用于保存数据的 一块连续内存,按照 FIFO或FILO顺序存取
举例
STMFD SP!{R1-R7,LR}
指向堆栈的地址寄存器 成为堆栈指针(SP)
ห้องสมุดไป่ตู้
LDMFD SP!{R1-R7,LR}
向I/O模块发出命令
Load,Store,Push, Pop
Add,Sub,Mul, Div
AND,OR,NOT, Shift
Read,Write
特权指令,保留给操作系统使用
修改PC,以完成程序调用/返回,管 理参数传送
SWI(软中断), BKPT
Jump,Return, NOP,
10. 汇编语言 -举例
4.2.1 单寄存器存取指令
LDR/STR
传送的数据可以是8位字节、16位半字或32位字
可以适用7种寻址方式;
B表示传送无符号字
可以适用自动变址寻址方式(硬件支持) 节还是字。缺省
指令格式
B=0为传送字
前变址:
LDR|STR {<cond>} {B} Rd,[Rn,<offset>] {!}
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型的。
用机器语言编程语句 N = I + J + K
6.2 ARM寻址方式
6.2.1 寻址方式
1. 寻址方式的考虑
为什么要采用多种寻址方式? 基本寻址方式:
立即寻址 直接寻址 间接寻址 寄存器寻址 寄存器间接寻址 偏移寻址 堆栈寻址
2. RISC体系采用的指令集结构ISA
有两种ISA:
LDR、STR(单寄存器存取); LDM、STM(多寄存器存取);SWP(信号量) MRS、MSR
分支指令 B、BL;BX、BLX;
异常产生 协处理器
SWI(软中断产生);BKPT(断点指令); CDP;LDC、STC;MCR、MRC;
2. ARM指令编码
ARM指令编码格式 ARM条件编码格式
7. 指令集设计的关键环节
指令集设计是计算机设计最有影响的方面
基本设计出发点
操作指令表
应提供多少和怎样的操作?
数据类型 指令格式 寄存器
对几种数据类型完成操作? 8位字节?32位字?64位双字?
指令位长度,地址数目,各字段大小
寻址方式
CPU寄存器数目以及其用途
指定操作数产生的方式
8. 操作数类型
数 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;
可用一条指令将16个可见寄存器的任意子集存储到 内存或者相反。
寻址模式受到限制
LDM/STM的两种用途
可允许OS加载或存储用户模式寄存器来保护和恢复 用户处理状态(保存作业现场);
可作为异常处理返回的一部分,完成从SPSR中恢复 CPSR。
多寄存器存取指令形式 指令举例
4.3 状态寄存器与GPRs之间的 传送
由编译器完成符号→二进制的转换
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
地址
无符号整数32位
数值
整数或定点数 浮点数 十进制数 BCD(Binary Coded Decimal)
字符
ASCII码
逻辑数据
9. 操作类型
典型分类
CPU动作
指令举例
数据传送 算术
逻辑 I/O 系统控制 控制传递
传送数据到另一个位置
ALU内完成功能 设置条件代码和标志
同算术指令
2. Thumb指令集特点
16位指令编码
压缩指令,在ARM的Pipeline中先动态解压,再作为标准32位 ARM指令执行
CPSR[5]位T决定指令流类型:T=1则Thumb;
Thumb指令集没有协处理器、信号量、乘加、64位乘、状态寄 存器等指令;
指令均为无条件执行,只有B指令除外;
LDM/STM根据其后缀名,
STMDB
R9!,(R0,R1,R5)
其寻址方式有所不同
LDM/STM的后缀选择
7. 相对寻址
可以认为是基址为PC的 变址寻址,偏移量给出 了目的地址于现行指令 之间的相对位置。
子程序入口 地址
举例
转移到SUBR
BL SUBR 。。。。。。
SUBR MOV PC,R14
每一个机器指令必须包含CPU执行所需的全部信息
CPU访问 存储器或
I/O
取指令
CPU内部 操作
指令地址 计算
指令译码
指令完成取 下一条
取操作数
多操 作数
操作数 地址 计算
数据操作
存操作数
多结果
操作数 地址 计算
2. 机器指令要素
操作码 (opcode) 源操作数引用 结果操作数引用 下一指令引用
将数据从存储器中调入寄存器中进行处理; 处理完成后经过寄存器将结果存回到存储器中
相关主题