零)汇编趣谈
汇编语言的起源要从机器语言开始说起。机器语言是机器指令的集合,机器指令就是机器能够接受和处理的信号,主要是一串二进制数字(二进制:逢二进一,只有零和一),简单形象地说,零是关门的信号(零是低电平),一是开门的信号(一是高电平)。现在一个房子(CPU的运算器)内有很多扇门,每个门都能接受信号(高低电平驱动电子设备进行运算)自动开关,不断的开关,等全部处理完这些信号之后。人工将最后门的状态(得到二进制数)转换为我们人类可以识别的消息。以前全部是人在做这些翻译工作。
这机器语言1960年末就开始使用,到现在已经有58岁高龄,是编程语言中的高寿了。
有一天,某位聪明人,觉得反复地敲01,太烦了。他想啊想,突然一个小学老师教的名词出现在脑海中。
“换元法”!为什么不让机器翻译成我们能识别的消息?于是他在机器中把固定词句的和01串联系起来。这样就可以直接输入人类消息,让机器自己翻译,处理,再逆翻译成人类消息。说得专业点就是汇编指令是机器指令便于记忆的书写格式,就是说汇编指令是机器指令的助记符,同机器指令一一对应,没有本质变化。
一)汇编语言的特点
汇编语言的特点同机器语言差不多,只是相对于机器语言表面上更容易让人接受,理解。
- 直观性:是人类可直接识别的编程语言。
- 依赖性(不移植性):不同的CPU有不同的汇编指令,所以在不同的电脑有不同的汇编指令,相同的代码不可直接移植到不同的电脑上。类似于不同的房间(CPU)的构造不同,门的位置和个数不同(存储地址和计算单位个数)。
- 直接性(效率高):处于底层语言,能迅速翻译成机器语言,几乎直接能被计算机识别,执行,能充分发挥计算机的硬件功能,所以是执行效率最高的人类可直接识别的编程语言(机器语言对人来说不可直接识别)。由此特性特性,能够编写出运行速度快、代码量小的高效程序,在许多场合具有不可替代的作用,列如:操作系统的核心程序段、实时控制系统的软件、智能仪器仪表的控制程序、频繁调用的子程序或动态链接库、加密软件、分析和防止计算机病毒等(来自老师PPT)。
- 繁琐性:汇编语言和机器语言一样是底层语言,需要码农掌握好底层硬件知识,懂得合理分配内存,合理使用系统硬件等。同一效果的代码,汇编语言要比正常语言多出几倍。使用起来不方便,使用领域有限。
机器语言VS汇编语言VS高级语言(来自老师PPT)
机器语言 | 汇编语言 | 高级语言 | |
计算机能否直接识别 | 能 | 不能 | 不能 |
易用性 | 差 | 中 | 好 |
占据空间 | 小 | 小 | 大 |
执行效率 | 快 | 快 | 慢 |
用途 | 特殊 加密/解密 |
系统核心要 求速度快, 代码短的程序 直接操纵I/O 信息安全 |
一般性系统级 和应用层软件开发 |
二)指令与数据
指令和数据是应用上的概念,在存储时,他们都是二进制信息,没有本质上的差别。但到了应用时,CPU在工作时把有些信息看作指令,另一些看作数据。
例如: 1000100111011000 可以作为指令翻译成 mov ax,bx,也可以作为数据翻译成89D8H。
三)CPU对储存器的读写
储存器可以被划分为一个个的存储单元,从零开始顺序编号(和C语言指针知识类似),正常情况下,一个存储单元可以存8bit(或1Byte=8bit)。大容量的存储器用大的单位来描述:
1KB = 2^10B (Byte 简称 B) 1MB = 2^10KB 1GB = 2^10 MB 1TB = 2^10GB
举个很形象的例子,有一条街上,门牌号从0开始顺序排,每家有一户人,一户人最多可以住8个人(也可以住不满)。如果要找其中一户人,首先要确定他们住在哪个房间里。
而CPU想要进行数据的读写,必须和外部器件(如存储器)进行3类信息交互。
- 存储单元的地址(地址信息);
- 器件的选择,读或写的命令(控制信息);
- 读或写的数据(数据信息);
当我们找人时,可以用语言去询问他人。而器件间的语言是电信号,需要导线去传递,在计算机中专门有连接CPU和其他芯片的导线,通常称为总线(在物理上指一根根导线的集合,并没有区分类别)。根据传送信息的不同,在逻辑上我们把总线分为三类:
- 地址总线:CPU用来指定存储器单元(N根线可以寻找2^N次方给内存单元)。
- 数据总线:CPU用来与内存或其他器件之间的进行数据传输(8根数据总线一次可以传递8位二进制数据,即一个字节)。
- 控制总线:CPU用来对外部器件的进行控制(控制总线的宽度——根数决定了CPU对外部器件的控制能力)。
- CPU通过地址总线将地址信息3发出。
- CPU通过控制总线发出内存读命令,选中存储器芯片,并通知它,将要从中读取数据。
- 存储器将3号单元中的数据08通过数据线送入CPU。
- CPU通过地址线将地址信息3发出。
- CPU通过控制线发出内存写命令,选中存储芯片,并通知它,要向其中写入数据。
- CPU通过数据线将数据26送入内存的3号单元中。
四)内存地址空间(寻址空间)
一个CPU的地址总线宽度为n,那么可以寻址2^n个内存单元,这2^n个可寻到的内存单元就构成了这个CPU的内存寻址空间。
例:80386的地址总线宽度为32根,寻址能力为4GB个内存单元。
主板:
每一台PC机中,都有一个主板,主板上有核心器件(CPU)和主要器件(存储器、外围芯片组、扩展插槽等),这些器件通过总线(地址总线、数据总线和控制总线)相连。
接口卡:
计算机系统中,所有可以用程序控制其工作的设备,必须受到CPU的控制。
CPU对外部设备不能直接控制,如显示器、音箱、打印机等。直接控制这些设备进行工作的是插在扩展槽上的接口卡。
各种存储器芯片:
RAM:随机存储器,可读可写,但必须带电存储,关机后村存储的内容将丢失。
ROM:只读存储器,只读存储器只能读取不能写入,关机后内容不丢失。
各种存储芯片小结:
- 在物理上是各自独立的器件。
- 都和CPU总线相连。
- CPU对其进行读或写的时候都通过控制线发出内存读写命令。
内存地址空间:
- CPU在操控这些独立的物理存储器时,把它们统一当作一个逻辑存储器看待。这个逻辑存储器即内存地址空间。
-
每个物理存储器在这个逻辑存储器中占有一段地址空间;CPU在这段地址空间中读写数据,实际上就是在相对应的物理存储器中读写数据。
-
不同的计算机系统的内存地址空间分配情况是不同的。
注:
- 内存地址空间是逻辑上的概念;
- 内存地址空间,即CPU寻址空间,与CPU地址总线宽度直接相关;
- 内存地址空间的容量与平时所讲的内存条的容量不是一回事;
- 不同的计算机系统内存地址空间如何使用有不同的分配方案。