计算机软件

1.1.2 从发展的角度看过软件,这一节从分层的角度再看一遍。两节内容有重叠,但角度不同:那一节问”怎么演变过来的”,这一节问”现在分成哪几层、每层之间靠什么翻译”。

这一节真正的价值是它定义了”源程序 / 目标程序”这对词,而下一节 1.2.4 的整个层次结构,就是把这对词重复应用五次的结果。

机制

三个级别的语言,两次翻译

高级语言编译程序汇编语言汇编程序机器语言

只有机器语言能被硬件直接执行,上面两级都必须先翻译下来。

谁能直接执行与 ISA 的关系
机器语言硬件直接执行就是 ISA 的编码
汇编语言不能,要汇编绑定 ISA,换机器要重写
高级语言不能,要编译或解释源码基本无关,编译结果强相关

汇编语言与机器语言基本一一对应——这是它与高级语言最本质的区别。一条 ADD 汇编指令对应一条机器指令;一条 C 的 a[i] = b[i] + c[i]; 可能对应七八条。

边界辨析:汇编语言不属于 ISA,机器语言才属于

这条分得很细,但 4.1.1 会用它出判断题。

ISA 规定的是机器指令的二进制编码——哪几位是操作码、哪几位是寄存器号。至于人怎么把这串二进制写成文字,那是汇编器的约定。

同一条 x86 机器指令,两种汇编语法写法完全不同:

语法写法汇编出来的机器码
Intelmov eax, ebx完全相同
AT&Tmovl %ebx, %eax完全相同

操作数顺序都是反的,机器码一个字节不差。 所以汇编语法属于工具约定,不属于 ISA。

源程序与目标程序

定义
源程序用汇编语言或高级语言编写的程序
目标程序翻译成机器语言后的程序

“目标程序”这个词有个容易混的用法:在完整的编译链条里,编译器输出的 .s 或 .o 也常被叫作”目标代码”。考试口径按上表:能被机器直接执行的那份是目标程序。 完整链条见 1.2.5。

编译与解释:判据是”生不生成目标程序”

编译程序解释程序
工作方式一次性全部翻译完,生成目标程序翻译一句、执行一句
生成目标程序✅❌
执行速度快慢
重复执行目标程序可反复执行,不用再翻译每次都要重新翻译
调试与跨平台需重新编译灵活

“解释程序慢”的准确理由:循环体被执行 次,就被翻译 次。 编译方式下它只被翻译一次。

系统软件与应用软件

系统软件应用软件
服务对象计算机本身用户的具体任务
例子操作系统、编译/汇编/解释程序、数据库管理系统、网络软件、标准程序库、服务性程序(诊断、调试)办公软件、游戏、浏览器

三个高频归属:

软件归类易错点
编译程序系统软件常被误归应用软件
数据库管理系统 DBMS系统软件——
用 DBMS 做的图书管理系统应用软件与上一行只差一层

这一节与 OS 的接口

操作系统是系统软件里最特殊的一个:其余系统软件都是”工具”,只有 OS 直接管理硬件资源。

视角关心什么在哪
计组OS 需要硬件提供什么机制(特权级、中断、地址转换)5.5.1
OS有了这些机制怎么管进程、内存、文件、设备OS 第 1 章

这条分界线是 408 里 CO 与 OS 的正式交界,1.2.4 的 M2 层就是它。

边界

说法判断理由
”汇编语言与机器语言一一对应”✅基本一一对应
”汇编语言属于 ISA”❌机器语言属于;汇编语法是工具约定
”解释程序生成目标程序”❌不生成,这是判据
”解释执行比编译执行快”❌循环体被反复翻译
”编译程序是应用软件”❌系统软件
”源程序一定是高级语言写的”❌汇编语言写的也是源程序
”高级语言程序可以直接在硬件上运行”❌必须翻译成机器语言
”机器语言程序也是源程序”❌它是目标程序

对照速查

语言直接执行?绑 ISA?翻译工具
机器语言✅✅不需要
汇编语言❌✅汇编程序
高级语言❌❌编译/解释程序
判据内容
编译 vs 解释生不生成目标程序
系统 vs 应用软件服务机器还是服务业务
源 vs 目标程序翻译前还是翻译后

考点

  • 编译与解释的区别——年年出现。
  • 系统软件的枚举,尤其编译程序和 DBMS。
  • 汇编语言与机器语言的对应关系。
  • 源程序的范围:汇编写的也算。

链接