计算机原理(二)、指令系统
概述
指令系统是所有指令的集合。而指令是指计算机执行某个基本操作的集合。
设计原则
-
完备性
-
有效性(简单、无歧义)
-
规整性(对齐、一致)
-
兼容性
向上(下)兼容:某一机器编制的程序,不加修改可以在比他高(低)档的机器里运行。
向前(后)兼容:某一时期的程序,不加修改可以用在该时期之前(之后)的机器里运行。
指令种类
两种指令系统
CISC(复杂指令集计算机) | RISC(精简指令集计算机) |
---|---|
![]() |
![]() |
现在两种类型的指令系统逐步融合。
指令格式
操作码(一个)+地址码(可以是多个)
指令的长度:定长指令与变长指令
操作码的设计
定长操作码 | 扩展操作码 |
---|---|
译码简单,有信息冗余 | 缩短指令长度、减少程序位数、增加指令代表的信息 |
一般采用扩展操作码。以下就是扩展操作码的实例。

地址码结构
指令的地址个数一般为0-3个。



寻址方式
寻址方式决定了地址码的编码。寻址方式就是找到操作数存放位置的过程。
指令寻址 | 操作数寻址 |
---|---|
简单,pc自增 | 复杂,来源多、数据结构多样 |
通常指的是操作数寻址。
立即数寻址
操作数直接放在指令里。指令执行时间短,不需要访问存储。缺点是操作数大小受地址位数限制,广泛使用。
存储器直接寻址
操作数放在存储器中,指令地址字段给出存储器中的地址。
寄存器直接寻址
操作数放在寄存器中,指令地址字段给出寄存器编号。
存储器间接寻址

寄存器间接寻址

偏移寻址
直接寻址+寄存器间接寻址

堆栈寻址

对比
此外,还有复合寻址方式。
数据表示
能被计算机直接识别的数据类型。计算机的指令可以直接调用。
真值:机器数的真正值
机器数:用0和1表示的序列
数据宽度:

定点数
规定小数点的位置固定不变,就是定点数。

定点整数就是整数,定点小数就是存小数。
0的补码是一致的。
浮点数
小数点的位置是可以变的。常用科学计算法表示。
尾数和指数组成想要的实数。
规格化形式:小数点前只有一位非0数。
为了提高精度,对浮点数进行规格化。

浮点数的标准IEEE 754:
符号s:0为正,1位负
尾数f:用原码表示,尾数=1+signficand(0<signficand<1)。因为规格化尾数最高位总是1,省1位
尾数精度=尾数位数+1
阶码:用移码来表示阶码。移码就是将每一个数加上一个偏移常数来表示。
单精度的浮点数的偏移为:127 (阶码范围:00000001-11111110)
双精度的浮点数的偏移为:1023

下面是一个例子:
对于阶码全0、全1的特殊化表示:

十进制数
十进制数的二进制编码表示有两种:ASCII码和BCD码。
ASCII码
即十进制0-9对应30H-39H。1位十进制数用8位二进制数表示。
符号位的表示:
1.前分隔字符串:+号用2BH,-号用2DH。
2.后嵌入数字串:即在最低位数字的ASCII码的高4位进行操作,+号不动,-号改为0111
可以看出第二种方法可以节省一个字节。
BCD码
用4位2进制数表示。

字符表示
西文字符:个数比较少,常用7位ASCII码来表示。
汉字:个数可达6万个,编码形式如下:

数据度量与存储
采用字节编址。
数据的存储有两种方式:大端方式和小端方式

存储方式不同的数据需要进行顺序交换才可以交互。
数据对齐:按边界对齐和不对齐
如果不对齐会增加访存次数,但不对齐可以节省空间。
基本指令
数据传送指令:实现寄存器之间,或者寄存器和存储单元、存储单元间的数据传送
算术运算指令:将数据传给ALU,并返回到目的地址单元中。
逻辑运算指令
输入输出指令
系统控制指令
程序控制指令:
转移指令:改变CPU指令执行顺序,分为有条件和无条件转移。
子程序调用指令:主程序调用子程序。
ps:子程序调用指令是有返回,可嵌套和递归的。转移指令不要求返回。
转移指令是同一程序内的转移、子程序调用是程序间的转移。
返回指令
MPIS指令
所有mpis指令都是32bit,按字地址(4字节)对齐。
类型

op:操作码 rs:第一个源操作数寄存器 rt:第二个源操作数寄存器 rd:结果寄存器 shamt:偏移量 funct:表示具体操作 immediate:立即数或者偏移地址 target address:无条件转移地址
寻址方法
R类型:直接寻址
I类型:立即数寻址或者基址寻址
J类型:伪直接寻址(通过高四位补PC值,低两位补零来形成32位目标地址)