计算机软件的发展

硬件那条线是器件越做越小,软件这条线是抽象越垒越高。两条线不是平行的:硬件每提供一个新机制,软件就把它包成一个更好用的接口,然后在上面再盖一层。

这一节内容极少,但它埋下了 1.2.4 层次结构的全部动机。

机制

三个级别的语言

级别用什么写谁来翻译与机器的绑定
机器语言二进制代码不需要翻译与 ISA 完全绑定
汇编语言助记符(ADD、MOV)汇编程序(汇编器)与 ISA 仍然绑定
高级语言C、Java、Python编译程序或解释程序基本不绑定,换平台重新翻译即可

三点边界:

第一,机器语言是唯一不需要翻译的。 它就是 CPU 直接执行的东西。“机器语言程序也要编译”是错的。

第二,汇编语言仍然与 ISA 绑定。 换一个 ISA,汇编代码要重写——它只是把二进制换成了人能读的写法,一条汇编指令基本对应一条机器指令。所以”汇编语言可移植”是错的。

第三,高级语言的可移植性来自”重新翻译”,不是来自”到处都能直接跑”。 同一份 .c 在两个平台各编译一次,得到的是两份完全不同的机器码。

边界辨析:编译程序 / 汇编程序 / 解释程序

三个都叫”程序”,都做翻译,但输入输出和工作方式都不同。这是本节唯一的高频考点。

输入 → 输出特点
汇编程序(汇编器)汇编语言 → 机器语言基本一对一翻译
编译程序(编译器)高级语言 → 汇编/机器语言先全部译完,生成目标程序,再执行
解释程序(解释器)高级语言 → 直接执行边翻译边执行,不生成完整目标程序

判据是”生不生成一份可以单独保存、单独执行的目标程序”: 编译生成,解释不生成。

两个常见陷阱:

  • ❌“解释程序比编译程序快”——反了。解释每执行一次就要翻译一次,同一段循环体被翻译 遍。
  • ❌“汇编程序就是汇编语言写的程序”——“汇编程序”指的是那个翻译工具(assembler),不是用汇编写的程序。这个歧义是中文术语造成的,考题很爱用。

完整的翻译链条(预处理 → 编译 → 汇编 → 链接 → 装入)在 1.2.5,展开在 4.1.1。

系统软件与应用软件

系统软件应用软件
服务对象管理和维护计算机本身面向具体用户任务
例子操作系统、编译程序、数据库管理系统、语言处理程序、网络软件文字处理、游戏、浏览器

最容易错的三个归属:

软件归类
编译程序 / 汇编程序 / 解释程序系统软件
数据库管理系统(DBMS)系统软件
用 DBMS 开发出来的图书管理系统应用软件

判据:“服务的是机器还是人的具体业务。“

软件与硬件在功能上是等价的

同一个功能可以做成电路,也可以写成程序。 乘法可以用阵列乘法器(硬件)做,也可以用移位加的子程序(软件)做,结果一样。

但代价不一样:

硬件实现软件实现
速度快慢
灵活性低,改不了高,改代码即可
成本高(占芯片面积)低

边界移动的方向由成本和使用频率决定:用得多、要求快的功能会被”搬进硬件”。

关联对照:「功能往硬件里搬」在全书出现四次

这是本书第一条隐线,从这一节起立住,后面每一章都会踩到一次:

出处搬进硬件的是什么换来什么 / 付出什么
2.2.1 先行进位、阵列乘法器进位传播、逐位乘加快;面积换时间
4.4 CISC 的复杂指令一整段常用操作指令数少;CPI 高、时钟慢
5.4.2 硬布线控制器控制信号的产生快;改不动、设计难
7.3.3 DMA 控制器数据搬运CPU 解放;硬件复杂、要争总线

四处的取舍完全同形:速度上去了,成本和灵活性下来了。 认出这条线,这四处的”优缺点对比”就不用分别背。

边界

说法判断理由
”机器语言程序需要编译后才能执行”❌机器语言直接执行
”汇编语言可以跨平台移植”❌与 ISA 绑定
”汇编程序是用汇编语言写的程序”❌指的是汇编器这个工具
”解释程序比编译程序执行快”❌解释要反复翻译
”解释程序会生成目标程序”❌不生成,这正是判据
”编译程序属于应用软件”❌系统软件
”软硬件功能等价,所以性能也等价”❌只是功能逻辑等价
”高级语言完全与硬件无关”⚠️源码级无关,但编译结果与 ISA 强相关;C 的 int 长度、字节序还会露出硬件(2.3.4)

对照速查

翻译工具输入 → 输出生成目标程序?
汇编器汇编 → 机器语言✅
编译器高级语言 → 汇编/机器语言✅
解释器高级语言 → 直接执行❌
记忆抓手内容
三级语言机器(不译)/汇编(绑 ISA)/高级(重新翻译即可换平台)
系统软件服务机器:OS、编译器、DBMS
软硬件等价功能等价,性能、成本、灵活性都不等价

考点

  • 编译 / 汇编 / 解释三者的输入输出与是否生成目标程序。
  • “汇编程序”的歧义。
  • 系统软件与应用软件的归属,尤其是 DBMS 和编译器。
  • 软硬件逻辑等价及其代价。

链接