一、指令系统的发展与性能要求
- 指令系统的概述
指令就是要计算机执行某种操作的命令。可分为:①微指令,属于硬件;②机器指令,简称指令,完成算术逻辑操作;③宏指令,由若干条机器指令组成,属于软件。
2. 计算机发展
随着计算机的发展,大多数计算机的指令系统多达几百条,因此称这些计算机为复杂指令系统计算机,简称
CISC;由于最常使用的简单指令仅占指令总数的较小一部分,从而造成硬件的浪费,因此又提出一种精简指令系统计算机,简称RISC。
3.指令系统的性能要求
①完备性
②有效性
③规整性:规整性包括指令系统的对称性、匀齐性、指令格式和数据格式的一致性。
④ 兼容性
二、指令格式
Ⅰ定义:
指令格式:令字用二进制代码表示的结构形式,通常由操作码和地址码字段组成。
一条指令的结构可用如下形式来表示:
操作码字段OP | 地址码字段A |
解释:
①操作码:指令的操作码OP表示该指令应进行何种性质的操作。每一个包含n位的操作码最多能够表示2的n次幂条指令,其通常是固定的。
操作码指出指令中该指令应该执行什么性质的操作和具有何种功能。
操作码是识别指令、了解指令功能与区分操作数地址内容的组成和使用方法等的关键信息。例
如,指出是算术加运算,还是减运算;是程序转移,还是返回操作。
②地址码:按照地址码个数来分,指令可分为4类,如图所示。
其他分类:
③ 指令字长度
一个指令字中包含二进制代码的位数,称为指令字长度;而机器字长是指计算机能直接处理的二进制数据的位数,它决定了计算机的运算精度。①指令字长度等于机器字长度的指令,称为单字长指令;②指令字长度等于半个机器字长度的指令,称为半字长指令;③指令字长度等于两个机器字长度的指令,称为双字长指令。
④ 指令助记符
为便于书写和阅读程序,每条指令通常用 3 个或 4 个英文缩写字母来表示。这种缩写码称为指令助记符,如:
典型指令 | 指令助记符 | 二进制操作码 |
加法 | ADD | 001 |
减法 | SUB | 010 |
传送 | MOV | 011 |
跳转 | JMP | 100 |
转子 | JSR | 101 |
存数 | STO | 110 |
取数 | LAD | 111 |
⑤经典的指令格式
(1) MIPS R4000指令
①算术指令格式
MIPS R4000 是一种RISC计算机系统,字长32位,按字节寻址。通用寄存器32个,其算术指令格式如下:
R型 6位 5位 5位 5位 5位 6位
op | rs | rt | rd | sharmt | funct |
字段解释
a.op 字段:操作码,指定一条指令的基本操作;
b.rs 字段:指定第 1 个源操作数寄存器,最多有 32 个寄存器;
c.rt 字段:指定第 2 个源操作数寄存器,最多有 32 个寄存器;
d.rd 字段:指定存放操作结果的目的数寄存器,最多有 32 个寄存器;
e.shamt 字段:移位值,用于移位指令;
f.funct 字段:函数码,指定 R 型指令的特定操作。
② R型指令
在 MIPS 中,所有的算术运算数据必须放在通过寄存器中,此时的指令格式称为R 型(寄存器)指令。R 型指令格式就是上面所示的算术指令格式。
在 MIPS 中,访问存储器(取数或存数)需要使用数据传送指令。此时的指令格式,称为I 型(立即数)指令,其指令格式如下所示:
I型 6位 5位 5位 16(5+ 5+6位)位
op | rs | rt | 常数或地址(addres) |
16位字段address(地址)提供取字指令(LW)、存字指令(SW)来访问存储器的基值地址码(也称位移量)。
③ MIPS 字段值:MIPS 指令的每一字段的值(十进制)如表所示。
指令 | 格式 | op | rs | rt | rd | shamt | funct | 常数或地址 |
add(加) | R | 0 | reg | reg | reg | 0 | 32 | - |
sub(减) | R | 0 | reg | reg | reg | 0 | 34 | - |
立即数加 | I | 8 | reg | reg | - | - | - | 常数 |
lw(取字) | I | 35 | reg | reg | - | - | - | address |
sw(存字) | I | 43 | reg | reg | - | - | - | address |
reg 表示 0~31 中间的一个寄存器号,address 表示一个 16 位地址,而“-”表示该格式中这个字段没有出现。 加法(add)指令和减法(sub)指令的 op 字段值相同;硬件是根据 funct 字段来确定操作类型: 加法(32)或减法(34)。
(2)ARM 指令
①指令格式
ARM 是字长 32 位的嵌入式处理机,它具有世界上最流行的指令集。下面是 ARM 指令集的一种指令格式:
4位 2位 1 4 1 4 4 12
cond | F | I | opcode | S | Rn | Rd | operand2 |
②字段含义
opcode:指明指令的基本操作,称为操作码;
Rd:指明目标寄存器地址(4 位),共 16 个寄存器;
Rn:指明源寄存器地址(4 位),共 16 个寄存器;
operand 2:指明第 2 个源操作数;
I:指明立即数,如果 I=0,第 2 个源操作数在寄存器中,如果I=1,第 2 个源操作数是 12 位的立即数;
S:设置状态,该字段涉及条件转移指令;
cond:指明条件,该字段涉及条件转移指令;
F:说明指令类型,当需要时该字段允许设置不同的指令。
三、操作数类型
机器指令对数据进行操作,数据通常分以下四类:
① 地址数据
② 数值数据:①定点整数或定点小数;②浮点数;③压缩十进制数,一个字节用2位BCD码表示。
③字符数据:字符数据也称为文本数据或字符串,目前广泛使用ASCII码。
④逻辑数据:一个单元中有若干二进制位项组成,每个位的值可以是1或0,用以判断“真”与“假”。
四、操作类型
机器指令对操作类型进行分类,操作通常分以下四类:
①数据传送
② 算术逻辑操作
③移位操作
④转移操作
⑤输入输出操作
分类的总结
五、指令和数据的寻址方式
-
概述
Ⅰ 定义:几乎所有的计算机,在内存中都采用地址指定方式。当采用地址指定方式时,形成操作数或指令地址的方式,称为寻址方式。
Ⅱ 分类:①指令寻址方式,这种方式相对简单②数据寻址方式,这种方式比较复杂。
在冯·诺依曼型结构的计算机中,内存中指令的寻址与数据的寻址是交替进行的,而哈佛型计算机中,指令寻址和数据寻址是独立进行的。
2.指令的寻址方式
指令的寻址方式有两种,一种是顺序寻址方式,另一种是跳跃寻址方式。
❶顺序寻址方式:由于指令地址在内存中按顺序排列,执行一段程序时,通常是一条指令接一条指令的顺序进行。为此,必须使用程序计数器(又称指令指针寄存器)PC来计数指令的顺序号,该顺序号就是指令在内存中的地址。指令顺序寻址方式的示意图如图 所示。
❷ 跳跃寻址方式:跳跃是指下条指令的地址码不是由程序计数器给出,而是由本条指令给出。程序跳跃后,按新的指令地址开始顺序执行。指令跳跃寻址方式的示意图如图 所示。
3.操作数基本寻址方式
形成操作数的有限地址的方法,称为操作数的寻址方式。一种单地址指令的结构为:
操作码 OP | 寻址方式 | 形式地址 |
一般指令中操作数的获取是由寻址方式和形式地址组合而成,也可以是通用寄存器与寻址方式的组合,若没有指定寻址方式,则通用寄存器采用寄存器寻址,形式地址为直接寻址,其他情况视具体指令而定。
由于大型机、微型机和单片机结构不同,从而形成了各种不同的操作数寻址方式。比较典型而常用的寻址方式如表所示。
方式 | 算法 | 主要优点 | 主要缺点 | |
隐含寻址 | 操作数在专用寄存器 | 无存储器访问 | 数据范围有限 | |
立即寻址 | 操作数=A | 无存储器访问 | 操作数幅值有限 | |
直接寻址 | EA=A | 简单 | 地址范围有限 | |
间接寻址 | EA=(A) | 大的地址范围 | 多重存储器访问 | |
寄存器寻址 | EA=R | 无存储器访问 | 地址范围有限 | |
寄存器间接寻址 | EA=(R) | 大的地址范围 | 额外存储器访问 | |
偏移寻址 | EA=A+(R) | 灵活 | 复杂 | |
段寻址 | EA=A+(R) | 灵活 | 复杂 | |
堆栈寻址 | EA=栈顶 | 无存储器访问 | 应用有限 |
在上面的偏移寻址中,有三种是常用的:
①相对寻址:引用的专用寄存器为程序计数器 PC,即 EA=A+(PC)
②基址寻址:引用的专用寄存器为一个含有该地址偏移量的基址寄存器
③变址寻址:引用的专用寄存器含有对该地址的正偏移量,通常称为变址寄存器
六、典型指令
-
指令的分类
① 数据传送指令:主要包括取数指令、存数指令、传送指令、成组传送指令、字节交换指令、清寄存器指令、堆栈操作指令等。
② 算术运算指令:这类指令主要用于定点或浮点的算术运算。
③ 逻辑运算指令:这类指令主要用于无符号数的位操作、代码的转换、判断及运算。
④ 程序控制指令:程序控制指令也称转移指令。
⑤ 输入输出指令
⑥字符串处理指令
⑦ 特权指令:特权指令是指具有特殊权限的指令。
⑧其他指令
2.基本指令系统的操作
CISC 指令系统的指令多达二三百条,其中最常用的只占20%,因此容易造成硬件的浪费。其中基本指令如表所示。
指令类型 | 操作名称 | 说明 |
数据传送 | MOV 传送 | 由源向目标传送字,源和目标是寄存器 |
STO 存数 | 由 CPU 向存储器传送字 | |
LAD 取数 | 由存储器向 CPU 传送字 | |
EXC 交换 | 源和目标交换内容 | |
CLA 清零 | 传送全 0 字到目标 | |
SET 置 1 | 传送全 1 字到目标 | |
PUS 进栈 | 由源向堆栈顶传送字 | |
POP 退栈 | 由堆栈顶向目标传送字 | |
算术运算 | ADD 加法 | 计算两个操作数的和 |
SUB 减法 | 计算两个操作数的差 | |
MUL 乘法 | 计算两个操作数的积 | |
DIV 除法 | 计算两个操作数的商 | |
ABS 绝对值 | 以其绝对值替代操作数 | |
NEG 变负 | 改变操作数的符号 | |
INC 增量 | 操作数加 1 | |
DEC 减量 | 操作数减 1 | |
逻辑运算 | AND 与 | 按位完成指定的逻辑操作 |
OR 或 | ||
NOT 求反 | ||
EOR 异或 | ||
TES 测试 | 测试指令的条件;根据结果设置标志 | |
COM 比较 | 对两个操作数进行逻辑或算术比较;根据结果设置标志 | |
设置控制变量 | 为保护目的,中断管理,时间控制等设置控制的指令 | |
SHI 移位 | 左(右)移位操作数,一端引入常数 | |
ROT 循环移 | 左(右)移位操作数,两端环绕 | |
控制传递 | JMP 无条件转移 | 无条件转移;以指定地址装入PC |
JMPX 条件转移 | 根据测试条件,将指定地址装入PC,或什么也不做 | |
JMPC 转子 | 将当前程序控制信息放到一个已知位置,转移到指定地址 | |
RET 返回 | 由已知位置内容替代PC 和其他寄存器的内容 |
3. 精简指令系统
RISC指令系统特点有:
①选取使用频率最高的一些简单指令,指令条数少;
②指令长度固定,指令格式种类少,寻址方式种类少;
③只有取数/存数指令访问存储器,其余指令的操作都在寄存器之间进行。
4.总结
七、ARM 汇编语言
汇编语言是计算机机器语言(二进制指令代码)进行符号化的一种表示方式,每一个基本汇编语句对应一条机器指令。嵌入式处理机ARM的汇编语言如表4-5所示,其中操作数使用 16 个寄存器(r0,r1~r12,SP,Ir,PC),230个存储字(字节编址,连续的字的地址之间相差4)。
指令 类别 | 指令 | 示例 | 含义 | 说明 |
算术 运算 | 加 | ADD r1,r2,r3 | r1=r2+r3 | 三寄存器操作数 |
减 | SUB r1,r2,r3 | r1=r2-r3 | 三寄存器操作数 | |
数据传送 | 取数(字)至寄存器 | LDR r1,[r2,#20] | r1=存储单元[r2+20] | 内存单元至寄存器字传送 |
自寄存器存数(字) | STR r1,[r2,#20] | 存储单元[r2+20]=r1 | 寄存器至内存单元字传送 | |
取半字数至寄存器 | LDRH r1,[r2,#20] | r1=存储单元[r2+20] | 内存单元至寄存器半字传送 | |
取半字带符号数至 寄存器 | LDRHS r1,[r2,#20] | r1=存储单元[r2+20] | 内存单元至寄存器半字带符 号数传送 | |
自寄存器存半字数 | STRH r1,[r2,#20] | 存储单元[r2+20]=r1 | 寄存器至内存单元半字传送 | |
取字节数至寄存器 | LDRB r1,[r2, #20] | r1=存储单元[r2+20] | 内存单元至寄存器字节传送 | |
取字节带符号数至 寄存器 | LDRBS r1,[r2,#20] | r1=存储单元[r2+20] | 内存单元至寄存器字节带符 号数传送 | |
自寄存器存字节数 | STRB r1,[r2,#20] | 存储单元[r2+20]=r1 | 寄存器至内存单元字节传送 | |
交换 | SWP r1,[r2,#20] | 存储单元[r2+20]与 r1 互换 | 自动交换存储单元和寄存器 | |
传送 | MOV r1,r2 | r1=r2 | 寄存器间拷贝 | |
逻辑运算 | 与 | AND r1,r2,r3 | r1=r2&r3 | 三寄存器操作数,比特间相与 |
或 | ORR r1,r2,r3 | r1=r2|r3 | 三寄存器操作数,比特间相或 | |
非 | MVN r1,r2 | r1=~r2 | 双寄存器操作数,比特取反 | |
逻辑左移 (可选操作) | LSL r1,r2,#10 | r1=r2<<10 | 逻辑左移,位数为常数 | |
逻辑右移 (可选操作) | LSR r1,r2,#10 | r1=r2>>10 | 逻辑右移,位数为常数 | |
条件转移 | 比较 | CMP r1,r2 | 条件标志=r1-r2 | 用于条件转移的比较操作 |
根据EQ,NE,LT, LE,GT,GE,LO, IS,HI,HS,VS, VC,MI,PL 转移 | BEQ 25 | 若(r1==r2),则转移至 PC+8+100 | 条件测试:相对于PC 转移 | |
无条件转移 | 转移(无条件) | B 2500 | 转移至PC+8+10000 | 转移 |
转移并链接 | BL 2500 | R14=PC+4; 转移至PC+8+10000 | 用于子程序调用 |