Assembly Language-chapter1-basic knowledge
Assembly Language - chapter 1 基础知识
标签(空格分隔): 汇编语言
Prologue
在学习新的一门学科的时候,我们应该要清楚这是一门全新的学科,它跟之前我所接触的任何的知识都是不尽相同的。所以它不可能是你能理解的,在这门学科之前你就是个傻子,不要把你自己捧得很高,没有任何意义。在真理面前,不用去管别人,至少对于你自己来说,你就是无知的,一无所知的。谨持这个心态,对于任何美好且珍贵的东西面前,你自己都要明白,好好珍惜。
背景知识
这门课叫做汇编语言,它是直接在硬件上工作的编程语言。因为这个直接接触到硬件的缘故,我们需要了解一些计算机硬件的必备知识,而且这些知识只需要支撑起我们所要学的知识体系就够了。
在这里王爽老师认为 汇编课程的研究重点应该放在如何利用硬件系统的编程结构和指令集有效灵活地控制系统进行工作。
1.汇编语言的历史
1.1 机器语言

在汇编语言之前是机器语言的天下,机器语言规范了机器指令,也就是说机器语言是机器指令的集合。而机器指令是机器应该正确执行的命令。电子计算机的机器指令是一串二进制数字。计算机接受到后将其转变为一系列高低电平,并驱动计算机的电子器件,进行运算。
而这个电子计算机中有个 微型处理器也称 CPU(central processing unit)中央处理单元。但是微型处理器每个在硬件设计和内部结构结构都不尽相同,自然而然地相同的功能因为结构的不同,其指令对应的电平脉冲就不尽相同,这同样地也导致了其对应的机器指令不尽相同。这也就是说 不同的微型处理器有着自己的机器指令集 即 机器语言。
1.1.2 机器语言的缺点
- 使用的过程中:指令长,多,还难懂(晦涩难懂)。
- 使用后纠错因为太长而且指令难以辨认->难以发现错误。
1.2 汇编语言
因为机器语言的晦涩难懂和不易纠错,难以符合社会以及工业要求,汇编语言出现了。
很明显。汇编语言解决了机器语言带来的问题,汇编指令直接简化了也可以说抽象化了机器指令的表现形式。
同时也带来了另外一个问题,机器只能识别并执行 机器语言 ,那汇编语言怎么执行呢?
1.2.1 汇编语言的执行
这个过程相当于我们人类 不同语言之间的 翻译。把汇编语言 翻译成 机器语言 不就可以了 嘛!在人类社会中担任这个过程的叫做 翻译员,而在 计算机世界中 则称作 编译器。
(程序员用汇编指令编写)源程序 \(\longmapsto\) 机器码
1.3 汇编语言的组成
在汇编语言中有以下三类指令:
1.汇编指令 :机器码的助记符(我自己理解就是给 机器指令 取个 好记好辩别的名字) mov | cornerstone
2. 伪指令:编译器执行() 无对应机器码 start(个人理解就是辅助使用的)
3. 其他符号:编译器识别() 无对应机器码 (+ - * / )
1.4 存储器
CPU(center processing units)中央处理单元是执行指令的部件,也是计算机的核心。但是CPU本身需要指令和数据的输入才能运作,但是在计算机指令和数据都存储在 存储器(也就是内存) 中。计算机中就需要CPU读取存储器的指令和数据进行运算。
1.5 指令和数据
在计算机硬件层面上:指令和数据是 操作指令 和 具体的数值(十进制)
在内存或者磁盘上 :都是一串二进制数字
有个很重要的知识点,指令和数据都是二进制数字,CPU怎么区分?
寄存器有很多个,不同寄存器有不同的功能和类型,进而区分出 指令 和 数字 .
王爽老师从更高层次这么说的:CPU在工作的时候把有的信息看作指令,有的信息看作数据,为同样的信息赋予了不同的意义。
1.6 存储单元
存储器被分成了若干个存储单元,每个存储单元可容纳1个字节,每个字节是8个bits.
王爽老师将存储器里面的结构看成了 线性结构 ,且存储器从0开始,依次增加直到最大容量。,如下图所示:
假如说 这个内存从 0 排到 127,总共128个存储单元,则称这个存储器的容量是 128 个 bytes。为了方便计数,人们规定了以下容量单位:
1 B = 8 bits
1 KB = 1024 B = \(2^10 B\)
1 MB = 1024 KB = \(2^10 KB\)
1 GB = 1024 MB = \(2^10 MB\)
1 TB = 1024 GB = \(2^10 GB\)
磁盘里的计量单位也是一样。
1.7 CPU对于存储器的读写
刚才略微地讨论了一下 CPU 和 存储单元,现在考虑一下怎样将两者衔接起来,CPU怎么样从存储器中读取数据和怎么样向存储器中写入数据。
实际情况是,存储单元从0到最大容量都排序好,并也在整个系统中排了序。就像我们的门牌号一样,也就是寻址。
CPU找到地址读写数据的话,都需要寻址。而且读写操作在计算机不能够像人一样,说说就知道,他是机器,所以要指明 操作类型 和 其中的数据。
综上所述:CPU如果想对存储器进行读写操作,那么要进行 三种类型的 信息交互:
- 地址信息
- 数据信息
- 控制信息
那么在计算机中,CPU和外部器件(芯片)进行信息交互是通过 总线 进行 处理、传输 电信号。所以这些总线可以用传输的数据分类成以下三类:
- 地址总线
- 数据总线
- 控制总线
书上有好多个例子,但是对于我个人来说 写这个例子 最让我理解了 整个系统:
计算机接收到指令 MOV ax,[3]
- CPU 通过地址总线将 位置信息 3 发出。
- CPU 通过控制总线向内存写命令,选中存储器芯片,并通知它,要向其中写入数据。
- CPU通过数据总线将数据26送入内存地址为3的存储单元。
1.8 地址总线
废话不多说,直接看 实际情况的结构图:
这里总共十根线,不考虑其他辅助功能的话,CPU可以寻多少个地址?
每根线可以有0和1两种状态,最大数是 \(2^0+2^1+2^2+...+2^7=\frac{2^0\times(1-2^8)}{1-2}=2^8-1\)
可以类推到N根线的状态,最大寻址能力为 \(0\backsim2^N-1,共计2^N个存储单元。\)
1.9 数据总线
CPU和其他器件传输数据时通过数据总线,其原理和地址总线一样,如果是8根线的话一次传8个bits,即1个byte。
本书是以8086CPU为原型进行处理的,8086CPU数据总线是16根线,这样一次可以传 16 bits即2 bytes。
1.10 控制总线
控制总线的宽度决定了CPU对于外部器件的控制能力。
有多少根控制总线就有多少种控制类型。
1.11 内存地址空间概述
书中规定:CPU能够寻址的最大范围为 内存地址空间。假如地址总线为10根,那么CPU的寻址能力为 \(2^10=1024。\)那么内存空间地址为这1024个存储单元。
1.12 主板
如上图所示,主板其实就是一块板子,上面镶嵌了 CPU,芯片啊,存储器啊和什么扩展插槽等等,并结合了 总线进行 数据传输。扩展插槽一般插有 RAM 内存条(外界内存)和各类接口卡。
1.13 接口卡
CPU是计算机的核心也可以理解为 CPU必须控制 所有的工作设备。但是外接设备像键盘、音响等等是通过接口卡和电脑进行连接的,那么势必需要CPU对于接口卡进行直接控制后再间接控制外部设备。
1.14 各种存储器芯片
存储器芯片就是存储器,这些存储器芯片从物理连接上看是独立的、不同的器件。但是根据读写属性来看,可分为 ROM:Read Only Memory(只读存储器)和RAM:Random Access memory(随机存储器)。
Random Access Memory:可读可写,但是存储时必须带电,关机不带电后存储的数据直接丢失。
Read Only Memory: 只能够读取无法写入,即使关机或者不带电数据也不会丢失。
然后实际情况中又可以根据 功能和连接上将这些存储器分为以下部分:
- 随机存储器:因为有主板和插卡口的物理隔离的情况,随机存储器可以安装在主板上或者接口卡上,这样就存在(1)装在主板上的RAM(2)装在扩展槽上的RAM,是为了供CPU使用的。
- 装有(BIOS)的ROM:因为计算机底层还是硬件和硬件的沟通,这些功能是固定的,也就是输入输出,同时也包括了接口卡对于外部器件的连接。比如说系统的BIOS即主板上的BIOS,显卡和网卡以及接口卡的BIOS。
- 接口卡上的RAM :我们会发现计算机算力过于优秀时,会给外部器件带来数据处理上的压力。这时候一个缓冲区就显得很有必要。在工作带点的情况下,RAM完全可以发挥这个作用。
1.15 内存地址空间
1.内存地址空间的定义
实际情况中,上述所有的存储器有以下两个共同点:
- 都与CPU的总线相连接。
- 且CPU都与他们进行读和写的时候都是通过控制线对内存发出读写命令。
书中认为这些存储器也就是内存,可以看作一个整体的内存,即书中认为的“一个由若干存储单元组成的逻辑存储器。”而这个整体的逻辑存储器就是我们所面对的 内存地址空间。
且现在的计算机中,不同的存储器有着自己的存储器地址段,直接定义或者是占据了一段地址,如果我们在个地址段里面读写数据,就等于直接和其物理存储器读写操作。
2.内存大小
我们经常会说内存4G,8G,12G是什么具体含义呢?这里可以回顾之前说的那个 寻址能力。如果内存达到寻址能力且寻址能力达到了\(4\times2^30(32根地址总线)\)即4GB时,那么就可以说内存4G。
3.了解8086CPU的内存地址空间
刚才已经说了,每个具体的器件寄存器地址段是规定好的,给规定好的地址段内写入数据等于直接向其物理寄存器内读写数据。所以必须了解具体的CPU的内存地址空间才能了解怎么操作对应的器件。
Notes:有一个点需要注意的是ROM(read-only memory),这个是不支持写的操作的!!

浙公网安备 33010602011771号