指令就是要计算机执行某种操作的命令。可分为:①微指令,属于硬件;②机器指令,简称指令,完成算术逻辑操作;③宏指令,由若干条机器指令组成,属于软件。
2. 计算机发展
随着计算机的发展,大多数计算机的指令系统多达几百条,因此称这些计算机为复杂指令系统计算机,简称
CISC;由于最常使用的简单指令仅占指令总数的较小一部分,从而造成硬件的浪费,因此又提出一种精简指令系统计算机,简称RISC。
3.指令系统的性能要求
①完备性
②有效性
③规整性:规整性包括指令系统的对称性、匀齐性、指令格式和数据格式的一致性。
④ 兼容性
Ⅰ定义:
指令格式:令字用二进制代码表示的结构形式,通常由操作码和地址码字段组成。
一条指令的结构可用如下形式来表示:
操作码字段OP | 地址码字段A |
解释:
①操作码:指令的操作码OP表示该指令应进行何种性质的操作。每一个包含n位的操作码最多能够表示2的n次幂条指令,其通常是固定的。
一个指令字中包含二进制代码的位数,称为指令字长度;而机器字长是指计算机能直接处理的二进制数据的位数,它决定了计算机的运算精度。①指令字长度等于机器字长度的指令,称为单字长指令;②指令字长度等于半个机器字长度的指令,称为半字长指令;③指令字长度等于两个机器字长度的指令,称为双字长指令。
为便于书写和阅读程序,每条指令通常用 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指令系统特点有:
①选取使用频率最高的一些简单指令,指令条数少;
②指令长度固定,指令格式种类少,寻址方式种类少;
③只有取数/存数指令访问存储器,其余指令的操作都在寄存器之间进行。
汇编语言是计算机机器语言(二进制指令代码)进行符号化的一种表示方式,每一个基本汇编语句对应一条机器指令。嵌入式处理机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 |
用于子程序调用 |