第一节:数据表示
待补充...
第二节:寻址方式
知识点1:寻址方式的三种面向
多数计算机都将主存、寄存器、堆栈分类编址,分别有面向主存、面向寄存器和面向堆栈的寻址方式。
面向主存的寻址主要访问主存,少量访问寄存器。
面向寄存器的寻址主要访问寄存器,少量访问主存和堆栈。
面向堆栈的寻址主要访问堆栈,少量访问主存或寄存器。
知识点2:寻址方式在指令中的指明
寻址方式在指令中一般有两种不同的指明方式,不同的计算机可用其中的一种。
一种方式是占用操作码中的某些位来指明。
另一种方式是不占用操作码,而是在地址码部分专门设置寻址方式位字段指明。
这两种指明方式在不同的计算机上都有采用。
操作码:
地址码:
知识点3:程序在主存中的定位技术
逻辑地址是程序员编程用的地址。主存物理地址是程序在主存中的实际地址。最初的计算机,程序和数据存放在主存中的位置是由程序员编程时指明的,主存物理地址和逻辑地址是一样的,因而由逻辑地址构成的逻辑地址空间(也称程序空间)和由主存实地址构成的主存物理地址空间(也称实存空间)也是一致的。
各道程序的逻辑地址都只能从0O开始编址。主存物理地址是从0开始编址的一维线性空间。这样,逻辑地址空间和物理地址空间是不一致的。当程序装入主存时,就需要进行逻辑地址空间到物理地址空间的变换,即进行程序的定位。
程序在主存中的定位技术有:
(1)静态再定位
在目的程序装入主存时,由装入程序用软件方法把目的程序的逻辑地址变换成物理地址,程序执行时,物理地址不再改变,称这种定位技术为静态再定位。
(2)动态再定位
执行每条指令时才形成访存物理地址的方法。增加相应的基址寄存器和地址加法器硬件,在程序不做变换直接装入主存的同时,将装入主存的起始地址a存入对应该道程序使用的基址寄存器中。程序执行时,只要通过地址加法器将逻辑地址加上基址寄存器的程序基址形成物理(有效)地址后去访存即可。前面已讲过,地址变换时并不是所有指令的地址码都要改变,可在指令中加相应标志来指明指令地址是否需要加基址。人们把在执行每条指令时才形成访存物理地址的方法称为动态再定位。
(3)虚实地址映像表
地址加界法要求程序员所用编址空间不能超由实际主存的容量。20世纪70年代,采用虚拟存储器增加了映像表硬件后,使程序空间可以超过实际主存空间。它进一步发展了动态再定位技术。
第三节:指令系统的设计和优化
知识点1:指令系统设计的基本原则
指令系统设计步骤:
指令系统是程序设计者看计算机的主要属性,是软、硬件的主要界面,它在很大程度上决定了计算机具有的基本功能。
在设计新的指令系统时,一般要按以下步骤反复多次地进行,直至指令系统的效能到很高为止。这些步骤依次为:
1)根据应用,初拟出指令的分类和具体的指令。
2)试编出用该指令系统设计的各种高级语言的编译程序。
3)对各种算法编写大量的测试程序并进行模拟测试,看指令系统的操作码和寻址方式效能是否都比较高。
4)将程序中高频出现的指令串复合改成一条强功能新指令,即改用硬件方式实现。
指令类型:
指令类型一般分非特权型和特权型两类:
①非特权型指令主要供应用程序员使用,供系统程序员使用。非特权型指令包括算术逻辑运算、数据传送、浮点运算、字符串进制运算、控制转移及系统控制等子类。
②特权型指令只供系统程序员使用,用户无用。用户只有先经访管指令(非特权型)调用操作系统,再由操作系统来使用这些指令。其中,有“启动I/O”(多用户环境下)、停机等待、存储管理保护、控制系态,诊断等子类。
指令系统基本特性:
编译程序设计者要求指令系统应设计具有:
1)规整性。对相似的操作做相同的规定。
2)对称性。例如。有A-B→A,同时应有A-B→B;有A+B×C一→D,也应有(A+B)×C→D,这样便于编译。
3)独立性和全能性。如果有多种程序选择实现同一种功能,为减少编译时哪种实现好的分析,应限定操作只能有一种选择方式。
4)正交性。指令中各个不同含义的字段,如操作类型、数据类编码时应互不相关,相互独立。例如,乘法操作字长如果按目的寄存器的编号是奇数编号或偶数编号,就会增加编译的负担。
5)可组合性。让指令系统中所有操作对各种寻址方式和数据类型都能适用。
6)可扩充性。要留有一定数量的冗余操作码,以便以后扩充指令。
知识点2:指令操作码的优化
哈夫曼压缩:
哈夫曼压缩概念的基本思想是:当各种事件发生的概率不均等时,采用优化技术,对发生概率最高的事件用最短的位数(时间)来表示(处理),而对出现概率较低的事件允许用较长的位数(时间)来表示(处理),就会使表示(处理)的平均位数(时间)缩短。
[典型例题]
现假设某模型机共有n(n=7)条指令,使用频度如表2-2所示。
若操作码用定长码来表示需要「log2n](即3)位。操作码的信息源嫡(信息源所含的平均信息量)H=-EP,log2Pi
=0.41.32+0.31.74+0.152.74+0.054.32+0.044.64+0.035.06+0.03*5.06=2.17,说明表示这7种指令的操作码平均只需2.17位即可。
现在用3位定长码表示,信息冗余为:
相当大,为减少冗余,改用哈夫曼编码。
利用哈夫曼算法构造哈夫曼树。将所有7条指令的使用频度由小到大排序,每次选择其中最小的两个频度合并成一个频度,作为它们两者之和的新结点。再按该频度大小插到余下未参与结合的频度值中。如此继续进行,直到全部频度结合完毕形成根结点为止。之后,对每个结点向下延伸,分出两个分支,分别用一位代码的“O”和“1”来表示。这样从根结点开始,沿线到达各频度指令所经过的代码序列就构成该频度指令的哈夫曼编码。
哈夫曼编码并不是唯一的。只要将沿线所经过的“O”或“1”互换一下,就会得到一组新的编码。当有多个相同的最小频度时,由于频度结合的次序不同,使树的形状不同,编码也不同。但只要采用完全的哈夫曼编码,操作码的平均码长肯定是唯一的,而且是可用二进制位编码平均码长最短的编码。例如,在本例中,操作码的平均码长
完全哈夫曼编码是最优化的编码。但这种编码的码长种类太多,7种指令就有4种码长,不便于译码,因而不易实现。为此,结合用一般的二进制编码,可得到表2-5右部分的扩展操作码编码。
知识点3:指令字格式的优化
指令字格式优化措施概括起来包括如下几点:
(1)采用扩展操作码,并根据指令的频度p;的分布状况选择合适的编码方式,以缩短操作码的平均码长。
(2)采用诸如基址、变址、相对、寄存器、寄存器间接、段式存放、隐式指明等多种寻址方式,以缩短地址码的长度,并在有限的地址长度内提供更多的地址信息。
(3)采用0、1、2、3等多种地址制,以增强指令的功能,这样从宏观上就能缩短程序的长度,并加快程序的执行速度。
(4)在同种地址制内再采用多种地址形式,如寄存器一寄存器、寄存器一主存、主存一主存等,让每种地址字段可以有多种长度,且让长操作码与短地址码进行组配。
(5)在维持指令字在存储器中按整数边界存储的前提下,使用多种不同的指令字长度。
以上这些措施加以综合使用,就可以使信息冗余量减少,操作数的寻址灵活,操作码的备用码点增多,有利于以后对指令系统进行扩充。小、微型机的字长较短,这种优化技术显得特别重要。
第四节:指令系统的发展和改进
知识点1:两种途径和方向(CISC 和 RISC)
机器指令系统的设计、发展和改进上有两种途径和方向,分别是:
复杂指令系统计算机CISC
精简指令系统计算机RISC
知识点2:按CISC方向发展和改进指令系统
按CISC方向发展和改进指令系统可以分别从面向目标程序、面向高级语言、面向操作系统的优化实现三个方面来叙述。
1.面向目标程序的优化实现改进
面向目标程序的优化实现改进,就是对已有机器的指令系统进行分析,看哪些功能仍用基本指令串实现,哪些功能改用新指令实现,可以提高包括系统软件和应用软件在内的各种机器语言目标程序的实现效率。该方法既能减少目标程序占用的存储空间,减少程序执行中的访存次数,缩短指令的执行时间,提高程序的运行速度,又使实现更为容易。
2.面向高级语言的优化实现改进
面向高级语言的优化实现改进就是尽可能缩短高级语言和机器语言的语义差距,支持高级语言翻译,缩短编译程序长度和编译时间。
3.面向操作系统的优化实现改进
面向操作系统的优化实现改进的主要目标就是如何通过缩短操作系统与计算机系统结构之间的语义差距,进一步较少运行操作系统的时间和节省操作系统软件所占用的存储空间。
知识点3:按照RISC方向发展和改进指令系统
CISC存在如下问题:
(1)指令系统庞大,一般指令在200条以上,许多指令的功能异常复杂,需要有多种寻址方式、指令格式和指令长度。
(2)许多指令的操作繁杂、执行速度很低、甚至不如用几条简单、基本的指令组合实现。
(3)由于指令系统庞大、使高级语言编译程序选择目标指令的范围太大,因此,难以优化生成高效机器语言程序、编译程序也太长、太复杂。
(4)由于指令系统庞大、各种指令的使用额度都不会太高、且差别很大,其中相当一部分指令的利用率很低。
设计RISC应遵循的一般原则包括:
(1)确定指令系统时,只选择使用频度很高的那些指令,再增加少量能有效支持操作系统、高级语言实现及其他功能的指令,大大减少指令系统,一般使之不超过100条。
(2)减少指令系统所用寻址方式种类,一般不超过两种。简化指令的格式限制在两种之内,并让全部指令都是相同长度。
(3)让所有指令都在一个机器周期内完成。
(4)扩大通用寄存器数,一般不少于32个,尽量减少访存,所有指令只有存、取指令访存,其他指令一律只对寄存器操作。
(5)为提高指令执行速度,大多数指令都用硬件控制实现,少数指令才用微程序实现。
(6)通过精简指令和优化设计编译程序,简单、有效地支持高级语言的实现。
设计RISC机器的基本技术:
(1)按设计RISC的一般原则来设计。
(2)逻辑实现采用硬联和微程序相结合。
(3)在CPU中设置大量工作寄存器并采用重叠寄存器窗口。
(4)指令用流水和延迟转移。
(5)采用高速缓冲存储器Cache,设置指令cache和数据cache分别存放指令和数据。
(6) 优化设计编译系统。
采用RISC技术的好处主要有以下几个方面:
(1)简化指令系统设计,适合VLSI实现,由于指令条数少,寻址方式简单,指令格式规整划一、与CISC结构相比,控制器的译码和执行硬件相对简单。
(2) 提高计算机的执行速度和效率,指令系统的精简可以加快指令的详码,控制器的简化可以缩短指令的执行延迟,访问次数的大大减少可以提高程序的执行速度。
(3)降低设计成本、提高系统的可靠性。采用相对精简的控制器,缩短了设计周期,减少了设计错误和产品设计中被作废的可能性,这些均会使设计成本降低,系统的可靠性提高。
(4) 可直接支持高级语言的实现,简化编译程序的设计,指令总数的减少、缩小了编译过程中对功能类似的机器指令进行选择的范围,减轻了对各种寻址方式的选择、分析和变换的负担,不用进行指令格式的变换,易于更换或取消指令。