文章目录
参考书籍:《汇编语言(第2版)》——王爽,参考视频:《零基础入门学习汇编语言》——小甲鱼
第一章:基础知识
前言
汇编语言是直接在硬件之上工作的编程语言,我们首先要了解硬件系统的结构,才能有效地应用汇编语言对其编程。
在汇编课程中我们不对硬件系统进行全面和深入的研究。
关于PC机及CPU物理结构和编程结构的全面研究,在《微机原理与接口》中进行。
对于计算机一般的结构、功能、性能的研究在一门称为《组成原理》的理论层次更高的课程中进行。
汇编课程的研究重点放在如何利用硬件系统的编程结构和指令集有效灵活地控制系统进行工作。
1.1 机器语言
机器语言是机器指令的集合。机器指令就是一台机器可以正确执行的命令。电子计算机的机器指令是一列二进制数字——由0和1组成。
1.2 汇编语言的产生
汇编语言的主体是汇编指令。汇编指令是机器指令便于记忆的书写格式。
例如:
操作:把寄存器BX的内容送到AX中
机器指令:1000100111011000
汇编指令:mov ax,bx
寄存器:CPU中可以存储数据的器件,一个CPU中有多个寄存器。AX和BX都是其中某个寄存器的代号。
计算机执行程序员用汇编指令编写的程序如下图。
1.3 汇编语言的组成
汇编语言由以下3类指令组成。
(1)汇编指令:机器码的助记符,有对应的机器码。
(2)伪指令:没有对应的机器码,由编译器执行,计算机并不执行。
(3)其他符号:如+、-、*、/等,由编译器识别,没有对应的机器码。
汇编语言的核心是汇编指令,它决定了汇编语言的特性。
1.4 存储器
CPU控制计算机的运作并进行运算,要想让CPU工作,就必须向它提供指令和数据。指令和数据在存储器中存放,也就是我们平时所说的内存。磁盘(硬盘)中的数据只有读取到内存中才能被CPU使用。
1.5 指令和数据
指令和数据在内存或磁盘中没有任何区别,都是二进制信息。
它们的区别在于CPU工作时,把它们看成什么。
例如:内存中的二进制信息1000100111011000,计算机可以把它看作大小为89D8H(16进制)的数据来处理,也可以看作指令mov ax,bx来执行。
1.6 存储单元
存储器被划分成若干个存储单元,每个存储单元从0开始按顺序编号。计算机中的最小信息单位是bit,也就是一个二进制位。而计算机中每个存储单元可以存储1Byte,即8个二进制位。
1KB=1024B 1MB=1024KB 1GB=1024MB 1TB=1024GB
1024即2的10次方,因为它是2的幂中最接近1000的。而生活中的USB,硬盘等存储设备常将24忽略不计,所以导致实际内存更小一点。
1.7 CPU对存储器的读写
CPU要进行数据的读写,必须和外部器件(芯片)进行下面3类信息的交互。
(1)地址信息:存储单元的地址。
(2)控制信息:器件的选择,读或写的命令。
(2)数据信息:读或写的数据。
计算机中有专门连接CPU和其他芯片的导线,通常称为总线。总线从逻辑上分为3类:地址总线、控制总线、数据总线。
CPU从3号单元中读取数据的过程如下。写入操作与读取类似。
1.8 地址总线
CPU通过地址总线来指定存储器单元。可见地址总线上能传送多少个不同的信息,CPU就能对多少个存储单元进行寻址。一根导线可以传送的稳定状态只有两种,即高电平或低电平,用二进制来表示即0或1。
所以,若一个CPU有n根地址线,则这个CPU的地址总线宽度为n。这样的CPU最多可以寻找2的n次方的内存单元,即2的n次方个字节(B)。
下图为一个具有10根地址线的CPU。发送的地址信息为1101000000。
1.9 数据总线
CPU与内存或其他器件之间的数据传送是通过数据总线来进行的。
数据总线的宽度决定了CPU和外界的数据传送速度。
8根数据总线一次可传送一个8位二进制数据(即一个字节)。16根数据总线一次可传送两个字节。
8086CPU有16根数据总线,可一次传送16位数据,所以可一次传送数据89D8H;而8088CPU只有只有8根数据总线,所以向内存写入数据89D8H时需要进行两次数据传送。
1.10 控制总线
CPU对外部器件的控制是通过控制总线来进行的。在这里控制总线是一个总称,控制总线是一些不同控制线的集合。有多少根控制总线,就意味着CPU提供了对外部器件的多少种控制。
所以,控制总线的宽度决定了CPU对外部器件的控制能力。
内存读写命令是由几根控制线综合发出的,其中有一根称为“读信号输出”的控制线负责由CPU向外传送读信号,CPU向该控制线上输出低电平表示将要读取数据;有一根称为“写信号输出”的控制线则负责传送写信号。
1.1~1.10 小结
- 汇编指令是机器指令的助记符,同机器指令一一对应。
- 每一种CPU都有自己的汇编指令集。
- CPU可以直接使用的信息放在存储器中。
- 在存储器中指令和数据没有任何区别,都是二进制信息。
- 存储单元从0开始按顺序编号。
- 一个存储单元可以存储8个bit,即8位二进制数。
- 1KB=1024B 1MB=1024KB 1GB=1024MB 1TB=1024GB
- 每一个CPU芯片都有许多管脚,这些管脚和总线相连。也可以说这些管脚引出总线。一个CPU可以引出3种总线的宽度标志了这个CPU的不同方面的性能:
地址总线的宽度决定了CPU的寻址能力;
数据总线的宽度决定了CPU与其他器件进行数据传送时的单次数据传送量。
控制总线的宽度决定了CPU对系统中其他器件的控制能力。
检测点1.1
-
1个CPU的寻址能力为8KB,那么它的地址总线宽度为13。
解析:(1.8节)若一个CPU有n根地址线,则这个CPU的地址总线宽度为n。这样的CPU最多可以寻找2的n次方的内存单元,即2的n次方个字节(B)。
8 KB = 8 * 2^10 B = 2^3 * 2^10 B = 2^13 B,即地址总线宽度为13。 -
1KB的存储器有1024个存储单元。存储单元的编号从0到1023。
解析:(1.6节)存储器被划分成若干个存储单元,每个存储单元从0开始按顺序编号。计算机中的最小信息单位是bit,也就是一个二进制位。而计算机中每个存储单元可以存储1Byte,即8个二进制位。 -
1KB的存储器可以存储1024*8个bit,1024个Byte。
-
1GB、1MB、1KB分别是2^30 、2^20 、2^10Byte。
-
8080、8088、80286、80386的地址总线宽度分别为16根、20根、24根、32根,则它们的寻址能力分别为:64KB、1MB、16MB、4GB。
解析:(1.8节)2^16 B = 2^6 * 2^10 B = 64 KB
2^20 B = 2^10 * 2^10 B = 1024 KB = 1 MB
后面同理。 -
8080、8088、8086、80286、80386的数据总线宽度分别为8根、8根、16根、16根、32根。则它们一次可以传送的数据为:1B、1B、2B、2B、4B。
解析:(1.9节)8根数据总线一次可传送一个8位二进制数据(即一个字节)。16根数据总线一次可传送两个字节。 -
从内存中读取1024字节的数据,8086至少要读512次,80386至少要读256次。
解析:同第6题。 -
在存储器中,数据和程序以二进制形式存放。
1.11内存地址空间(概述)
一个CPU的地址总线宽度为10,那么可以寻址1024个内存单元,这1024个可寻到的内存单元就构成这个CPU的内存地址空间。
1.12 主板
每一台PC机都有一个主板,主板上有核心器件和一些主要器件。
这些器件通过总线(地址总线,数据总线,控制总线)相连。这些器件有CPU、存储器、外围芯片组、扩展插槽等。
1.13 接口卡
计算机系统中,所有可用程序控制其工作的设备,必须受到CPU的控制。
CPU对外部设备不能直接控制,如显示器、音箱、打印机等。直接控制这些设备进行工作的是插在扩展插槽上的接口卡。
1.14 各类存储器芯片
从读写属性上看分为两类:随机存储器(RAM)和只读存储器(ROM)。
从功能和连接上分类:
-
随机存储器RAM
用于存放供CPU使用的绝大部分程序和数据,主随机存储器一般由装在主板上的RAM和插在拓展槽上的RAM组成。 -
装有BIOS的ROM
BIOS(Basic Input/Output System,基本输入/输出系统)是由主板和各类接口卡厂商提供的软件系统,可以通过它利用该硬件设备最基本的输入输出。如主板上的ROM存储着系统BIOS;显卡ROM上的显卡BIOS;网卡上的网卡BIOS。 -
接口卡上的RAM
某些接口卡需要对大批量输入、输出数据进行暂时存储。最典型的是显卡上的RAM,一般称为显存。显示卡随时将显存中的数据向显示器上输出。
PC系统中各类存储器的逻辑连接情况如下图。
1.15 内存地址空间
上述的那些存储器在物理上是独立的器件,但是它们在以下两点上相同:
- 都和CPU的总线相连。
- CPU对它们进行读写时都通过控制线发出内存读写命令。
也就是说,CPU在操控它们的时候,把它们都当作内存来看待,把它们总的看作一个由若干存储单元组成的逻辑存储器,这个逻辑存储器就是我们所说的内存地址空间。
下图为CPU将系统中各类存储器看作一个逻辑存储器的情况。
- 所有的物理存储器被看作一个由若干存储单元组成的逻辑存储器;
- 每个物理存储器在这个逻辑存储器中占有一个地址段,即一段地址空间;
- CPU在这段地址空间中读写数据,实际上就是在相对应的物理存储器中读写数据。
例如:上图中的内存空间地址段可以这样分配:
- 地址0~7FFFH(8 * 16 *16 * 16 B= 2^15 B = 32 KB)的32KB空间为主随机存储器的地址空间;
- 地址8000H~9FFFH的8KB空间为显存地址空间;
- 地址A000H~FFFFH的24KB空间为各个ROM的地址空间。