汇编语言(第3版)- 学习笔记 – 第1章-基础知识

  • 1.1 机器语言
  • 1.2 汇编语言的产生
  • 1.3 汇编语言的组成
  • 1.4 存储器
  • 1.5 指令和数据
  • 1.6 存储单元
  • 1.7 CPU对存储器的读写
  • 1.8 地址总线
  • 1.9 数据总线
  • 1.10 控制总线
  • 1.11 内存地址空间(概述)
  • 1.12 主板
  • 1.13 接口卡
  • 1.14 各类存储器芯片
  • 1.15 内存地址空间
    • 目前主流cpu的寻址能力
  • 1.1~1.10小结
  • 参考资料

1.1 机器语言

机器只认识 01,不同的机器对同一串01的理解还不一样。
(比如喇叭和显示器,具体怎么理解本质上是生产它的人为它定义的一套规则)
01适合机器识别,但不适合人类阅读。

1.2 汇编语言的产生

01这种机器语言人类用着不方便,但又要与机器沟通。
所以人类发明了一套与01对应的汇编语言
人类通过书写汇编指令来描述需求,再使用编译器翻译成机器能识别的01语言。

  1. 汇编指令机器指令一一对应,一个是给人看的,一个是给机器看的。
  2. 程序员—(编写汇编指令)—>编译器—(翻译成机器码)—>计算机。

1.3 汇编语言的组成

汇编语言发展至今,有以下3 类指令组成

组成说明
汇编指令机器码的助记符,有对应的机器码。是汇编语言的核心
伪指令没有对应的机器码,由编译器执行,计算机并不执行。(方便我们编写代码的临时工们)
其他符号+-*/等,由编译器识别,没有对应的机器码。

1.4 存储器

CPU控制整个计算机运作并进行计算,需要从内存中读取指令和数据;内存在计算机中的作用仅次于CPU,磁盘上的数据或程序需要读入内存才能被CPU使用。

打个比方:内存就像我们手头的现金,硬盘类似于定期存款或固定资产。相信没有人在跟朋友涮完火锅结账时,对收银说:稍等我卖套房先。

1.5 指令和数据

程序本身就是一串01,把这串01当作一条指令,还是一段数据,取决于你如何使用它。
书中的例子:
1000100111011000 这串机器码。
当成数据来用它表示89D8H
当成指令来用它表示mov ax, bx

(剧透:CPU的寄存器有默认分工。DS:BX 用它时就当它是数据,CS:IP用它时就当它是指令。理论上它们可以指向同一个地方,重复利用这段01。详情见下一章吧)

1.6 存储单元

存储单元中文名说明
bit比特(位)我们使用的物理存储设备上最小的信息单元称为1比特。它是一个二进制单元。要么表示0要么表示1
Byte字节Byte = 8bit 。8位组成一个字节。如:11110000, F0
KB千字节1KB = 1024B。由于字节是基础单位,所以KB也常简写为K
MB兆字节1M = 1024K。简写为M
GB吉字节1G = 1024M。简写为G
TB吉字节1T = 1024G。简写为T

我们的内存相当于一个只有1列的表格。并且从0开始到最大位置,为每个格子分配了序号。这就是内存的地址。
知道目标的数据的地址(在第几格)就可以去读写数据。

1.7 CPU对存储器的读写

CPU与外部器件交互(标准说法是芯片)进行数据交换,需要三根神经与之联通才能交流。
CPU与外部关联的神经就叫总线。总线由:地址总线+控制总线+数据总线三部分组成。
以向内存读取数据为例:

  1. 控制总线:发送控制命令,告诉内存,我要读取数据。
  2. 地址总线:发送地址信息,告诉内存,我要读取第几格
  3. 数据总线:接受内存返回来的数据。

1.8 地址总线

总线的物理层面就是导线(CPU针脚,内存的金手指与之相连)。
通过总线传输的是电平信息(高电平1或低电平0)。
总线不是独木桥而是多车道。一排01一次性杀过去,对面就会心一笑。。。
可见地址总线车道数量决定了它的寻址能力。
如果一个CPU的地址总线有10条车道 ,那么们说这个CPU的地址总线宽度为10。
这个CPU最大可以寻找 210 = 1024 个内存单元。

10条车道每条或0或1进行排列组合,可以有1024种,每一种对应一个内存单元。
地址总线按照某一种组合把送信息过去,对面就知道CPU要找的是哪个单元了。

1.9 数据总线

数据传送靠数据总线。数据总线的宽度决定了 CPU 和外界的数据传送速度。(还是拿车道比喻,肯定越多一次运的货越多呗。)
8 根数据总线(8条车道)一次可传送一个 8 位进制数据(即一个字节)。16 根数据总线一次可传送两个字节。

8088CPU 的数据总线宽度为 8,
8086CPU 的数据总线宽度为 16。
向内存中写入数据 89D8H 时:
图1.5 展示了8088CPU 要分两次;
图1.6 展示了8086CPU 只需要转一次。

1.10 控制总线

控制总线是一些不同控制线的集合,它决定了CPU对外部器件的控制能力。有多少根控制总线,就意味着 CPU 提供了对外部器件的多少种控制。
其中,“读信号输出”控制线用于传送读信号,“写信号输出”控制线用于传送写信号。

1.11 内存地址空间(概述)

内存地址空间是CPU可寻址的内存单元范围,由地址总线宽度决定,如CPU地址总线宽度为10,则可寻址1024个内存单元。

1.12 主板

PC机的主板通过总线连接CPU存储器外围芯片组扩展插槽上的RAM内存条和各类接口卡

1.13 接口卡

CPU不能直接控制外部设备,而是通过总线向插在扩展插槽上的接口卡发送命令来间接控制外部设备。

1.14 各类存储器芯片

RAM:随机存储器。可读可写,断电清零。如:内存、显存。
ROM:只读存储器。只读不写,长久不变。如:CD、(显卡、网卡、板)各自的BIOS

注意:随机存储器中的“随机”是指想读哪读哪,不必按顺序从头逐个读取。而不是读到的内容随机。

1.15 内存地址空间

各种存储器都和CPU的总线相连,并且在CPU读写时被当作内存对待,组成逻辑存储器内存地址空间


在图 1.8 中,所有的物理存储器被看作一个由若干存储单元组成的逻辑存储器,每个物理存储器在这个逻辑存储器中占有一个地址段,即一段地址空间。CPU 在这段地址空间中读写数据,实际上就是在相对应的物理存储器中读写数据。

图 1.9 告诉我们,
读取地址0~9FFFF的内存单元,实际上是读取主随机存储器中的数据;
向地址A0000B~FFFF的内存单元写入数据相当于向显存写入数据,可以显示在屏幕上。
C0000~FFFFF只读存储器,写入操作无效

内存地址空间
最终运行程序的是CPU,我们用汇编语言编程的时候,必须要从CPU 的角度考虑问题。对CPU来讲,系统中的所有存储器中的存储单元都处于一个统一的逻辑存储器中,它的容量受CPU 导址能力的限制。这个逻辑存储器即是我们所说的内存地址空间。

目前主流cpu的寻址能力

CPU型号地址总线位数最大寻址能力
Intel 8086201MB
Intel 802862416MB
Intel 80386324GB
Intel Pentium324GB
Intel Pentium Pro3664GB
Intel Pentium II324GB
Intel Pentium III3664GB
Intel Pentium 43664GB
Intel Core Duo3664GB
Intel Core 2 Duo3664GB
Intel Core i3/i5/i748256TB
AMD Athlon/Duron324GB
AMD K6-2/K6-III324GB
AMD Athlon XP324GB
AMD Athlon 64401TB
AMD Phenom II X4/X648256TB

1.1~1.10小结

  1. 汇编指令是机器指令的助记符,同机器指令一一对应
  2. 每一种CPU都有自己的汇编指令集。
  3. CPU可以直接使用的信息在存储器中存放。
  4. 存储器指令数据没有任何区别,都是二进制信息
  5. 存储单元从零开始 顺序编号
  6. 一个存储单元可以存储8个bit,即8位二进制数(也就是一字节)
  7. 1Byte=8bit 1KB=1024B 1MB=1024KB 1GB=1024MB
  8. 每一个 CPU 芯片都有许多管脚,这些管脚总线 相连。也可以说,这些管脚引出总线。一个CPU可以引出3种总线的宽度标志了这个CPU的不同方面的性能:
    地址总线的宽度决定了CPU的寻址能力;
    数据总线的宽度决定了 CPU与其他器件进行数据传送时的一次数据传送量;
    控制总线的宽度决定了CPU对系统中其他器件的控制能力。
    在汇编课程中,我们从功能的角度介绍了3类总线,对实际的连接情况不做讨论。

参考资料

百度百科:电平信息