一. 总线
- 每一个
CPU
芯片都有许多管脚,这些管脚和总线相连,CPU
通过总线跟外部器件进行交互 - 总线: 一根根导线的集合
- 总线的分类:
- 地址总线
- 数据总线
- 控制总线
举个🌰 :
该图作用:
-
CPU
通过地址线找到3
号单元的地址 - 同时
CPU
通过控制线发出内存读命令 - 内存通过数据线将
3
号单元相关数据通过数据线返回给CPU
二. 总线类别
-
地址总线:
- 它的宽度决定了
CPU
的寻址能力 -
8086
的地址总线宽度是20
,所以寻址能力是1M(2 ^ 20)
。
- 它的宽度决定了
数据总线
它的宽度决定了
CPU
的单次数据传送量,也就是数据传送速度8086
的数据总线宽度是16
,所以单次最大传递2
个字节的数据-
控制总线
- 它的宽度决定了
CPU
对其他器件的控制能力,能有多少种控制。
- 它的宽度决定了
三. 数据总线
-
8088
的数据总线宽度是8
,8086
的数据总线宽度是16
,分别向内侧中写入89D8H
如下图所示:
注意:这里是16
进制,后方的H
是单词Hexadecimal
的意思。
四.练习
一个
CPU
的寻址能力为8KB
,那么它的地址总线的宽度为____8080,8088,80286,80386
的地址总线宽度分别为16
根,20
根,24
根,32
根.那么他们的寻址能力分别为多少____KB
,____MB
,____MB
,____GB
?8080,8088,8086,80286,80386 的数据总线宽度分别为8根,8根,16根,16根,32根.那么它们一次可以传输的数据为:
____B
,____B
,____B
,____B
,____B
,从内存中读取
1024
字节的数据,8086
至少要读____次,80386
至少要读取____次.
答案:
解答:
因为
2 ^ 10 = 1024
,2 ^ 20 = 1024 * 1024 = 1M
;所以8K = 8 * 1024 = 2 ^ 3 * 2 ^ 10 = 2 ^ 13
。16
根地址总线就是2 ^ 16 = 64 KB
, 20根地址总线就是2 * 20 = 1M
,24
根地址总线就是2 ^ 24 = 16M
; 32根地址总线就是2^32 = 1024 * 1024 * 1024 * 2^2 = 4GB
1
根数据线能传输1bit
,8
根数据线能传输1
字节,所以16
根2
字节,32
根4
字节。因为
8086
数据有16
根数据线,每次可以传输2
个字节,80386
有32
根数据线,一次可以传输4
个字节,所以8086
至少要读512
字节,80386
至少要读256
字节。
五. 内存
- 内存地址空间的大小受
CPU
地址总线宽度的限制。8086
的地址总线宽度为20
,可以定位2^20
个不同的内存单元(内存地址范围0x000000~0xFFFFF
),所以8086
内存空间大小1MB
-0x00000 ~ 0x9FFFF
:主存储器。可读可写
-0xA0000 ~ 0xBFFFF
:向显存中写入数据,这些数据会被显卡输出到显示器。可读可写。 -
0xC0000 ~ 0xFFFFF
:存储各种硬件、系统信息。只读。
六. 寄存器
内部部件之间由总线连接:
- 对程序员来说,
CPU
中最主要部件是寄存器,可以通过改变寄存器的内容来实现对CPU
的控制 - 不同的
CPU
,寄存器个数、结构是不相同的(8086
是16
位结构的CPU
) -
8086
有14
个寄存器- 都是
16
位的寄存器 - 可以存放
2
个字节
- 都是
通用寄存器:
-
AX、BX、CX、DX
这4个寄存器通常用来存放一般性的数据,称为通用寄存器(有时也有特定用途) - 通常,
CPU
会先将内存中的数据存储到通用寄存器中,然后再对通用寄存器中的数据进行运算 - 假设内存中有块红色内存空间的值
3
,现在想把它的值加1
,并将结果存储到蓝色内存中
首先
CPU
会将红色内存空间的值放到AX
寄存器中:mov ax, 红色内存空间值
然后让
AX
寄存器与1
相加:add ax, 1
最后将值赋值给内存空间:
mov 蓝色内存空间,ax
AX、BX、CX、DX
这4
个通用寄存器都是16
位的,如下图所示:
- 因为上一代
8086
的寄存器都是8
位的,为了保证兼容,AX、BX、CX、DX
都可以分为2
个独立的8
位寄存器来使用-
H
代表高位寄存器 -
L
代表低位寄存器
-
字和字节
- 在汇编的数据存储中,有
2
个比较常用的单位 - 字节:
byte
,1
个字节由8bit
组成,可以存储在8
位寄存器中 - 字:
word
,1
个字有两个字节组成,这2
个字节分为成为字的高字节和低字节 - 比如数据
2000(4E20H, 01001110000100000B)
,高字节是78
,低字节是32
.
-
1
个字可以存在1
个16位寄存器中,这个字的高字节,低字节分别存储在这个寄存器的高8
位寄存器,低8
位寄存器中。