结构化计算机组成(Strcutured Computer Organization)
https://book.douban.com/subject/1122321/
然而这只是理想情况。我们必须面对严酷的现实。当一种新型计算机出现的时候,所有潜在的购买者要问的第一个问题是:“他和以前的型号兼容吗?”第二问题是:“我能够在上面运行我现有的操作系统吗?”第三个问题是:“它能够不加修改就运行我现有的应用程序吗?”。如果这些问题的任何一个答案是“不能”,那么设计者就必须去做大量的解释工作。因为计算机的购买者很少愿意扔掉他们的所有旧软件而重新购买新的。
怎样才能设计出一个好的指令系统层呢?有两个主要因素:
首先一个好的指令系统层应该定一套和将来的技术条件下能够高效率实现的指令集。这样可以使高效率的设计应用于今后的若干代计算机中。设计得不好的指令系统层实现起来比较困难,而且可能需要更多的逻辑门来实现处理器和更多的内存来执行程序。因为减少了重叠操作的机会,可还可能运行起来比较缓慢,这样既需要进行更复杂的设计来获得与一个设计得好的指令系统相同的性能。如果一个指令系统曾使用一种极为特殊的技术来实现高效率的设计,一般来说它只能用在某一代计算机中。它就像是一道闪电,虽然耀眼,但是不久就会被更加有预见性的设计所取代。
其次,一个好的指令系统层应该为编译器提供明确的编译目标。编译结果的规律性和完整性是指令系统层中重要的特性。然而,并不是每一个指令系统层都做到了这一点。这些属性对于编译器来说是重要的,编译器在有限选择种选择最佳方案时经常会遇到困难,尤其是当某些显而易见的选择被指令系统层禁止的时候。简而言之,由于指令曾是硬件和软件之间的接口,它应该使硬件设计者和软件设计者都满意。对于硬件设计者来说,它很容易高效率实现,对于软件设计者来说,可以很容易地为它生成代码。
我们要说明的是现在计算机的核心是深度流水线的三寄存器存取RISC引擎,UltraSPARC简单的把引擎暴露在用户面前,Pentium II通过采用老的指令系统层外壳把这一引擎隐藏起来,而在内部通过把CISC指令划分成等价的RISC微操作来获得高的执行效率。PicoJava II也把RISC引擎隐藏在内部,但和Pentium II相反,它是把多条指令系统层指令组合成一条RISC指令来完成。如果花仙子在森林中偶然碰到了一些计算机指令,它会发现一些指令太大了(Pentium II指令必须被分裂),有些又太小了(PicoJava II指令必须被组合执行),还有一些正好(UltraSPARC指令集),这就是计算机科学的三只熊理论.
使用EPIC(Explicitly Parallel Instruction Computing)计算模式的IA-64体系结构是我们可以很容易的开发程序的并行性,它还使用了判定和预取技术来加快执行速度。总而言之,相对于Pentium II而言,这是一个显著的进步,但是为了充分发挥其能力,需要编写能进行并行优化的编译器,这是一个相当沉重的负担。
在四个方面需要我们使用汇编语言
- 由于一个大项目成败的关键往往在于某些关键代码短的性能能否在提高2-3倍,这时候需要汇编编写关键代码
- 某些情况下,由于缺乏内存,使用汇编语言可能是唯一的办法,比如一些嵌入式的应用,例如智能卡中的程序,蜂窝电话中的程序,设备驱动程序,BIOS程序和关键性能饮用的内部循环程序
- 编译器必须能够产生共汇编器使用的汇编程序或者自己执行汇编过程。因为为了理解编译器的工作原理,必须首先理解汇编语言。因为编译器和汇编器毕竟也是人编写的
- 研究会汇编语言可以使我们看清楚实际计算机的结构,对于学习计算机体系结构的学生,编写汇编语言是在体系结构层理解计算机的唯一途径