学校开设的汇编语言提供的教材是电子版的:汇编语言/王爽著.——北京:清华大学出版社,2013 。
第一章 基础知识
1.0 汇编概述
在学习新知识时,我通常遵循的原则是:先明白是什么,再探究为什么。那么汇编语言是什么呢?
按照书上的内容:
嗯好像有点感觉,不急,再看看百度百科的说法:
好像更啰嗦了,说来说去还是那一句话:汇编语言是一个规定好的符号(助记符)集合,用这些符号代替对应的二进制数(机器指令)。
assembly [əˈsembli]:原意会议、集会。
翻译成的汇编一词中的“汇”字便是原意的体现,那么多的这个“编”字又体现在哪?这就要牵扯出另外一个老问题:机器只会机器语言,汇编语言机器怎么听得懂?
那么就需要由一种程序将汇编语言翻译成机器语言,这个过程便是“编”,这就是“汇编”这个词的意思吧。相对应的这个翻译的程序就叫汇编程序。很多时候,我们会把汇编语言简称为汇编。
再来看看汇编的一个特性:
微处理器 :微处理器由一片或少数几片大规模集成电路组成的中央处理器。
也就是说微处理器就是规模小的中央处理器(CPU)。
划红线的地方就是说:不同的设备有不同的机器语言指令集,那么与之对应的汇编语言也不尽相同。特定的汇编语言和特定的机器语言指令集是一一对应的,不同平台之间就不可直接移植。
由此,汇编语言的学习必须要给定某一个特定的设备了,这本教材是基于8086PC机开展的:
PC机:PC是Personal Computer 的缩写,也就是通常说的个人电脑,专业点就是称为微型计算机,简称微机。
好了,到这算是结束了“是什么”的问题,接下来就是为什么会产生汇编语言的问题。
1.1 机器语言
机器语言就是二进制数字序列。其实也不准确,电子计算机连二进制数都不会,只是能分别高低电平,一高一低就抽象成了对应的二进制数序列。
这是多么复杂且繁琐的工程啊,书上就举了两个例子让我们感受一下:
这个例子貌似还行,再看看下个例子:
1.2 汇编语言的产生
不论给谁看到上面用机器语言写的程序,都得崩溃。
机器语言是机器指令的集合,那么,每一条机器指令就得有对应的符号表示:
这种用符号表示的就是汇编指令。原来刚才自己理解的汇编语言只是汇编语言的主体——汇编指令。
寄存器:寄存器 (register) 是一种存储结构,用来存储二进制代码。上面说的AX、BX就是两个不同寄存器的代号。
存储器:说到寄存器就不得不提一下存储器,存储器也是一种存储结构,狭义上的存储器一般指的是硬盘、U盘等。
寄存器比存储器读写数据的速度快很多、性能更优越、价格自然更昂贵,但容量更小。
在很多情况下,存储器也可以是一个广义的表示,指的是所有可以存储数据的结构,在这个概念下寄存器是从属于存储器的。
有了汇编语言,肯定方便了不少,那么接下来的问题就是:汇编语言编写程序的工作过程是怎样的?这其实在刚才“编”这个字的讲解中了解过了:
1.3 汇编语言的组成
除了主体汇编指令还有什么呢?
伪指令和其他符号真没啥感觉,也没办法啊先放放,还是继续往下看:
所以我们有必要来学习一下硬件系统的相关知识。(都是概述)
1.4 存储器
内存:内存(Memory)也被称为内存储器和主存储器,其作用是用于暂时存放CPU中的运算数据,以及与硬盘等外部存储器交换的数据。计算机中所有程序的运行都是在内存中进行的。
内存和寄存器:寄存器是CPU里的东西;内存不是在CPU里的,但它和CPU直接相关。
1.5 指令和数据
1.6 存储单元
1.7 CPU对存储器的读写
CPU对存储器的读写必须要经过以下步骤:先确定读写内容的内存地址(存储单元的编号);再确定具体的操作,是读还是写;最后进行数据的交换。因为这三个步骤都是传递二进制数,所以为了防止混乱,它们必须要通过不同的总线——地址总线、控制总线、数据总线。书上举了个例子,感受一下这个过程:
再来看看这个过程 8086CPU的机器指令和汇编指令的区别:
1.8 地址总线
一个CPU有N根地址线,则可以说这个CPU的地址总线的宽度为N。这样的CPU最多可以访2N(0~2N-1)个内存单位。
1.9 数据总线
地址值和数据值用十六进制表示是非常常见的现象,主要原因如下:1. 数字一旦大了用二进制表示会很长,不利于书写。 2.因为16进制和二进制转换很容易看出来,一位就是4个二进制位,与或运算一眼就能看出来。3.另外内存地址用16进制也算是约定俗成,如果地址也用其他进制可能不太容易转化,最根本的还是二进制。
8088:
8086:
1.10 控制总线
1.11 内存地址空间
1.12 主板
说直白点,主板相当于电脑的骨架或者躯干,用来支撑各个硬件的连接。主板就像车子的框架,车子的各个部件(CPU、总线、存储器等等)都有了,但是没有车架(主板)把它们更紧密的融合在一起,这是肯定不行的。主板在生活中很常见,长的就像这样的: