基础知识
汇编语言的产生
早先的程序员们发现了使用机器语言带来的麻烦,机器语言是难于辨别和记忆,给整个产业带来了障碍,故此汇编语言产生了。汇编语言是机器指令便于记忆的书写格式。程序员用汇编语言写出源程序,再用汇编编译器将其编为机器码,由计算机最终执行。
汇编语言的组成
汇编语言发展至今,由一下三类指令组成。
- 汇编指令:机器码的助记符,有对应的机器码。
- 伪指令:没有对应的机器码,由编译器执行,计算机并不执行
- 其他符号:如+、-、*、/等,由编译器识别,没有对应的机器码。
汇编语言的核心是汇编指令,它决定了汇编语言的特性。
存储器
要让一个CPU工作就必须向他提供指令和数据。而指令和数据在存储器中存放。
指令和数据
指令和数据是应用上的概念,在内存中指令和数据没有任何区别,都是二进制信息。
存储单元
存储器被划分成若干个单元,每个存储单元从0开始顺序编号,例如一个存储有128个存储单元,编号从0~127。如下图所示
一个存储单元可以存储一个字节的数,即8个二进制位,一个存储有几个存储单元,那么他们就可以存储几个字节。
存储单元换算
1Bite(字节) = 8bite(位) 1KB = 1024B 1MB = 1024KB 1GB = 1024MB 1TB = 1024GB
CPU对存储器的读写
以上讲到存储器被划分成多个存储单元,存储单元从零开始顺序编号,这些编号就是存储单元在存储器中的地址。存储单元就像一间间房间,要找到房间,我们需要房间号。所以地址就像是存储单元的房间号,我们需要存储单元的地址才能找到存储单元。存储单元可以存放8个二进制数,就像房间中有8张床。
CPU在读写数据时除了要存储单元的地址外还要指定要对哪一个器件进行操作,进行哪种操作,是从中读出数据还是写入信息。
CPU要想进行数据的读写,必须和外部期间进行以下3类信息的交互。
- 存储单元的地址(地址的信息)
- 器件的选择,读或写的命令(控制信息)
- 读或写的数据(数据信息)
总线
CPU通过总线传输电信号来将地址、数据和控制信息传送给存储器芯片中。
总线按逻辑分为三种:
- 地址总线
- 数据总线
- 控制总线
举个例子来说明CPU如何对数据继续读写命令操作的如下图所示
1 CPU通过地址总线传输信息来指定存储单元,比如上图指明编号为3的存储单元
2 CPU通过控制线来传达是读或写命令,通知该存储单元要读取其中的信息,或要向该存储单元写入信息。
3 CPU通过数据来传输从该存储单元中读取出的信息或要向其中写入的信息。
地址总线
我们知道了CPU是通过地址总线来指定存储器单元的,所以地址总线上能传送多少个不同的信息,CPU就可以对多少个存储单元来进行寻址。1个CPU有N根地址线,则可以说这个CPU的地址总线的宽度为N。这样的CPU最多可以寻找2N个内存单元。
数据总线
数据总线的宽度决定了CPU和外界的数据传送速度。8根数据总线一次可传送1个8位二进制数据(即一个字节)。以此类推16根地址总线便可以传送2个字节的数据。我们学的8086CPU的数据总线宽度为16,一次性可以传送2个字节的数据。比如我们要写入数据89D8H,如果地址总线是8位的所以一次性只能传送一个字节的数据,故需要传送两次,第一次传送低字节数据D8,第二次传送高字节数据89。而数据总线宽度为16的CPU传送89D8H,可以一次性传送完成。
控制总线
CPU对外部期间的控制是通过控制总线来进行的,控制总线的宽度决定了CPU对外部器件的控制能力,有多少根控制总线,就意味着CPU提供了多少种控制。
CPU的控制外部设备的方式
CPU通过总线向接口卡发送命令,接口卡根据CPU的命令控制外部设备进行工作。
各类存储器芯片
电脑中装有多个存储器芯片,这些芯片从物理连接上来说是独立的,不同的器件。从读写属性分为两类:随机存储器(RAM)和只读存储器(ROM)。随机存储器可读可写,但是必须带电存储,断电后存储的信息丢失。只读存储器只能读取不能写入,关机后其中的内容不会丢失。
这些存储器从功能和连接上又分为以下几类
- 随机存储器
用于存放供CPU使用的绝大分程序和数据,主随机存储器一般由两个位置的上的RAM组成,装在主板上的RAM和插在扩展槽上的RAM。 - 装有BIOS(基本输入/输出系统)的ROM
BIOS是厂商提供的软件系统,可以通过它利用该硬件设备进行最基本的输入输出。 - 接口卡上的RAM
某些接口卡需要对大批量输入、输出数据进行暂时存储,在其上装有RAM。最典型的便是显卡上的RAM,一般称为显存。我们将要现实的内容写入显存、就会出现在显示器上。
内存地址空间
上面提到的那些存储器在物理上是独立的器件,但他们多与CPU的总线相连,CPU多可以通过控制总线来传输控制信息对内存进行读写操作。所以CPU把那些存储器看作一个总的逻辑存储器,这个存储器就是我们所说的内存地址空间。下图展示了CPU将系统中各类存储器看作一个逻辑存储器的情况。
所有的物理存储器在这个逻辑存储器中占有一个地址段,CPU在这段地址空间中读写数据,实际上就是在相对应的物理存储器中读写数据。内存地址空间的大小受地址总线的宽度限制,如8086CPU的地址总线宽度为20,就可以传送220个不同的信息,故可以定位220个内存单元,则8086PC的内存地址空间大小为1MB。
我们基于一个计算机硬件系统编程的时候,必须知道这个系统中的内存地址空间分配情况,这样才能保证读写操作是在预期的存储器进行的。
8086PC机内存地址空间分配
地址0~7FFFH的32KB空间为主随机存储器的地址空间
地址8000H~9FFFH的8KB空间为显存地址空间
地址A000H~FFFFH的24KB空间为各个ROM的地址空间
往07FFFH的地址空间写入数据是可以的,往8000H9FFFH的地址空间就会显示在屏幕上,而A000H~FFFFH是只读存储器,不能写入数据,写入数据后不会改变其中的数据。