Skip to content

计算机系统结构(1月27日)

lirui edited this page Jan 27, 2021 · 14 revisions

I1 0

I2 10

I3 110

I4 1110

I5 11110

I6 111110

I7 111111

采用Huffman编码法的操作码平均长度为:

H = 0.451+0.302+0.153+0.054+0.035+0.016+0.01*6 = 1.97位

操作码的最短平均长度为:H = 0.451.152+0.301.737+0.152.737+0.054.322+0.035.059+0.016.644+0.01*6.644 = 1.95 位

采用3位固定长操作码的信息冗余量为: R=1-1.97/3 约= 35%

Huffman编码法的信息冗余量: R= 1-1.95/1.97 约= 1.0%

与3位固定长操作码的信息冗余量35%相比要小得多

3、扩展编码法

Huffman操作码的主要缺点:操作码长度很不规整,硬件译码困难,与地址码共同组成固定长的指令比较困难

扩展编码法:由固定长操作码与Huffman编码法相结合形成

将上例改为1-2-3-5扩展编码法,操作码最短平均长度为:H=0.451+0.302+0.15*3+(0.05+0.03+0.01+0.01)*5 = 2.00

信息冗余量:R=1-1.95/2.00 = 2.5%

例:改为2-4等长扩展编码法,操作码最短平均长度为: H=(0.45+0.30+0.15)*2+(0.05+0.03+0.01+0.01)*4=2.20

2-4等长扩展编码法信息冗余量为:R = 1- 1.95/2.20 = 11.4%

地址码的优化表示

1、地址码个数的选择

地址码个数通常有3个、2个、1个及0个等4种情况,评价指令中地址码个数应该取多少的标准有两个:程序存储容量,包括操作码和地址码;程序执行速度,以程序执行过程中访问主存的信息量为代表

通过一个典型例子来分析:

例如,计算一个典型的算术表达式

x = (a×b+c-d)/(e+f)

用三地址指令编写的程序如下:

MUL X,A,B ;X<-(A)*(B)

ADD X,X,C ;X<-(X)+(C)

SUB X,X,D ;分子的计算结果在中

ADD Y,E,F ;计算分母,存入Y

DIV X,X,Y ;最后结果在X单元中

用普通二地址指令编写的程序:

MOVE X,A ;复制临时变量到X中

MUL X,B ;

ADD X,C ;

SUB X,D ;X中存放分子运算结果

MOVE Y,E ;复制临时变量到Y中

ADD Y,F ;Y中存放分母运算结果

DIV X,Y ;最后结果在X单元中

用多寄存器结构的二地址指令编写程序:

MOVE R1,A ;操作数a取到寄存器R1中

MUL R1,B ;

ADD R1,C ;

SUB R1,D ;R1中存放分子运算结果

MOVE R2,E ;

ADD R2,F ;R2中存放分母运算结果

DIV R1,R2 ;最后结果在R1中

MOVE X,R1 ;最后结果存入X中

关于地址码个数结论:

对于一般商用处理机,采用多寄存器结构的二地址指令是最理想的

如果强调硬件结构简单,并且以连续运算(如求累加和等)为主,宜采用一地址结构

对于以向量、矩阵运算为主的处理机,最好采用三地址结构

RISC处理机采用三地址指令

1、对于解决递归问题为主的处理机,宜采用零地址结构。编程容易,节省程序存储量

缩短地址码长度的方法:用一个短地址码表示一个大地址空间

用间接寻址方式缩短地址码长度,方法:在主存储器的低端开辟一个专门存放间接地址的区域

用变址寻址方式缩短地址码长度:变址寻址方式中的地址偏移量比较短

用寄存器间接寻址方式缩短地址码长度:例如,16个间址寄存器,用4位地址码就能表示很长的逻辑地址空间

指令系统的功能设计

基本指令系统:通用计算机必须有5类基本指令:数据传送类指令、运算类指令、程序控制指令、输入输出指令、处理机控制和调试指令

指令系统的性能:完整性、规整性、高效率和兼容性

指令系统的优化设计:CISC、RISC和VLIW

数据传送类指令:

由如下三个主要因素决定:

1、数据存储设备的种类;2、数据单位:字、字节、位、数据块等;3、采用的寻址方式

例如,考虑数据存储设备的种类:

寄存器->寄存器 寄存器 ->主存储器 寄存器-> 堆栈 主存储器->寄存器 主存储器 ->主存储器 主存储器 ->堆栈 堆栈 ->寄存器 堆栈 ->主存储器

运算类指令:

考虑四个因数的组合:

操作种类:加、减、乘、除、与、或、非、异或、比较、移位、检索、转换、匹配、清除、置位等

数据表示:定点、浮点、逻辑、十进制、字符串、向量等

数据长度:字、双字、半字、字节、位、数据块等

数据存储设备:寄存器、主存储器、堆栈等

以寄存器加法为例,一般设置如下几种:

寄存器-寄存器型的定点单字长加法指令

寄存器-寄存器型的定点双字长加法指令

寄存器-寄存器型的定点半字加法指令

寄存器-寄存器型的字节加法指令

寄存器-寄存器型的浮点单字长加法指令

寄存器-寄存器型的浮点双字长加法指令

寄存器-寄存器型的单字长逻辑加法指令

寄存器-寄存器型的定点向量加法指令

寄存器-寄存器型的浮点向量加法指令

以移位指令为例:

需要组合一下三个因素:

1、移位方向:左移(L)、右移(R)

2、移位种类:算术移位(A)、逻辑移位(L)、循环移位(R)

3、移位长度:单字长(S)、双字长(D)

组合起来共有:322=12种

其中,逻辑左移与算术左移相同

一般机器中要设置10条移位指令

SLAS 单字长算术左移

SRAS 单字长算术右移

SLLS(SRLS) 单字长逻辑左移,单字长逻辑右移

SLRS 单字长循环左移

SRRS 单字长循环右移

SLAD 双字长算术左移

SRAD 双字长算术右移

SLLD(SRLD) 双字长逻辑左移,双字长逻辑右移

SLRD 双字长循环左移

SRRD 双字长循环右移

程序控制指令

有多种转移指令:

无条件转移,条件转移指令

调用与返回指令

循环控制指令

......

转移指令:

零(Z)、正负(N)、进位(C)、溢出(V)及其组合

由条件转移指令之前的指令产生条件码

由条件转移指令本身产生转移条件

多组条件码

条件转移指令举例:

一般条件转移指令:

条件码由转移指令之前的指令产生,对指令流水线的影响小

例如:

BEQ ADR ;等于零转移

BLS ADR ;小于转移

BLEQ ADR ;小于等于转移

BLSU ADR ;不带符号小于转移

BLEQU ADR ;不带符号小于等于转移

BCC ADR ;没有进位转移

BVC ADR ;没有溢出转移

IBM370系列机的转移指令:

条件码占用状态字PWS的34、 35

PWS34 PWS35 条件 对应的屏蔽码

0 0 = 1000

0 1 > 0100

1 0 < 0010

1 1 溢出 0001

主要转移指令有2条:

BC M, ADR; 若屏蔽码M符合,转向ADR

BCR M, R ; 若屏蔽码M符合,转向(R)

举例:

指令 助记符 M

等于转移(零转移) BE(BZ) 1000

低于转移(负转移) BL(BM) 0100

高于转移(正转移) BH(BP) 0010

溢出转移 BO 0001

非等于转移(非零转移) BNE(BNZ) 0111

非高于转移(非正转移) BNH(BNP) 1101

非低于转移(非负转移) BNL(BNM) 1011

无条件转移 B 1111

复合条件转移指令

代替2条指令,首先进行运算,并根据运算的结果决定是否转移

不需要条件码,与高级语言一致

例如:

DNB R ADR ; R <- (R)-1 ,如果R不等于0转移

INB R ADR ; R <- (R)+1 ,如果R不等于0转移

JEQ R1,R2,ADR ; 如果(R1)=(R2)转移

JAD EQ,Rd,Rs,ADR ; Rd <- (Rd) +(Rs) ,如果(Rd)=0转移

循环控制指令

用1条指令完成循环的控制

代替3条指令的功能:运算、比较和转移

例如:JL Rs,Rz,Ri,ADR

Rs中存放循环变量,Rz中存放循环终值,Ri中存放循环的步长

地址个数太多时,可以把其中的1个或几个地址隐含起来,例如,在IBM370系列机中,Ri隐含,循环步长放在与Rz紧相邻的下一个寄存器中

隐含转移指令

应用场合:用于特殊的IF..THEN..结构中,THEN部分只有一条指令

实现方法:把IF条件取反,如果取反后的条件成立则取消下条指令,否则执行下条指令

例子: IF(a < b) THEN b = b+1,

COMP >=, Ra,Rb ; 若(Ra)>=(Rb)则取消

INC Rb

达到的效果:

不需要专门的转移指令,程序执行效率高

程序调用和返回指令

本身可以不带条件,也可以带条件

CALL 转入子程序

RETURN 从子程序返回

CALL CC 当条件CC满足时转入子程序

RETURN CC 当条件CC满足时从子程序返回

中断控制指令:

开中断、关中断

改变屏蔽

中断返回

自陷等

输入输出指令

启动、停止、测试设备、数据输入、输出等

采用单一的直接寻址方式

在多用户或多任务环境下,输入输出指令属于特权指令

处理机控制和调试指令

处理机状态切换指令,处理机有多个状态

硬件和软件的调试指令

硬件调试指令:开关状态读取等

软件调试指令:断点设置、跟踪、自陷指令等

指令系统的性能:

完整性、规整性、高效率和兼容性

1、完整性是指应该具备的基本指令种类:如通用计算机必须有5类基本指令

2、规整性包括对称性和均匀性

对称性:所有的寄存器同等对待,操作码的设置等都要对称,如A-B与B-A

均匀性:不同的数据类型、字长、存储设备、操作种类要设置相同的指令

高效率:

指令的执行速度要快

指令的使用频度要高

各类指令要有一定的比例,如,运算类指令占40%以上,数据传送类指令占30%等

兼容性:

在同一系列机内,指令系统,包括寻址方式和数据表示等保持基本不变

可以适当增加指令、增加寻址方式、增加数据表示等,但不能减少任何已有的...

设计计算机:

步骤一:对这个问题进行研究,把问题确定下来;

步骤二:将问题进行分解,确定基本的操作,用什么样的硬件,什么样的软件来解决;

步骤三:确定指令集

步骤四:指令集怎么实现,硬件的实现、软件的实现

处理器设计,确定指令集,编写编译器,编写相应的操作系统,对我们的应用加以支持,对硬件加以调度,然后运行一些Benchmark,确定设计是否优,模拟的方法或其它的方法,确定编译输出

影响计算机系统性能好坏:CPU(频率快慢)、存储器

Cache结构和性能评价

Clone this wiki locally