【知识强化】第四章 指令系统 4.1 指令格式

那么从这一章开始,我们将要进入第四章,指令系统的学习。指令系统呢很容易出选择题,但是呢也很有可能和我们的下一章也就是CPU中央处理器结合起来出大题。所以大家对这一章也不能掉以轻心,一定打好基础,掌握它的基本概念。

那么我们这一章将要学习哪些内容呢?我们这一章的主要内容呢就是三个部分,第一个部分呢就是指令的格式,第二部分是指令的寻址方式。指令的寻址方式还是比较复杂的,它的种类还是比较繁多的,大家一定要区分清楚。最后呢我们将要讲解CISC和RISC的一些区别,大家做一个基本的概念就可以了。

那么我们这一节课就是第一节,指令格式。

那么指令格式这一节呢我们将要讲四方面的主要内容。第一个呢就是指令的最基本的一个格式,然后呢根据它的地址码的个数的不同给出不同的指令格式。然后就是定长操作码和拓展操作码。拓展操作码呢是比较重要的,大家一定要加以重视。然后呢就是我们的操作类型,操作类型呢大家了解一下即可了。那么我们这一节课来看一下什么是指令系统。

那么什么是指令系统呢?那回答这个问题之前我们先来看一下什么是指令。指令是什么?我们之前在第一章的时候就已经讲过了,我们大家也编写过高级语言的程序,有的同学呢可能也编写过汇编语言的程序。那么高级语言编写的程序和汇编语言编写的程序要想在计算机系统上执行的话,它是不能够直接执行的,必须由汇编程序或者编译程序转化为01代码也就是转化为我们这样的机器指令才能够被我们的硬件程序所执行。所以,什么是机器指令呢?机器指令就是说由CPU直接能够识别并且执行的这些操作,那么这就是机器指令。它呢是计算机运行的最小的功能单位。那么什么是指令系统呢?就是一台计算机所有的指令它构成的这样的一个集合就被称为指令系统,那么简称呢指令集。那么值得注意的是,我们之前也说了,这个机器指令,也就是说我们机器语言编写的这样的程序是只能够在某一台计算机上执行的,它是可移植性比较差的,所以呢一台计算机,只能够执行它自己指令系统中的指令,而不能执行其它系统的指令。那么指令系统在计算机当中的地位就可想而知了,它呢是软件和硬件的一个交界面。那么软件呢通过我们的指令系统,告诉我们的硬件它要做什么样的操作。那么硬件呢就通过我们的指令系统把我们的运算结果和硬件的状态返回给我们的软件。那这就是我们的指令系统在计算机当中的地位。那么什么是机器指令呢,什么是指令系统,大家应该都有了一些了解了。那么一个CPU,它可能要支持哪些指令,那么这些指令,能够实现什么样的功能,能够对哪些类型的数据进行操作,可能会影响哪些硬件的状态。那么硬件对指令呢又是如何识别的,如何对这些相应的一些指令进行译码呀编译呀,并且它的格式是怎么样的。那么这都是我们指令系统将要解决的问题。但是呢,绝大部分内容都是在计算机体系结构这门课中所讲述的。而我们的计算机组成原理呢,只对部分的内容进行一些介绍,所以呢大家不要太害怕这一章的内容。我们只进行一些指令系统中的一些很小一部分的内容的介绍,如果大家以后如果感兴趣的话呢,可以翻阅一些计算机体系结构的教材。但是在考研阶段,我建议大家呢只要把我们这一章要掌握的基本内容也就是那三块内容进行充分的掌握就可以了,而不必要太纠结于它的具体的一个细节,这些内容呢都是在计算机体系结构当中所讲述的。那么把我们计算机体系结构、计算机系统结构它的设计师所设计的这些指令,如何用逻辑的方法进行实现,那么这就是我们这一门课将要讲解的内容。控制器如何去识别去实现我们这样的指令,那么我们接下来就看一下指令的它的一般的格式。

那么指令的一般格式是怎样的呢?一般来说指令呢是由操作码和地址码两部分组成的。那么操作码是干什么的呢?顾名思义,操作码就是指出我们指令所要进行什么样的操作。那么也就反映了我们计算机要做什么样的操作。那么地址码呢,就反映了对谁进行操作。但是,这只是一种抽象。并且呢,操作码它的功能远远超出了反映机器要做什么样的操作这样的一种说法。操作码它不仅指出了我们机器要做什么样的操作,啊这是它最基本的一个功能。其实呢还有很多的指令系统的,它当中的操作码指出了对什么样的数据来进行操作。比如像IBM360,它同样的是加法操作,如果表示的基址不一样,它的操作码也不一样。就比如说这么一个加法指令,在IBM360当中它就有8条指令来反映不同的操作数来进行的加法。可能是定点数的加法,也可能是浮点数的加法,浮点数它尾数的基址呢是用二进制表示还是用16进制表示的呢,它同样也不同。那么还有的操作码呢,它指出了我们操作数的寻址方式。啊这就是操作码,它基本的功能就是反映机器做什么操作,同时呢它还有其他更广的一些功能。

那么操作码呢,又分为长度固定的操作码,和长度可变的操作码。长度固定的操作码呢,它的译码过程是比较方便的,并且呢译码电路也是比较简单的。比如像IBM 370当中,它的操作码呢,就指定了它是8位的操作码。长度可变的操作码呢,那么我们在下面的第三课时将要给大家来讲解,拓展的操作码它是怎样的。

那么我们来看一个小例子。那么这是一个例子,前面的OP呢就是操作码字段,然后呢它地址码字段呢它有4个地址,分别表示什么含义呢?我们用这样的一种简单的格式给大家写出来。那么(A1)(A1加括号),我们在第一章的时候就已经讲过了,A1表示的是地址,那么(A1)(A1加括号)呢表示A1这个地址里面的值。那么意思就是说,把A1和A2进行OP这样的操作之后,结果呢放到A3这个地址当中。那么A4呢就是指下一条将要执行的指令它的地址在哪儿。那么这是一个4地址指令。那么根据地址数的不同,就比如现在我们是4个地址,根据操作数地址码的它的数目的不同,我们可以把指令分成不同的格式,那么就是我们下一节将要讲解的内容。

那么呢我们上一节课已经把指令的一般格式给大家介绍完了,指令呢分为操作码字段和地址码字段。操作码呢给出了我们要做什么样的操作,那么地址码呢给出了我们对谁进行操作。那么操作码呢还可以分为固定长度的操作码和可变长的操作码。那么这一节课呢我们来详细地讲一下地址码。根据地址码数目的不同,我们可以把指令分成不同的格式。那么我们思考一下,为什么会有不同的个数呢?

那么我们带着问题进行这节课的讲解。首先上一节课我已经给大家举出了这样的一个例子。这是一个抽象的例子,它有4个地址。A1、A2、A3、A4,它表示的含义呢就是把A1这样的一个地址码所对应的地址当中的数,和A2这个地址码所对应的地址当中的操作数,进行OP这个操作码指定的这样的一个操作,然后呢把结果存回A3,接着呢再到A4里面去取出我们下一条将要执行的指令,它的地址在哪儿。

那么这样的一个指令啊,就是一个4地址指令,因为有4个地址嘛。那么我们假设,我们的指令字长是32位,然后我们分配8位固定的给操作码,剩下的24位呢我们平均分配这4个地址码。那么每个地址码呢就占6位。我们也假设存储字长也是32位,那么我们具体地给它赋一个值,那么A1表示的地址呢就是000001,A2表示的地址呢就是000010,A3表示的地址就是000011,A4表示的地址就是000100。那么我们假设OP是全0,它表示的含义呢就是加法操作。我们来看如何进行这样的一个操作。

假设这是我们的主存的一个示意图。然后000000存的呢是一个操作码的地址,

 

那么我们来看一下拓展的操作码的内容。

 

 

我们在第一课时已经讲了一下定长操作码,那么什么是定长操作码呢?定长操作码就是指我们把指令字的最高位的部分分配固定的一些位来表示操作码,那么这样的一种格式呢就叫做定长的操作码。

 

 

如果这样的若干位它是n位的话,那么我们就有2^n这么这么多条指令,也就有这么多个操作码。

那么定长的操作码有什么样的作用呢?它能够简化计算机硬件的设计,因为它的长度是固定的嘛,然后它也可以提高我们指令译码和识别的速度。因为我们只要取固定的这一段长度作为它的操作码就可以了。

 

 

 

 

一般来说,比较长的那些指令字长用的呢就是定长的操作码。那么有没有变长的操作码呢?是有的。那么为了使这样的指令字长在有限的前提下仍然能够保持比较丰富的指令的种类,我们就可以采取这样的变长的操作码,也就是说我们的操作码的字段它的位数是不固定的,它呢也可以分散地放到我们指令字的不同的位置上。所以呢这样的话,它就增加了我们指令译码和分析的难度,所以呢我们的控制器它就比较复杂了。那么变长操作码呢有好几种设计的方法,我们书上以及我们要掌握的呢就是扩展操作码这样的一种方法。

 

 

 

 

那么它是怎样的呢?我们来看一下。我们假设我们的指令字长是16位,是一个三地址码。那么呢前四位是我们的基本操作码字段。那么另外呢我们剩下的十二位平均分配给这样的地址字段也就是每一个地址呢就有4位。那么第一种方式呢,就是说我们把这样的4位基本操作码呀全部应用到我们的三地址指令。那么呢,就有16条这样的指令。

 

 

 

 

2^4嘛,所以就是从0000到1111。但是,我们必须把1111给留出来。为什么要留出来?我们来看一下,也就是说我们的0000到1110这15条的这样的指令都是三地址指令。也就是说我们的0000到1110,这四位,这15条4位的这样的都是三地址码的这样的操作码。

 

 

 

 

那么为什么要把1111给留出来呢?我们是这样的。我们把1111,默认的前4位是1111,然后我们的第五位到第八位,我们从0000到1110,这样的十五条指令我们把它作为二地址指令。也就是说,我们把A1这个地址码送给了我们的操作码,这样我们的操作码就变成了8位,然后剩下的

 

那么在本节的最后,我们了解一下操作类我们了解一下操作类型。

 

 

这部分内容大家做一个简单的了解就行了。操作类型有哪些呢?有数据传送类指令。LOAD它就是说把我们的存储器当中的数据放到我们的寄存器当中。

 

那么存储器就是我们的源数据,然后寄存器呢就是我们的目的地址。

 

 

STORE就是把我们的寄存器当中的数据放到我们的存储器当中,啊它们两个是相等的,一个是LOAD,一个是STORE。它们都是数据数据传送型指令。

 

 

那么就还有呢就是我们的算术逻辑操作,这个大家应该非常熟悉了。我们第二章已经讲的非常详细了,有加、减、乘、除、增1、减1、求补、浮点运算和十进制运算。逻辑操作呢就是与、或、非、异或还有位操作、位测试、位清除和位求反。

 

 

还有就是移位操作,这个我们也讲过,就是说算术移位、逻辑移位和循环移位。

 

 

转移操作,无条件转移,还有一个呢是条件转移。条件转移比如说结果是0,它跳转到哪儿。结果溢出了,它又跳转到哪儿。结果有进位了,它又转移到哪儿。啊这是条件转移。

还有就是调用和返回,还有陷阱和陷阱指令。那么陷阱是什么呢?陷阱是一个意外事故的中断。你比如说在机器运行的时候,可能会出现什么电源电压不稳定啊,存储器校验出差错了,输入输出输入输出设备出现了故障,或者用户使用了一些没有被定义的指令,或者说除数出现了0,结果有了溢出以及退选指令种种的意外情况,使得我们的计算机呢不能够正常地操作。这时候我们就必须及时地采取一些措施,否则就会影响我们整个系统的运行。所以呢,一旦出现了意外的故障,我们的计算机就发出陷阱信号,暂停当前的程序的执行,转入我们的故障处理程序进行相应的故障处理。一般来说我们的陷阱指令啊是不提供给用户直接使用的,而是作为一种引指令,由出现意外的时候,CPU自动产生并且执行,它是这样的。

 

 

 

 

然后就是输入输出操作。CPU寄存器和I/O端口之间的一些数据传送,这是操作。

 

 

 

那么呢就可以分为数据传送类的操作,也就是主存和CPU之间的数据传送。和输入输出类的操作,是CPU和I/O设备之间的数据传送,这是不一样的。

 

 

 

 

 

还有就是我们的运算类操作,程序控制类操作。啊,这就是我们整个操作类型。这一部分大家了解一下就行了,考试呢也不一定会考。

 

 

 

 

那么我们整个第一节就已经讲完了,指令格式这一这一节。我们讲了操作码和地址码它们的功能,以及地址码的个数,0地址、1地址、2地址、3地址和4地址。定长的这样和变长的这样的指令字结构,然后我们就讲了定长的操作码和扩展操作码,这一部分的设计是一个重点。最后我们简单地介绍了一下操作类型,我们整个这一节就讲完了。

 

posted on 2019-09-07 14:42  绿茵好莱坞  阅读(594)  评论(0编辑  收藏  举报

导航