2021年3月14日星期日

汇编语言 第四版 王爽著 知识点概要

markdown
本文对王爽所著的第四版汇编语言中涵盖的所有知识点进行概要总结,以最简单、精炼的方式快速串线书中全部内容,并对书中每一个实验进行目前性总结。 对于汇编语言,其研究重点是如何利用硬件系统的编程结构和指令集有效灵活的控制系统进行工作。 # 第一章 基础知识 ## 1.1 机器语言 机器语言就是机器指令的集合。机器指令展开来讲就是一台计算机可以正确执行的命令,现在,在我们常用的PC机中,由CPU这个芯片来完成上述计算机的功能。 CPU是一种微处理器,每种微处理器由于硬件设计和内部结构的不同,需要不同的电平脉冲来控制,使它工作。所以每一种微处理器都有自己的机器指令集,也就是机器语言。 早期的程序设计均使用机器语言,程序员将程序通过打孔打到纸袋上,在输入到计算机中。很快程序员就发现了使用机器语言,即这种打孔的01表示带来的麻烦,于是汇编语言诞生了。 ## 1.2 汇编语言的诞生 汇编语言的主体是汇编指令,而且它也是机器指令便于记忆的书写格式,例如, 操作: 寄存器BX的内容送到AX中 机器指令: 1000100111011000 汇编指令: mov ax,bx 此后,程序员就用汇编指令编写源程序,而这时,需要一种编译器程序来将汇编指令翻译成机器指令(俗称机器码),在由CPU执行。 ## 1.3 汇编语言的组成 汇编语言发展至今,汇编语言包括三部分,汇编指令、伪指令和其它符号。 汇编指令: 机器码的助记符号,有对应的助记码 伪指令: 没有对应的机器码,由编译器执行,计算机并不执行 其他符号: 如 +、-、*、/ 等,由编译器识别,没有对应的机器码 ## 1.4 存储器 要想灵活的利用汇编语言编程,我们首先要了解CPU是如何从内存中读取数据,以及向内存中写入信息的。 ## 1.5 指令和数据 我们需要知道一点,在内存或磁盘上,指令和数据没有任何区别,都是二进制信息。只是CPU在工作时,为同样的信息赋予了不同的意义。 后续需要补充 ## 1.6 存储单元
存储器被划分成若干个存储单元,每个存储单元从0开始顺序编号,如右图所示,是一个包含128个存储单元的存储器,编号从0~127。微型机的存储器的存储单元可以存储一个Byte,即8个二进制位。一个存储器又有128个存储单元,它可以存储128个Byte,我们也可以说,它的容量是128个字节。 对于大容量的存储器一般还用1KB、1MB、1GB、1TB来计量容量。 ## 1.7 CPU对内存的读写 在一台微机中,不只有存储器这一种器件,因此CPU想要进行数据的读写,必须和外部器件(标准的说法是芯片)进行下面3类信息的交互。 - 存储单元的地址(地址信息) - 器件的选择,读或写的命令(控制信息) - 读或写的数据(数据信息) 那么CPU使用过什么将上述三类信息传输到存储芯片中的呢?答案是总线。总线从物理上来讲,就是一根根导线的集合,连接这CPU和其它的芯片,根据导线上传输的信息不同,总线从逻辑上又分为3类,地址总线、数据总线、控制总线
如上图所示,描述的CPU从3号单元中读取数据的过程: (1) CPU通过地址总线将地址信息3发出 (2) CPU通过控制总线发出内存读命令,选中存储芯片,告诉它,将要从内存中读数据 (3) 存储器将3号地址单元中的数据8通过数据总线送入CPU 通过上述过程,我们知道了CPU是如何进行数据读(写类似)的,可是,如何命令计算机进行数据的读写呢?答案是,要让一个计算机或微处理器工作,应向他输入能够驱动它进行工作的电平信息(就是机器码)。比如对于8086CPU,101000010000001100000000机器码就能完成上述从3号单元中读取数据的操作,对应的汇编指令为mov AX,[3] ## 1.8 地址总线
地址总线能传输多少种不同的信息,CPU就可以对多少个存储单元进行寻址。现假设,一个CPU有10根地址总线,则最小为0,最大为1023,一共可以表示1024个不同值。 因此,一个CPU有N个地址总线,其最多可以寻址2^N个内存单元。 ## 1.9 数据总线 8根数据总线一次可以传送8位二进制数据(即一个字节),16根数据总线一次可以传送两个字节。 8088CPU的数据总线宽度是8,8086CPU的数据总线宽度是16。下图分别展示了它们向内存中写数据89D8H(末尾的H代表的是16进制数)时,数据总线的传输情况。
## 1.10 控制总线 控制总线通常是一个总称,它是一些不同控制线的集合,有多少根控制总线,就意味着CPU提供了多外部器件的多少种控制。所以,控制总线的宽度决定了CPU对外部器件的控制能力。例如,前面所讲,其中有一根称为“读信号输出”的控制线负责由CPU向外传送读信号,CPU向该控制线上输出低电平表示将要读取数据。 ## 1.11 内存地址空间(概述) 那么是内存地址空间呢?举例来讲,一个CPU的地址总线宽度是10,那么可以寻址1024个单元,这1024个可以寻到的内存单元就构成了这个CPU的内存地址空间,为了进一步讨论,接下来,首先需要了解主板和接口卡 ## 1.12 主板 每一台PC机中,都有一个主板,主板上有核心器件和一些主要器件,这些器件通过总线(地址,数据,控制)相连。这些器件有CPU、存储器、外围芯片组、扩展插槽等。扩展插槽上一般插有RAM内存条和各类接口卡。 ## 1.13 接口卡 计算机系统中,所有可用程序控制其工作的设备,都必须收到CPU的控制。CPU对外部设备都不能直接控制,如显示器、音响、打印机等。直接控制这些设备进行工作的是插在扩展插槽上的接口卡。扩展插槽通过总线和CPU相连。简单的将,就是CPU通过总线向接口卡发送命令,接口卡根据CPU的命令控制外设进行工作。 ## 1.14 各类存储器芯片
从读写属性角度而言,可将存储器分为两类:随机存储器(RAM)和只读存储器(ROM)。这些存储器从功能和连接上又可以分为以下几类: 随机存储器: 用于存放供CPU使用的绝大部分程序和数据,我们称之为主随机存储器,一般由主板上的RAM和插在扩展插槽上的RAM组成 装有BIOS(Basoc Input/Output System)的ROM: 例如,主板上的ROM中存着存着系统的BIOS;显卡上的ROM存着显卡的BIOS;网卡上如果也有,那就可以存网卡的BIOS 接口卡上的RAM: 最典型就是显卡上的RAM,一般称之为显存。其提供暂时存储的能力,我们将需要显示的内容写入显存,就会出现在显示器上 ## 1.15 内存地址空间 上述这些存储器,在物理上是独立的器件,但是在以下两点上相同: - 都和CPU的总线相连 - CPU对它们进行读或写的时候都通过控制总线发出内存读写命令 这就是说,CPU操作它们的时候,把它们都当作内存来对待,把它们总的看作一个由若干存储单元组成的逻辑存储器,这个逻辑存储器就是我们所说的内存地址空间,下图展示了逻辑存储器的情况
可以看出,内存地址空间受到地址总线的宽度限制,8086CPU的宽度是20,因此空间大小为1MB,同理,80386CPU地址总线宽度为32,空间大小为4GB。我们在基于一个计算机硬件进行系统编程的时候,必须知道这个系统中内存地址空间分配情况,因为当我们相对某类存储器进行操作的时候,必须要知道它的第一个单元地址和最后一个单元地址,才能保证读写操作是在预期的存储器上进行。对于初学者,内存地址空间的概念比较抽象,后续的章节中将通过一些编程实践,来增加感性的认识。 # 第二章 寄存器 上一章节介绍的总线对于CPU来说是外部总线,而一个CPU包含运算器、寄存器、控制器、和内部总线。 对于程序员来说,CPU中主要的部件是寄存器。寄存器是CPU中程序员可以用指令读写的部件。程序员通过改变寄存器中的内容来实现对CPU的控制。 不同的CPU,寄存器的个数、结构是不同的。8086CPU有14个寄存器,每个寄存器有一个名称。这些寄存器分别是:AX、BX、CX、DX、SI、DI、SP、BP、IP、CS、SS、DS、ES、PSW,接下来章节中,用到了哪一种寄存器,在对其进行详细介绍。 ## 2.1 通用寄存器
8086CPU的所有寄存器都是16位的,可以存放两个字节。AX、BX、CX、DX这4个寄存器通常用来存放一般性数据,被称为通用寄存器。
8086CPU的上一代CPU的寄存器都是8位的,为了兼容性保障,上述4个通用的寄存器有可以分别做为两个独立的8位寄存器来使用。例如,AX寄存器分别做为AH和AL来使用。 ## 2.2 字在寄存器中的存储 一个字存在一个16位的寄存器中,这个字的高位字节和低位字节自然就分别存在这个寄存器的高8位寄存器和低8位寄存器中。 ## 2.3 几条汇编指令 | 表头 | 表头 | | ---- | ---- | | 单元格 | 单元格 | | 单元格 | 单元格 |

没有评论:

发表评论

哲学导论