参阅系统程式

组译器

虽然以文字符号来取代机器码, 使得人们更容易阅读了, 但却导致电脑看不懂, 以致无法直接交由CPU 执行。因此必须透过一个翻译的动作, 将这个用组合语言写成的程式码转换成电脑看得懂的形式, 负责这个翻译动作的就是组译器(Assembler)。
经过组译器转成的档案称之为目的档, 接着还需连结器与载入器, 才能载入到记忆体中执行。

连结器
经组译器转成的目的档, 本来是可以执行的, 但是为了保持弹性, 目的档有许多地方并未翻译成机器码, 其原因有二:
1.程式可能会呼叫到其他的程式(External Reference) , 但组译器只处理程式本身而已, 因此对于程式中呼叫到其他程式的部份并无法处理。
2.现今的作业系统, 大多可在同时间执行多个程式, 因此同时间执行的程式可能被载入到不同的位址执行, 所以程式的机器码必须是可重新定址的(Relocatable), 亦即可以在不同的载入位址上执行。这也是组译器无法做到的。
连结器(Linker) 就是用来将相互呼叫的各程式目的档连结(Linking) 在一起, 产生可重新定址的机器码档案。

载入器
载入器(Loader) 负责将程式的机器码档案载入到记忆体中执行, 主要的功能有以下3 项:
1.要求记忆体空间:程式未执行前, 它是储存在磁碟空间里。当程式要被执行时, 需要分配到一块记忆体空间, 然后才能载入、执行。因此要执行程式时, 载入器会向作业系统发出要求(Request) 配置一段足够的记忆体空间。当作业系统有可用的空间时, 就会回覆载入器所分配空间的起始位址。
2.重新定址:当作业系统回报分配到的起始位址后, 载入器接着就会调整机器码中有关位址的地方, 让程式将来可以正确地被执行。
3.载入到记忆体:将已调整好的机器码载入到记忆体中, 等待作业系统执行。

编译器
使用高阶语言来撰写程式码, 不但更容易阅读和理解, 也比用低阶语言所写出来的程式码精简多了。
不过电脑并无法看懂这样的程式码, 和组合语言一样需要一个转译的动作, 将使用高阶语言所撰写的程式码转换成电脑所能看懂的机器语言, 然后才能执行。
这个转换的动作是由各个程式语言的编译器(Compiler) 或是直译器(Interpreter) 进行。

九十四年公务人员初等考试试题资料处理大意