读书笔记:《计算机系统概论》——第七章:汇编语言

汇编语言

从本章开始,编程语言从机器语言上升到了汇编语言。汇编语言属于低级语言,一般低级语言是“ISA相关的”,而高级语言是“ISA无关的”。
汇编语言相对于机器语言的进步是:由助记符来表示操作码,以符号名替代内存地址,而且与机器语言一样具备对指令细节的控制能力。

汇编指令一般格式为:
LABEL OPCODE OPERANDS ; COMMENTS
  标号                 操作码                      操作数                             注释

编写汇编语言需要在“汇编器”(assembler)中进行。
那汇编器是什么呢?
汇编器是一个软件,这个软件的主要功能是将汇编语言“翻译”成机器语言(即ISA格式的机器指令)
我认为汇编器值得关注的地方是:1、汇编过程;2、伪操作的理解。
接下来我以自己的理解来阐述一下汇编器这个软件工作的原理:
  1. 用户在汇编器界面输入相应的汇编指令;(当然此时键盘在不断地接收输入信号,显示器在不断回显输入的字符,这个程序是操作系统写好的程序)
  2. 用户将所有的指令输入完毕后,操作汇编器进行“翻译”,汇编器中应该有一个“指令表”(这个是作者自己猜测的,若有不对请指正),这个表说明了汇编指令对应的操作码,如ADD对应0001;汇编器中还有一个“符号表”,用来说明符号和地址之间的映射关系。汇编器进行翻译时,会进行两次扫描:
    • 第一次扫描:创建符号表。汇编器中,利用了LC(地址跟踪计数器),LC是汇编器的程序指针,每识别出1个指令,LC就增加1,若某一行指令有“LABEL”存在,则将该LABEL加入符号表,符号映射的地址值就是当前LC的值。需要注意,这里LC和PC虽然类似,但绝不相同。LC是汇编器的指令地址跟踪器,用于构建符号表(第一次扫描)或在对应的内存地址填入指令(第二次扫描),实际执行的时候还是用PC来指向指令地址;
    • 第二次扫描:生成机器语言。第一次扫描已经生成了符号表,第二次扫描时即可利用汇编器的“指令表”将对应的指令翻译成机器指令,同时将LC指向的内存地址填入机器码或数值。
  3. 伪操作:即为汇编器指令。伪指令与指令的最大区别在于,伪指令只在编译时起作用,而指令只能在程序运行时才发挥作用(这句话同样适用于上文的LC与PC)。换句话说,伪指令对编译器说话,而指令则是对CPU说话。
本章后记:说实话,作者学到这里对于伪指令的工作原理还是不太能够理解。为什么伪指令能够不生成实际的机器语言即可做出相应的控制:如程序初始地址,内存地址的值的初始化等等。我目前的理解是:汇编语言和机器语言还是有一个跳跃的。毕竟,汇编器是一个软件,需要工作在操作系统之下,而操作系统的概念我现在还完全没有概念;回忆前几章,其实也一直有一个问题没有解决:虽然前几章说明了LC-3是如何运行指令的,但没有说相应的机器语言指令最初是如何写进内存的。
鉴于这些原因,我在本章选择不纠结于此,希望在后面的章节中能够解惑。

你可能感兴趣的:(读书笔记)