计算机中所使用的数据种类,它们主要有两类:一类是基本数据种类,包含位、串、整数、实数、字符和布尔量等;另一类是结构数据种类,包含向量、数据、字符串、堆栈、队列、记录等。由于计算机只能辨别0和1这类二进制位,那样在计算机中怎么样在存储器中用0和1来表示上面的这类数据,就是大家要学的数据表示。这一章内容不多,比较难理解的好像是向量这种数据种类。本章的内容主要应学会浮点数的数据表示。
1、数据种类(识记)
计算机中所用的数据一般可分为三类:第一类是用户概念的数据,这种数据一般是由程序设计语言所确定的;第二类是系统数据,它是程序在实行时由计算机系统蕴含生成的;第三类是指令,即被实行的程序可看成是数据的复合。
上面讲的是数据,那样数据种类是什么呢? 它不同于数据,数据种类除去指一组值的集合外,还概念了可用途于这个集合上的操作集,譬如有一组整数值的集合,连同概念在这个集合上可进行的加减乘除等算术操作,这个整数的集合就成为了整数数据种类。
从系统结构的看法来看,数据种类可分为基本数据、结构数据、访问指针和抽象数据等种类。大家这里讲的主如果基本数据和结构数据。
1、基本数据种类(识记)
一般包含二进制位及其位串、整数及自然数、实数(浮点数)、字符和布尔数等。
2、结构数据种类(识记)
结构数据种类是一组由相互有关的数据元素复合而成的数据种类,这类数据元素可以是基本数据种类中的元素,也可以是结构数据种类本身中的元素。也就是说这类数据是有结构的,包含向量和数组、字符串、堆栈、队列、记录等,结构数据种类中的元素未必都具备相相同种类型。
这里提到了向量,向量一般是指由标量的一组有序集合表示的量,它像一维数组,但又有所不同,由于标量一般只不过一个整数或实数,而数组元素未必只取实数。从计算机存储结构上来讲,向量一般存储在一段连续的存储空间里。而数组元素的存储可可以用链式存储方法,也就是未必存储在连续的空间里。
2、数据表示
1、数据表示、数据种类、数据结构的关系。(领会)
上面大家学了数据种类,还有一个定义是数据结构,数据结构就是指上面讲结构数据种类的组织方法,它反映了结构数据种类中各种数据元素或信息单元之间的结构关系,譬如树这种数据结构,里面的元素就有根和叶的层次逻辑关系。数据结构一般通过高级语言描述打造的,但计算机硬件并不懂什么是根什么是叶,它只认0和1.这就需要大家确定怎么样在计算机系统中进行数据表示,让硬件能认识各种数据种类。
计算机系统结构中的数据表示是指可由硬件直接辨认的数据种类。这里讲到硬件直接辨认,就是说在系统中可以直接由硬件达成相应数据的运算,也就是系统结构中有相应的运算指令和运算部件来完成这项任务。那样如何表示才能让硬件辨别某种数据种类?
上面的数据种类和数据表示就涉及到软硬件的交界面了。数据结构所研究的是软的方面,而数据表示考虑是是硬的方面,让计算机可以辨别处置,并尽可能节省存储空间。
2、二进的定点、浮点数据表示(综合应用)
主要讲述是的IEEE标准的二进制浮点数表示:
IEEE754标准在表示浮点数时,每一个浮点数均由三部分组成:符号位S,指数部分E和尾数部分M.
大家了解10进制数的科学计数法如A= -3.5×105
这里最前面有一个负号,3.5是尾数,两个有效数字,后面以10为基数的指数为5.大家可以将它表示为-3.5E5
同样,二进制数也可以用科学计数法规格化表示,譬如5这个数,假如用二进制表示的话,整型为101,假如用科学计数法则可以表示为 1.25×24 ,这里用的是十进制,将尾数换成二进制就是1.01(就是101向前移两位小数点,和十进制一模一样),后面的指数4换成二进制则是10,那大家将它用二进制的科学计数法就能写成1.01E10.
当大家根据这种计数法给一个数字确定其精度(有效位)后,就能用肯定长度的1和0的位串来表示一个实数了。
浮点数一般使用以下四种基本格式:
(1)单精度格式(32位):除去符号位1位后,E占8位,M占23位。
(2)扩展单精度格式:E=11位,M31位。
(3)双精度格式:(64位);E=11位,M=52位。
(4)扩展双精度格式:E=15位,M63位。
大家非常重要的是学会单精度格式的表示法。在IEEE754标准中,约定小数点左侧隐含有一位,一般这位数就是1,如此事实上使尾数的有效位数为24位,即尾数为1.M.指数的值在这里称为阶码,为了表示指数的正负,所以阶码部分使用移码表示,移码值为127,阶码值即从1到254变为-126至+127,在IEEE754中所有些数字位都得到了用,明确地表示了无穷大和0,并且还引进了非规格化数,使得绝对值较小的数得到更准确表示。
3、向量数据表示(简单应用)
这里又提到向量,前面已经简单讲解过向量,这里说的是向量数据表示,大家了解向量在内存中是连续存放在一段空间里的,换句话说,这类向量元素的地址是连续的。
在标量计算机上运行时,因为没专门的向量数据表示,因此在计算一个向量(等于一维数组的计算)时,每取用一个数据元素,都要用到计算该元素的地址。而在向量机中,因为有了向量数据表示,就能把一个向量用一个位串来表示出来。向量指令就是可以用一条指令对向量的全部元素进行运算的指令。
比方,有两排抽屉:A和B:大家有一个任务,就是把A中每一个抽屉里的东西根据顺序一一对应地搬到B的每一个抽屉里。
用标量指令就是如此:听着,把A1抽屉里的东东给我搬到B1里去~~(等打工的搬好后)再把A2抽屉里的东东给我搬到B2里去!(又等跑腿的搬完后)还有,把A3抽屉直到把全部抽屉搬好,数到了5,算是完成一项任务了,其间用了5次循环命令。
而用向量指令就是这么说的:听着,把A柜子从第1格抽屉起的5个抽屉的东东给搬到B柜子里去,地方是从第1格抽屉起,依次放到5个抽屉里去。如此,跑腿的就了解了,只须一句话就完成了任务。
向量表示就是用一个位串来表示一个向量的基址、位移量和向量长度,如此三个值就能明确表示一个向量,并能确定参加计算的元素所在的地方,因此向量表示是向量指令及向量机得以达成的基础。
在向量处置中,还会遇见稀疏向量(就是含有很多0元素的向量),所以为了节省空间了处置时间,使用压缩向量的表示办法。这里应该注意的是有一个中间向量Z向量,它是一个位向量,每一个元素不是1就是0,而压缩向量就是依据Z向量中的有1的元素对应的稀疏向量元素存储起来而得到的。这个容易理解。
4、自概念数据表示(领会)
为了降低高级语言与机器语言之间的差别,使用了自概念数据表示,就是由数据本身来表明数据种类,如此可以使每种指令的类型大为降低,称为通用化指令。自概念数据表示形式有两种,即带标志符数据表示和数据描述符表示。
带标志符数据表示就是对每个数据都附加一个标志符,由这个标志符来表示这个数据的种类。这种表示法有它的优点也有它的缺点,请认真领会一下。
其优点是:简化指令系统;易于对编程查错;自动种类转换;简单化编译;便捷程序调试。缺点是增加存储空间又使指令实行速度变慢。
另一种就是数据描述符表示,主要用来描述复杂和多维结构的数据种类,如向量、记录等,它于带标志符数据表示区别是:
(1)标志符要与每一个数据相连,两者合存在一个存储单元中;而描述符则和数据分开存放(一个连合一个分)
(2)要访问数据集中的元素时,需要先访问描述符,这就至少增加一级寻址(先访描符增寻址)
(3)描述符可看成是程序一部分,而不是数据的一部分。标志符则可看作是数据的一部分(程序部分不是数)
指令系统是计算机外特质的要紧内容,本章主要介绍了两种不同风格的指令系统:RISC和CISC.在学习这两种指令系统之前,大家先认识一下什么是指令系统。
1、指令系统的设计(领会)
指令系统是指机器所具备的全部指令的集合。它反映了计算机所拥有些基本功能。它是机器语言技术员所看到的机器的主要属性之一。
一般大家说的加法指令、传输数据指令等等就是计算机的指令,这类指令就是告诉计算机从事某一特殊运算的代码,一种计算机系统确定的这类指令的集合大家就说它是这种机器的指令系统。
那样指令系统的设计要干什么? 就是要确定它的指令格式(就是指令有多少位长,哪几位表示地址,哪几位表示操作等)、种类(如堆栈型、寄存器型等分类)、操作(譬如运算、数据传送啊什么的都是指令中要确定的操作)与操作数的访问方法(一个指令要访问数据,是按其地址访问还是按内容访问等也要由指令设计来解决)。
大家了解,由多条指令构成的程序是要以二进制的形式放到存储器中的,早期的存储器非常昂贵,因此致使指令设计者尽可能增强一条指令的复杂性以降低程序的长度。还用微程序(就是保存在专用的存储器中的一小段程序,运行时只须用一条指令来启动它就可用来代替好多条指令) 来改进代码密度。如此的设计倾向形成了一种传统的指令设计风格,即觉得计算机系统性能的提升主要依赖增加指令复杂性及其功能来获得。这就是称为复杂指令系统(CISC)的设计风格。大家目前用的PC机多是用这种设计风格的指令系统,譬如MMX多媒体扩展指令等,都是增加进来的指令,是复杂指令。
后来,通过测试,这种不断增加指令复杂度的方法并不可以使系统性能得到非常大提升,反倒使指令系统达成更困难和浪费时间。所以在70年代中期又出现了另一种称为简化指令系统(RISC)的设计风格。它的基本思想是,简单的指令能实行得更快与指令系统仅需由使且频率高的指令组成。(插话)
指令系统在设计时,应特别注意的是怎么样能使编译系统高效、浅易地将源程序翻译成目的代码。这就是指令系统的设计原则。为了达到这个目的,在设计时应注意:正交性、规整性、可扩充性、对称性。(请对照课本加以理解)
2、指令系统集结构的分类(识记)
前面大家了解了指令系统的设计要确定它的指令格式、种类、操作及对操作数的访问方法。目前就提到了分类:
一般地,指令系统集结构分类主如果依据在CPU中以何种存储方法来存放操作数。
大家知到,CPU在进行数据计算时,一直要先把数据取到某种寄存器中才能开始。而这寄存器的种类有堆栈型、累加器型和通用寄存器型三种。相应地,用哪种存储方法来存放操作数的,就把指令系统集结构分成堆栈型、累加器型和通用寄存器型三类。它们是不同的,堆栈型结构中,操作数一直被默认存放在栈顶,累加器结构中,操作数一直被默认存放在累加器中;而在通用寄存器中,所有些操作数都需要被说明是存放在哪一个寄存器或存储器的什么单元中。
所有些计算机都可按上述分类标准进行归类。但有些机器可能是某些种类的混合,如intel的8086处置器便是通用寄存器结构和累加器结构的混合。
三类型型的比较:
其中通用寄存器指令系统又可进一步分为:寄存器-寄存器、寄存器-存储器与存储器-存储器三类。在RISC机中,只可能存在寄存器-寄存器种类。(寄存器是在计算机内部的存储小容量数据的装置,尤指数据可以同时存储和运算的装置)请注意它们的优势和弊端,第一种是具备最好的指令密度,但访存速度慢。第三种方法则简单,但程序代码较长。第二种取中。
3、操作数访问(寻址)方法(识记)
指令中对操作数的访问方法,按访问方法可分为两大类:常见的是按地址访问,另一类是按内容访问方法。
计算机中的两个地址定义一个是逻辑地址、一个是物理地址,前者为虚,后者是实,一般所讨论的寻址方法是指逻辑地址的寻址方法。
地址的编址,一般有三种不同方法:(1)按各种部件分类编址;(2)统一编址;(3)隐式编址
对存储器这一存储部位编址(领会),绝大部分计算机将字节作为最小访问单位(注意,1字节=8位。
1字=4字节。)这里大家要弄清什么是大端排序和小端排序.譬如要访问一个字(32位4字节)的时候,需要一次写入4个字节的数据,而存储器最小访问单位是1个字节,那样就需要把这字分成4段存入4个单元中。假如确定把这个字的最低有效位的字节(最右侧的一段)是存储器地址末位为0中的内容,最高有效位的字节(最左侧的一段)是地址末位为3的内容,则大家称之为小端排序(即访问字的最低有效位(小端)地址是按0、4等顺序排列的);反之若将字的最高有效位的字节放在0、4等地址中,则称之为大端排序。
访问方法可按面向对象和寻址方法来区别:前者可分为面向寄存器、面向存储器、面向堆栈的访问方法。后者可分为如下寻址方法:(认识一下即可)
立即数 指令中所带的操作数内容即是一个可用的数绝他们式 指令中给出一个地址,访问该地址得到操作数寄存器方法 访问某个寄存器中给出的地址,由地址访问到操作数寄存器间接访问某个寄存器,由这个寄存器中的内容找到另一寄存器,由给出的地址获得操作数存储器间接访问存储器中某单元,得到另一地址,再访问到该地址获得操作数自增/自减将某寄存器中的数加上或减去操作操作数的字节数,找到地址变址方法 由寄存器中的数加上变址量得到地址
在CISC计算机中,用频率最高的是带偏移的寄存器寻址方法,第二是直接量寻址,再就是寄存器间接寻址。在RISC机中,只选择那些用频率高的寻址方法,如相对于寄存器寻址或PC的偏移寻址、立即数寻址与基址加变址寻址等。
按内容访问方法时,并不提供要访问的存储单元地址,而是给出要访问的内容(非常像是查看)。因此存储器的结构形式要作相应变化。为了加快访问速度,需要使用并行方法,相应的存储器就称为联想存储器。请对照课本第49页,对联想存储器的基本结构和其访问办法进行理解和领会。
好用的联想存储器,一般除有按内容访问能力外,还有按地址访问能力。
指令格式及其优化(简单应用)
指令一般由两部分组成:一部分是操作码,另一部分是操作地址码。当操作数地址为隐式时(如堆栈的操作,默觉得栈顶),后一部分则不是需要的。依据指令地址码部分中显式指明的地址个数,则可形成零地址、单地址、二地址、三地址及四地址指令。
大家说的确定指令格式主要就是选择指令字中的操作码长度和地址数。指令字的长度有定长和变长两种。
大家着要紧讨论的问题是指令格式的优化问题,优化就是以较少的格式,以尽量短的码长来达成各种指令编码。
指令字包含操作码和地址码,所以对这两部分都采取优化手段。
1、操作码的优化。这要用到霍夫曼压缩的定义。霍夫曼压缩法是一种频率有关的编码办法,即出现频率高的字符编码短,频率低的字符编码长,如此可以缩短平均码长。大家要学会的是用霍夫曼树达成霍夫曼编码。其办法非常简单:
依据所给的各种指令用频率,把它们从小到大依次排好作为叶结点(相同的频率可任取一个排在前),然后把最小的两个结点值(频率)相加,形成一个新结点,以这个结点的值与其他的叶结点值比较大小,仍旧取最小的两个结点值合并产生新结点,直到最后合并为一个根(一般这个值是1或100)。简单地记为:
从小到大排序,
最小两个合并,
重复上述过程,
只剩一个结束。
编码时,从根结点开始向下,凡左侧分支都编为1,右侧分支都编为0(也可取反),则从根结点到叶结点的一条路径上的编码组合就是该指令的霍夫曼编码。(请注意观察图4.12中的霍夫曼树)注意,霍夫曼树不是唯一的(由于相同的频率可以任取一个在前,且编码时又可任取左1或左0),但所得的平均码长应是一样的。因为霍夫曼编码得到的码长非常不规整,所以有时要使用霍夫曼扩展编码,就是在霍夫曼码的基础上对码长加以限制(取几个确定的长度如2位、4位等),对编码作适合改变。
平均码长应该容易计算吧,这也是要用到的。
2、地址码的优化。上面大家学了操作码的优化,但一条指令码还包含地址码。两者合理安排才能使指令格式得到优化。示意如下:
因为操作码优化后是变长的编码,假如整条指令是定长的,那样使地址码的宽度应随不同指令变化,以配合操作码形成定长指令;也可以通过改变指令字中的地址数和地址码的长度,以使单地址及多址都可以在一条指令中用;假如操作码和地址码以外还有空余的码位,则设法用来存放立即操作数或常数。
当今的RISC机指令系统中,全都是用定字长指令格式。
5、两种不一样的指令系统设计风格 CISC和RISC
这两种风格应作比较深入的领会,并要识记一些内容。
CISC(复杂指令集计算机)以VAX-11/780为代表,70年代后的各种微机如大家用的intel80x86均是这种风格的计算机。
CISC设计风格的特点是:
(1)指令系统复杂;浪费时间(2)绝大部分指令需要多个机器周期方可实行完毕;自由主义(3)各种指令都可访问存储器;地方主义(4)使用微程序控制;小金库(5)有专用寄存器;低效率(6)很难用优化编译器生成高效的目的代码程序。 复杂
这哪儿是特征,分明是一大堆缺点嘛,RISC机的特征就是把它们取反,但凡 CISC是如此的,它就不是如此的:
(1)简化指令系统;省时(2)除去LOAD/STORE指令外,所有指令都在一个时钟周期内实行完毕;集体主义(3)除去LOAD/STORE指令外,其余指令只与寄存器交际;搞活流通(4)绝大多数使用硬联线控制,不需要或少用微程序达成;查封小金库(5)用较多的通用寄存器,一般至少有32个,绝没专用寄存器;高效率(6)使用优化编译技术,生成高效的目的代码程序。 简化
RISC与CISC技术两者的主要不同在于设计思想上的差别,RISC的设计思想是;将那些不是最频繁用的功能(指令)由软件来加以达成,如此就能优化硬件,并可使其实行得更快。在第一章中大家学过计算机系统的设计的准则,第一个准则就是:只加速用频率高的部件。RISC的设计思想与此完全吻合。
下面大家学习RISC技术中所使用的特殊办法:
1、使用较很多的寄存器,使用窗口重叠寄存器技术。
窗口重叠技术:在RISC结构中,为了降低过程调用中保存现场和打造新现场,与返回时恢复现场等辅助操作,一般将所有寄存器分成若干个组,称为寄存器窗口。每组中有若干个寄存器,每当有过程调用时,就分配一个未被用的寄存器窗口,如此就可降低保存和恢复现场的开销。除此之外在每一个寄存器窗口中,又分成大小固定的高区、当地和低区三个区段。其中当地区用来存放局部变量,高区在被调用时用来保存调用过程送来的参数,而在返回主调用过程时,存放返回结果。而低区在调用时存放欲送往被调用过程的参数,而在被调用过程返回时用来存放返回结果。在用时,每一对调用和被调用过程的寄存器窗口各自的低区和高区相互重叠。一旦发生过程调用或返回,在控制由一个窗口转换到另一窗口时,这类参数就通过两个窗口间的公共寄存器区自动的被传送而无需再用额外的传送时间。 (可参照教程进行理解)。
2、使用优化延迟转移技术
优化延迟转移技术:即是使转移指令在筹备将控制转向目的指令的同时,实行紧随在转移指令之后的那条指令,也就是是在将转移指令后延迟槽内的指令实行完毕后,才发生真的的转移(不论转移是不是成功),这种优化技术可在保证程序正确实行的同时又可防止延迟转移中损失的一个机器周期时间。
3、使用比较转移指令
比较-转移指令:在RISC机中,把比较和转移(在CISC机中需用两条指令完成的功能)合并成一条指令。该指令将直接对两个对象(寄存器-寄存器或存储器-立即数)进行相等或不等比较,然后依据比较结果辨别是不是进行转移。如此就可省去一条指令,并不受条件码的约束。
4、使用优化编译技术
优化编译技术:在编译时就可发现可能出现的阻塞状况,由编译器通过重排指令实行序列来消除可能出现的阻塞状况,当没办法消除时就填入相应的空操作,因此无需硬件的互锁流水支持。
以上的特殊技术并中是每一种RISC机都使用的,在RISC机中有两个比较典型的代表,一个是加州大学伯克莱分校的RISC-I、II机的思路,侧重系统结构的支持,使用由很多寄存器组成的寄存器堆及窗口重叠技术。另一个是遵循斯坦福大学的MIPS机器思路,侧重使用编译的支持,使用优化编译技术,。
CISC和RISC两种设计风格的比较,其实就是说RISC优点,简单地说就是快、省、靠谱、易达成、好优化。
关于RISC的两种代表机型的指令系统实例,要对照它们的指令系统中指令数、指令格式、寻址方法及使用的特殊技术来进行比较。