一、存储器的层次、类型及特点
1. 存储器
{Cache速度快,容量小内存(主存)外存速度慢,容量大\begin{cases}Cache\qquad\qquad\qquad 速度快,容量小\\ 内存(主存)\\ 外存\qquad\qquad\qquad 速度慢,容量大 \end{cases}⎩⎪⎨⎪⎧Cache速度快,容量小内存(主存)外存速度慢,容量大
Cache是介于CPU和内存(主存)之间的高速缓冲存储器.
计算机中采用cache-主存和主存-辅存两个存储层次,来解决容量、速度和价格之间的矛盾。
(1)内存:存放当前运行的程序和数据
- 特点:速度快、容量小、随机存取方式、CPU可直接访问内存。
- 通常由半导体存储器构成。
- RAM、ROM。
- 任何程序都必须加载到内存中才能被CPU执行。内存是计算机中的重要部件之一,它是外存与cpu进行沟通的桥梁,计算机中所有程序的运行都在内存中进行。内存性能的强弱影响计算机整体发挥的水平。
- 采用虚拟存储器是为了扩大主存的存储空间
(2)外存(辅存):存放非当前运行的程序和数据
- 特点:速度慢、容量大、顺序存取/块存取、需调入内存后CPU才能访问(CPU不能直接访问)。
- 通常由磁、光存储器构成,也可以由半导体存储器构成。
- 磁盘、磁带、固态硬盘。
2. 分类
(1)RAM(Random Access Memory) 随机存取存储器
-
随机存储器即RAM是指:存储器中存取操作与存储单元物理位置的顺序无关。
-
三个特性:
a. 可读可写、非破坏性读出、写入时覆盖原内容。
b. 随机存取,存取任意单元所需的时间相同。
c. 易失性,当断电后,存储器中的内容立即消失。 -
(静态)SRAM 特点:
a. 只要不断电,就不会丢失信息(断电丢数据)。
b. 相对于DRAM,存取速度快。
c. 由触发器构成,集成度较低、功耗大、造价成本高。
d. 一般用作高速缓冲存储器 -
(动态)DRAM 特点:
a. 相对于SRAM,存取速度慢
b. 由电容构成、集成度高、功耗小、造价成本低。
c. 适合制作大规模和大容量的内存。
d. 由于电容漏电,数据不能长久保存,需要专门的动态刷新电路,定期给电容补充电荷,即定时刷新。
(2)ROM(Read-Only Memory)只读存储器
当EPROM擦除后,每个单元的内容为FFH
3. 静态与动态存储器
二、8086存储器的分体结构
16位数据总线{高8位DB15∼DB8<−>奇地址存储器低8位DB7∼DB0<−>偶地址存储器16位数据总线 \begin{cases} 高8位\ DB_{15}\sim DB_8 <-> 奇地址存储器\\ 低8位\ DB_7\sim DB_0 <-> 偶地址存储器\\ \end{cases}16位数据总线{高8位 DB15∼DB8<−>奇地址存储器低8位 DB7∼DB0<−>偶地址存储器
{BHE‾=0时,CPU访问奇体BHE‾=1时,CPU访问偶体\begin{cases} \overline{BHE}=0时,CPU访问奇体\\ \overline{BHE}=1时,CPU访问偶体\\ \end{cases}{BHE=0时,CPU访问奇体BHE=1时,CPU访问偶体
{A0=1时,CPU访问奇体A0=0时,CPU访问偶体\begin{cases} A_0=1时,CPU访问奇体\\ A_0=0时,CPU访问偶体\\ \end{cases}{A0=1时,CPU访问奇体A0=0时,CPU访问偶体
(有效奇地址,无效偶地址)
BHE‾\overline{BHE}BHE | A0A_0A0 | 操作 | 所用数据线 | |
---|---|---|---|---|
规则字 | 0 | 0 | 从偶地址\pmb{偶地址}偶地址偶地址偶地址单元开始读/写一个字\pmb字字字字,需要1个总线周期 | D15∼D0D_{15}\sim D_0D15∼D0 |
字节 | 1 | 0 | 从偶地址\pmb{偶地址}偶地址偶地址偶地址单元读/写一个字节\pmb{字节}字节字节字节 | D7∼D0D_7\sim D_0D7∼D0 |
0 | 1 | 从奇地址\pmb{奇地址}奇地址奇地址奇地址单元读/写一个字节\pmb{字节}字节字节字节 | D15∼D8D_{15}\sim D_8D15∼D8 | |
非规则字 | 1 | 0 | 从奇地址\pmb{奇地址}奇地址奇地址奇地址读/写一个字\pmb字字字字,需要2个总线周期,第一个总线周期高八位数据有效,第二个总线周期低八位数据有效 | D15∼D8D_{15}\sim D_8D15∼D8 D7∼D0D_7\sim D_0D7∼D0 |
0 | 1 | 从奇地址\pmb{奇地址}奇地址奇地址奇地址读/写一个字\pmb字字字字,需要2个总线周期,第一个总线周期高八位数据有效,第二个总线周期低八位数据有效 | D15∼D8D_{15}\sim D_8D15∼D8 D7∼D0D_7\sim D_0D7∼D0 | |
– | 1 | 1 | 无效 | – |
MOVAL,[2000H];AL=12H{BHE‾=1,A0=0MOV AL,[2000H];AL=12H\begin{cases} \overline{BHE}=1,A_0=0 \end{cases}MOVAL,[2000H];AL=12H{BHE=1,A0=0
MOVAX,[2000H];AX=3412H{BHE‾=0,A0=0MOV AX,[2000H];AX=3412H\begin{cases} \overline{BHE}=0,A_0=0 \end{cases}MOVAX,[2000H];AX=3412H{BHE=0,A0=0
MOVAH,[2001H];AH=34H{BHE‾=0,A0=1MOV AH,[2001H];AH=34H \begin{cases} \overline{BHE}=0,A_0=1 \end{cases}MOVAH,[2001H];AH=34H{BHE=0,A0=1
MOVBX,[2001H];BX=5634H{第一个总线周期:BHE‾=0,A0=1第二个总线周期:BHE‾=1,A0=0MOV BX,[2001H];BX=5634H \begin{cases} 第一个总线周期:\overline{BHE}=0,A_0=1\\ 第二个总线周期:\overline{BHE}=1,A_0=0\\ \end{cases}MOVBX,[2001H];BX=5634H{第一个总线周期:BHE=0,A0=1第二个总线周期:BHE=1,A0=0
(以上都是存储器读总线操作,MOV [BX],AX ;这是存储器写总线操作)
例:
已知(2000H)=78H,(2001H)=6AH已知(2000H)=78H,(2001H)=6AH已知(2000H)=78H,(2001H)=6AH
①执行MOVBL,[2001H]指令后,①执行MOV\ BL,[2001H]指令后,①执行MOV BL,[2001H]指令后,
BL=BL=BL=___ 6AH __
BHE‾=\overline{BHE}=BHE=__ 0 ___
A0=A_0=A0=___ 1 __
②执行MOVBX,[2000H]指令后,②执行MOV\ BX,[2000H]指令后,②执行MOV BX,[2000H]指令后,
BX=BX=BX=___ 6A78H __
BHE‾=\overline{BHE}=BHE=__ 0___
A0=A_0=A0=__ 0 ___
AX、BX、CX、DX可以称为数据寄存器(字)
这4个16位寄存器又可分别分成:(字节)
{高8位(AH、BH、CH、DH)低8位(AL、BL、CL、DL)\begin{cases}高8位(AH、BH、CH、DH)\\ 低8位(AL、BL、CL、DL)\end{cases}{高8位(AH、BH、CH、DH)低8位(AL、BL、CL、DL)
{规则字/对准好的字:从偶地址取字非规则字/未对准好的字:从奇地址取字\begin{cases} 规则字/对准好的字:从\pmb{偶地址}取\pmb{字}\\ 非规则字/未对准好的字:从\pmb{奇地址}取\pmb{字} \end{cases}{规则字/对准好的字:从偶地址偶地址偶地址取字字字非规则字/未对准好的字:从奇地址奇地址奇地址取字字字
三、主存的容量
1. 概念
{位:bit(0/1)字节:Byte(8个位)字:word:(16个位)(2个字节)\begin{cases} \pmb位:bit(0/1)\\ \pmb{字节}: Byte(8个位)\\ \pmb{字}: word:(16个位)(2个字节) \end{cases}⎩⎪⎨⎪⎧位位位:bit(0/1)字节字节字节:Byte(8个位)字字字:word:(16个位)(2个字节)
{存储元:1个二进制位(0/1)存储单元:8个二进制位(1个字节)存储体:存储单元的集合\begin{cases} \pmb{存储元}:1个二进制位(0/1)\\ \pmb{存储单元}:8个二进制位(1个字节)\\ \pmb{存储体}:存储单元的集合\\ \end{cases}⎩⎪⎨⎪⎧存储元存储元存储元:1个二进制位(0/1)存储单元存储单元存储单元:8个二进制位(1个字节)存储体存储体存储体:存储单元的集合
2. 存储器性能指标
(1)存储容量
- 存储器能够存储的二进制信息量(基本单位:位,字节)
- 存储器能够存储的字数与每字位数的乘积(64MB=64M∗8位(bit)64MB=64M*8位(bit)64MB=64M∗8位(bit))
- 存储器的地址线的编制数×数据线条数
(2)
存取时间:CPU启动一次总线进行读/写的时间。
存储周期:连续两次进行存储器的访问需要最短时间间隔。
3. 主存空间
(1)8088/8086主存容量 1MB
- 64KB,从0地址开始,末地址64KB,从0地址开始,末地址64KB,从0地址开始,末地址__ FFFFH ___
①1KB=210,64KB=216=24∗24∗24∗24(从右向左写)=10000H①\ 1KB=2^{10} ,64KB=2^{16}=2^4*2^4*2^4*2^4(从右向左写)=10000H① 1KB=210,64KB=216=24∗24∗24∗24(从右向左写)=10000H
②10000H+0−1=FFFFH②\ 10000H+0-1=FFFFH② 10000H+0−1=FFFFH- 32KB,从0地址开始,末地址32KB,从0地址开始,末地址32KB,从0地址开始,末地址__ 7FFFH ___
①32KB=215=23∗24∗24∗24=8000H①\ 32KB=2^{15}=2^3*2^4*2^4*2^4=8000H① 32KB=215=23∗24∗24∗24=8000H
②8000H+0−1=7FFFH②\ 8000H+0-1=7FFFH② 8000H+0−1=7FFFH(末地址−首地址+1=空间大小)(末地址-首地址+1=空间大小)(末地址−首地址+1=空间大小)
(空间大小+首地址−1=末地址)(空间大小+首地址-1=末地址)(空间大小+首地址−1=末地址)- 一个有128个字的数据区,它的起始地址为12ABH:00ABH,请给出这个数据区最末一个字单元的物理地址是()
①首地址:逻辑地址→物理地址12AB0H+00ABH=12B5BH①首地址:逻辑地址\rightarrow物理地址 12AB0H+00ABH=12B5BH①首地址:逻辑地址→物理地址12AB0H+00ABH=12B5BH
②容量:128个字=256字节(byte),256B=24+24=100H②容量:128个字=256字节(byte),256B=2^4+2^4=100H②容量:128个字=256字节(byte),256B=24+24=100H
③末地址:100H+12B5BH−1=12C5A③末地址:100H+12B5BH-1=12C5A③末地址:100H+12B5BH−1=12C5A
④12C5AH−1=12C59H④12C5AH-1=12C59H④12C5AH−1=12C59H
(2)8088/8086主存空间分段
- 主存分为4个段 DS、CS、SS、ES
最大访问地址容量1MB
4个逻辑段:CPU随机分配可以重叠
4个段大小≤\leq≤ 64KB
段首地址必须从小节开始
(小节:每小节为16字节(XXX0H)) - 物理地址:CPU访问主存时使用的地址(8088/8086为20位)
逻辑地址:程序员编程时使用的地址 (8088/8086为16位)
a. 在CPU内ALU中实现有效地址(偏移地址)计算,在CPU的地址加法器上实现物理地址的计算
b. 逻辑地址:(段地址:偏移地址)
物理地址:段地址*16+偏移地址
段地址:CPU的段寄存器中的值
偏移地址:相对于段地址的位移量
地址2000H:0480H的物理地址:地址2000H:0480H的物理地址:地址2000H:0480H的物理地址:
2000H∗16+0480H2000H* 16+0480H2000H∗16+0480H
=2000H∗10H+0408H=2000H* 10H+0408H=2000H∗10H+0408H
=20408H→1MB:00000H∼FFFFFH=20408H→1MB:00000H\sim FFFFFH=20408H→1MB:00000H∼FFFFFH
物理地址按顺序依次给存储单元编制
物理地址每个地址是唯一空间,对应多个逻辑地址。
(一个物理地址对应多个逻辑地址)
四、主存与CPU的连接
1. 原则
(1)CPU的三种系统总线依次对应主存的三种总线
(2)
8088为8位数据线D7∼D0<=>主存芯片8位数据线D_7\sim D_0<=>主存芯片8位数据线D7∼D0<=>主存芯片8位数据线
8086为16位数据线D15∼D0<=>主存芯片16位数据线D_{15}\sim D_0<=>主存芯片16位数据线D15∼D0<=>主存芯片16位数据线
(3)CPU为20位地址线A19∼A0A_{19}\sim A_0A19∼A0
① 片内地址线,CPU最低地址 => 主存芯片地址线
② 中位地址线 => 地址译码器
③ 高位地址线=>地址译码器,也可以不用
(4)控制线
2. 主存芯片
(1)RAM{SARM:6116芯片2k∗8bit{AB(地址总线):A10∼A0(2k=211:11条地址线)DB(数据总线):D7∼D0(8条数据线)CB(控制总线):OE‾、WE‾、CS‾DRAM:2116芯片16k∗1bit{AB:A13∼A0DB:D0CB:OE‾、WE‾、CS‾(1)\pmb{RAM}\begin{cases} \pmb{SARM}:6116芯片 2k*8bit\begin{cases} \pmb{AB(地址总线):A_{10}\sim A_0}(2k=2^{11}:11条地址线)\\ \pmb{DB(数据总线):D_{7}\sim D_0}(8条数据线)\\ CB(控制总线):\overline{OE}、\overline{WE}、\overline{CS} \end{cases}\\ \pmb{DRAM}:2116芯片 16k*1bit\begin{cases} \pmb{AB:A_{13}\sim A_0}\\ \pmb{DB:D_0}\\ CB:\overline{OE}、\overline{WE}、\overline{CS}\\ \end{cases} \end{cases}(1)RAMRAMRAM⎩⎪⎪⎪⎪⎪⎪⎪⎪⎨⎪⎪⎪⎪⎪⎪⎪⎪⎧SARMSARMSARM:6116芯片2k∗8bit⎩⎪⎨⎪⎧AB(地址总线):A10∼A0AB(地址总线):A10∼A0AB(地址总线):A10∼A0(2k=211:11条地址线)DB(数据总线):D7∼D0DB(数据总线):D7∼D0DB(数据总线):D7∼D0(8条数据线)CB(控制总线):OE、WE、CSDRAMDRAMDRAM:2116芯片16k∗1bit⎩⎪⎨⎪⎧AB:A13∼A0AB:A13∼A0AB:A13∼A0DB:D0DB:D0DB:D0CB:OE、WE、CS
(2)ROM、EPROM{2764芯片8k∗8bit{AB:A12∼A0DB:D7∼D0CB:DE‾、CS‾2732芯片4K∗8bit{AB:A11∼A0DB:D7∼D0CB:DE‾、CS‾(2)\pmb{ROM}、EPROM\begin{cases} 2764芯片 8k*8bit \begin{cases} \pmb{AB:A_{12}\sim A_0}\\ \pmb{DB:D_7\sim D_0}\\ CB:\overline{DE}、\overline{CS} \end{cases}\\ 2732芯片4K*8bit\begin{cases} \pmb{AB:A_{11}\sim A_0}\\ \pmb{DB:D_7\sim D_0}\\ CB:\overline{DE}、\overline{CS} \end{cases} \end{cases}(2)ROMROMROM、EPROM⎩⎪⎪⎪⎪⎪⎪⎪⎪⎨⎪⎪⎪⎪⎪⎪⎪⎪⎧2764芯片8k∗8bit⎩⎪⎨⎪⎧AB:A12∼A0AB:A12∼A0AB:A12∼A0DB:D7∼D0DB:D7∼D0DB:D7∼D0CB:DE、CS2732芯片4K∗8bit⎩⎪⎨⎪⎧AB:A11∼A0AB:A11∼A0AB:A11∼A0DB:D7∼D0DB:D7∼D0DB:D7∼D0CB:DE、CS
3. 译码
将输入的一组二进制编码变换为一个特定的控制信号。
将输入的一组高位地址信号通过变换产生一个有效的控制信号,用于选中某一个存储器芯片,从而确定该存储器芯片在内存中的地址范围。
4. 地址译码器
(1)2:4译码器(2个输入端、4个输出端)
A、B输入端连接的是CPU的地址线A、B输入端连接的是CPU的地址线A、B输入端连接的是CPU的地址线
Y0‾、Y1‾、Y2‾、Y3‾输出端连接的存储芯片的片选端CS‾\overline{Y_0}、\overline{Y_1}、\overline{Y_2}、\overline{Y_3}输出端连接的存储芯片的片选端\overline{CS}Y0、Y1、Y2、Y3输出端连接的存储芯片的片选端CS
真值表
B | A | Yi‾\overline{Y_i}Yi |
---|---|---|
0 | 0 | Y0‾\overline{Y_0}Y0 |
0 | 1 | Y1‾\overline{Y_1}Y1 |
1 | 0 | Y2‾\overline{Y_2}Y2 |
1 | 1 | Y3‾\overline{Y_3}Y3 |
(2)3:8译码器(3个输入端、8个输出端)
接地给低电平
74LS138(典型的38译码器)
真值表
C | B | A | Yi‾\overline{Y_i}Yi |
---|---|---|---|
0 | 0 | 0 | Y0‾\overline{Y_0}Y0 |
0 | 0 | 1 | Y1‾\overline{Y_1}Y1 |
0 | 1 | 0 | Y2‾\overline{Y_2}Y2 |
… | … | … | … |
1 | 1 | 1 | Y7‾\overline{Y_7}Y7 |
2764的地址范围___
CBA\quad\quad\quad\quad\quad\quad C\quad B\quad ACBA
A19A18A17A16A15A14A13A12…A0A_{19}A_{18}A_{17}A_{16}\pmb{A_{15}A_{14}A_{13}}A_{12}…A_{0}A19A18A17A16A15A14A13A15A14A13A15A14A13A12...A0
00000100…004000H\quad0\quad0\quad0\quad0\quad0\quad1\quad0\quad0\quad…0\qquad04000H00000100...004000H
00000101…105FFFH\quad0\quad0\quad0\quad0\quad0\quad1\quad0\quad1\quad…1\qquad05FFFH00000101...105FFFH
地址范围:4000H∼5FFFH4000H\sim 5FFFH4000H∼5FFFH
5. 译码方式
- 全译码:CPU的20位地址线均用上
用全部的高位地址信号作为译码信息,使得存储器芯片的每一个单元都占据一个唯一的地址。 - 部分译码:CPU的20位地址线只用了一部分低地址线
n条地址线,确定2n地址范围n条地址线,确定2^n地址范围n条地址线,确定2n地址范围
(没有地址的地址线称为片内地址线,首地址全0,末地址全1。)(没有地址的地址线称为片内地址线,首地址全0,末地址全1。)(没有地址的地址线称为片内地址线,首地址全0,末地址全1。) - 线选法:CPU访问的芯片比较少,直接使用CPU的地址线片选存储芯片.
(部分地址译码和线选法都会出现地址重迭,全译码可避免。)
6. 画图
2764为8K×8的EPROM芯片,要求其地址范围是FA000H~ FBFFFH,设计其连线。
分析:地址范围和容量的关系
容量=末地址+1-首地址=FBFFFH+1-FA000H=2000H=8K
例:请利用下图给定的集成电路(图中的集成电路为示意图,只包含题目中用到的引脚),试连接其地址总线、数据总线和控制总线,使其构成64K×8位的全地址译码存储器系统,并指出IC6和IC7存储器芯片的地址范围。
8086芯片的ALE连接8282地址锁存器的STB8086芯片的ALE 连接 8282地址锁存器的STB8086芯片的ALE连接8282地址锁存器的STB
8086芯片RD‾接RAM随机存取存储器/ROM只读存储器的OE‾8086芯片\overline{RD} 接 RAM随机存取存储器/ROM只读存储器的\overline{OE}8086芯片RD接RAM随机存取存储器/ROM只读存储器的OE
8086芯片WR‾接RAM随机存取存储器的WE‾8086芯片\overline{WR} 接 RAM随机存取存储器的\overline{WE}8086芯片WR接RAM随机存取存储器的WE
本文仅供本人学习总结使用,文中观点,均为本人拙见,如有错误或不妥之处,请及时指正。