前言
本章的学习基于王爽《汇编语言》记录,如有错误,欢迎指出
一、汇编语言的产生及组成
早期的程序设计均使用机器语言,即由0和1数字写成。
如下,应用8086CPU完成运算s = 768+12288-1280的机器码:
101110000000000000000011
000001010000000000110000
001011010000000000000101
晦涩难懂且不易查错,难于辨别和记忆,给这个行业的发展带来了阻碍。于是汇编语言便产生了。相比较机器语言,汇编语言更便于阅读和记忆。
例如:
操作:寄存器BX的内容送到AX中
机器指令:1000100111011000
汇编指令:mov ax,bx
汇编语言发展至今,有以下三类指令组成:
- 汇编指令:机器码的助记符,有对应的机器码。
- 伪指令:没有对应的机器码,由编译器执行,计算机并不执行。
- 其他符号:如+、-、*、/等,由编译器识别,没有对应的机器码。
汇编语言的核心是汇编指令,它决定了汇编语言的特性。
二、存储器
CPU控制整个计算机的运作并进行运算,若想让其工作,就必须为它提供指令和数据,而指令和数据在存储器中存放。
指令和数据是应用上的概念,在内存或磁盘上没有任何区别,都是二进制信息。
例如:内存中的二进制信息1000100111011000可被看做89D8H的数据来处理,也可看做指令mov ax,bx来执行。
存储器被划分成若干个存储单元,且从0开始编号。例如一个存储器有128个存储单元,则其编号从0~127。
计算机最小信息单位为bit,即一个二进制位,8bit组成1Byte,即常说的一个字节。微型机存储器的存储单元可以存储一个Byte,即8个二进制位。
1B = 8bit
1KB = 1024B
1MB = 1024KB
1GB = 1024KB
1TB = 1024GB
三、CPU对存储器的读写
CPU要从内存中读取数据,必须和外部器件进行以下三类信息的交互:
存储单元的地址(地址信息)
器件的选择、读或写的命令(控制信息)
读或写的数据(数据信息)
那么,CPU是通过什么将这些信息传到存储器芯片中的呢?电子计算机能处理、传输的信息都是电信号,自然是需要导线传送。这些连接CPU和其他芯片的导线通称为总线。总线逻辑上分为三类,即地址总线、控制总线和数据总线。
1.地址总线
CPU通过地址总线来指定存储单元的。可见地址总线上能传送多少个不同的信息,CPU就可以对多少个存储单元进行寻址。
2.数据总线
数据总线的宽度决定了CPU和外界的数据传送速度。8088CPU的数据总线宽度为8,8086CPU的数据总线宽度为16。
3.控制总线
CPU对外部器件的控制是通过控制总线来进行的。在这里控制总线是个总称,是一些不同控制线的集合。控制线的宽度决定了CPU对外部器件的控制能力。
例如,内存读或写命令是由几根控制线综合发出的,其中有一根称为“读信号输出”的控制线负责由CPU向外传送读信号,CPU向该控制线上输出低电平表示将要读取数据;有一根称为“写信号输出”的控制线负责传送写信号。
四、内存地址空间
1.主板
每台PC都有一个主板,主板上有核心器件和一些主要器件,这些器件通过总线相连。这些器件有CPU、存储器、外围芯片组、扩展插槽等。扩展插槽上一般插有RAM内存条和各类接口卡。
2.接口卡
CPU对外部设备都不能直接控制、如显示器、音箱、打印机等。直接控制这些设备的是扩展插槽上的接口卡。扩展插槽通过总线和CPU相连,所以接口卡也通过总线通CPU相连。由此,CPU通过总线向接口卡发送命令,接口卡根据CPU的命令控制外设进行工作。
3.各类存储器芯片
一台PC中装有多个存储器芯片,这些芯片从物理结构上看是独立的、不同的器件。根据读写属性可分为两类:随机存储器(RAM)和只读存储器(ROM),随机存储器可读可写,但必须带电存储,关机后存储内容丢失;只读存储器只能读取不能写入,断电关机后数据不丢失。这些存储器从功能和连接上又可分为以下几类:
- 随机存储器
用于存放供CPU使用的绝大部分程序和数据。主随机存储器一般由装在主板上的RAM和插在扩展插槽上的RAM组成。- 装有BIOS(基本输入\输出系统)的ROM
BIOS由主板和如显卡、网卡等各类接口卡厂商提供的软件系统,可通过它利用该硬件系统进行最基本的输入输出。在主板和某些接口卡上插有存储对应BIOS的ROM。- 接口卡上的RAM
某些接口卡需要对大批量输入、输出数据进行暂时储存,在其上装有RAM。例如显示卡上的RAM,一般称为显存。我们需要将要显示的内容写入显存,就会出现在显示器上。
4.内存地址空间
上述的存储器,在物理上是独立的期间,但它们都与CPU的总线相连,且CPU对他们进行读写时通过控制线发出内存读写命令。也就是说,CPU在操作它们时,把它们当作内存来看待,并看作由若干个存储单元组成的逻辑存储器,即我们所说的内存地址空间。
每个物理存储器都在这个内存地址空间中占有一段地址空间,CPU在这段空间读写数据,实际上是在相对应的物理存储器中读写数据。
内存地址空间的大小受CPU地址总线宽度的限制。
我们基于一个计算机硬件系统编程的时候,必须知道这个系统中的内存地址空间分配情况。当我们想在某类存储器中读写数据时,必先知道它的第一个单元的地址和最后一个单元的地址,才能保证读写操作是在预期的存储器中进行。