- 试解释1.5节中两个重要思想中的第一个。
所有计算机的模型都是一样的,只要输入是一样的,输出结果也是一样的。 - 试问,同汇编语言相比,高级语言是否能向底层计算机表述更多的计算方式?
不能。因为高级语言与底层计算机的相关性很弱,而汇编语言则是与执行程序的计算机密切相关的。 - 试问,是什么原因使得模拟计算机难以实现,从而使设计者转向采用数字设计?
因为模拟计算机(机械设备就属于模拟计算机)很难提高精度,而数字计算机可以。 - 列举自然语言的特征之一,说明它为什么不适合直接作为编程语言?
自然语言有二义性,而计算机其实很笨,需要明确的指令去执行,二义性的语言容易产生歧义,让计算机无法执行。 - 略
- 试用自然语言写一句话,然后给出这句话可能的两种解释。
我去(可能是语气词,也可能代表我要去什么地方) - 1.3.1节有关抽象的讨论给出的结论是:如果“底层所有一切都很好“,我们是没有必要去理解这些部件的组成的。但如果情况并不良好,我们还是要学会分解部件。在出租车的例子中,你并不知道怎样才能到达机场。采用抽象的方法,你只需要简单地告诉司机“带我去飞机场“即可。解释在什么情况下这种方法是有效的,在什么情况下会起到反作用。
当抽象可以解决问题的时候,这种方法是有效的。当抽象不能解决问题时,比如,想要知道去飞机场的具体路线,这时用抽象反而会起到反作用。 - John说:“I saw the man in the park with a telescope.“。这意味着什么?对这句话有多少种可能的解释?请列出来。这句话具备的什么特性,使得它如果出现在程序中是无法接受的?
我在公园看见那个人拿着电话。
我看见那个人在公园拿着电话。
这句话具有二义性,出现在程序中是无法接受的。 - 试问,自然语言可以表达算法吗?
可以,但是表达的内容不能具有二义性。 - 给出算法的三个特性,并给出简单的解释。
确定性。表述清晰,没有二义性。
可计算性。可以被计算机执行。
有限性。能够终止。 - 针对算法的每个特性,分别给出一个例子,在例子代码中,都缺少这个特性,说明此时为什么不能说它是一个算法。
确定性。如果缺少确定性,比如,要求给我一个数,这里就没有明确给我一个什么样的数。整数?负数?素数?实数?此时就不是一个算法。
可计算性。如果缺少可计算性,比如,求最大的一个数,最大的数无法计算,此时就不是一个算法。
有限性。如果缺少有限性,比如,要求循环打印一句话,没有告诉循环打印多少次,程序将一直执行,此时就不是一个算法。 - 略
- 两台计算机A和B,除了A具有减法指令外,其他指令完全相同。两者都具有对一个数求负值的指令。试问:A和B两台计算机,哪一台能解决的问题更多?证明你的结论。
一样多。减法可以通过求负指令实现。 - 假设我们试图对一组名字做字母排序(sorting)。有一种算法为“冒泡排序(bubble sort)“;我们用C语言编写这个算法,对其编译并运行在x86 ISA的机器上;x86 ISA可以实现为Pentium IV微结构的方式。我们称这样一个序列为“冒泡排序、C语言编程、x86 ISA、Pentium IV微结构“的转换过程(transformation process)。再假设我们有四种排序算法,且可以用5种语言编程(C、C++、Pascal、Fortran、COBOL);有面向x86和SPARC两种ISA的编译器,且有三种x86的微结构实现、3种SPARC的微结构实现。请问:
a.共有多少种转换过程?4523=120种
b.列举其中三种转换工程;
排序1、C语言编程、x86 ISA、SPARC I微结构
排序2、COBOL语言编程、SPARC ISA、SPARC II微结构
排序4、C++语言编程、x86 ISA、SPARC III微结构
c.如果x86的微结构是2种(而不是3种),SPARC的微结构是4种(而不是3种),那么共有多少种转换过程?
45*(2+4)=120种 - 将高级语言和底层语言相比较,列举一个优点、一个缺点。
高级语言:优点,与自然语言比较接近,简单易懂。缺点,与底层计算机相关性很弱。
底层语言:优点,与底层计算机密切相关。缺点,晦涩难懂。 - 列举至少三个ISA定义所包含的内容。
操作数、数据类型、寻址模式 - 简单描述ISA和微结构之间的区别。
微结构是ISA的实现,ISA是微结构的定义。 - 一种微结构可以实现多少种ISA?再反问,一种ISA可以在多少种微结构上实现?
一种微结构只能实现一种ISA。ISA可以在多种微结构上实现。 - 列出转换过程的所有层次,并在每层中找一个例子。
问题:10个1相加等于几?
算法:读取数字1,与之前的结果累加,循环以上步骤10次
语言:C、C++、Java语言
机器(ISA)结构:x86
微结构:Intel 酷睿7代
电路:加法器
器件:CMOS电路、NMOS电路 - 图1-6所示的转换层通常又被称为是不同的抽象层次。你认为这种说法是否合理?试用例子加以解释。
略。 - 假设你去商店购买字处理软件。请问该软件通常以什么方式存在?是高级语言方式或是汇编语言?或是与你的计算机ISA兼容的格式?请回答。
与计算机ISA兼容的格式。因为程序软件需要在计算机上运行,首先必须能够执行计算机上的指令。 - 假设给你一个任务,完成图1-6某一层的转换工作,且只允许转换为下面的一层(即不允许“跨层转换“)。试问,你觉得哪一层的转换工作难度最大?为什么?
略。 - 为什么通常会不断改变微结构实现却不改变ISA?例如,Intel公司为什么要确保Pentium III所实现的ISA一定要与之前的Pentium II一样?提示:当你升级计算机(如更换最新的CPU)之后,你希望丢弃原来的软件吗?
如果改变ISA结构,意味着之前运行的软件需要针对新的ISA结构重新编写,这很麻烦。
参考:https://github.com/QSCTech/zju-icicles/blob/master/计算机系统概论/作业答案/ch01_complete.pdf