汇编语言(第3版)- 学习笔记 - 第1章-基础知识
汇编语言(第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.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.8 地址总线
总线的物理层面就是导线(CPU针脚,内存的金手指与之相连)。
通过总线传输的是电平信息(高电平1
或低电平0
)。
总线不是独木桥而是多车道。一排01
一次性杀过去,对面就会心一笑。。。
可见地址总线
的车道数量
决定了它的寻址能力。
如果一个CPU的地址总线有10条车道 ,那么们说这个CPU的地址总线宽度为10。
这个CPU最大可以寻找 2
10
= 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 8086 | 20 | 1MB |
Intel 80286 | 24 | 16MB |
Intel 80386 | 32 | 4GB |
Intel Pentium | 32 | 4GB |
Intel Pentium Pro | 36 | 64GB |
Intel Pentium II | 32 | 4GB |
Intel Pentium III | 36 | 64GB |
Intel Pentium 4 | 36 | 64GB |
Intel Core Duo | 36 | 64GB |
Intel Core 2 Duo | 36 | 64GB |
Intel Core i3/i5/i7 | 48 | 256TB |
AMD Athlon/Duron | 32 | 4GB |
AMD K6-2/K6-III | 32 | 4GB |
AMD Athlon XP | 32 | 4GB |
AMD Athlon 64 | 40 | 1TB |
AMD Phenom II X4/X6 | 48 | 256TB |
1.1~1.10小结
汇编指令
是机器指令的助记符
,同机器指令一一对应
。- 每一种CPU都有自己的汇编指令集。
- CPU可以直接使用的信息在
存储器
中存放。 - 在
存储器
中指令
和数据
没有任何区别,都是二进制信息 - 存储单元
从零开始
顺序编号
。 一个存储单元
可以存储8个bit
,即8位二进制数(也就是一字节)1Byte=8bit
1KB=1024B
1MB=1024KB
1GB=1024MB
- 每一个 CPU 芯片都有许多管脚,这些
管脚
和总线
相连
。也可以说,这些管脚引出总线。一个CPU可以引出3种总线的宽度标志了这个CPU的不同方面的性能:
地址总线的宽度决定了CPU的寻址能力;
数据总线的宽度决定了 CPU与其他器件进行数据传送时的一次数据传送量;
控制总线的宽度决定了CPU对系统中其他器件的控制能力。
在汇编课程中,我们从功能的角度介绍了3类总线,对实际的连接情况不做讨论。
参考资料
百度百科:电平信息