当前课程知识点:微机原理与接口技术 > 第3周 实模式存储器寻址与总线 > 第10讲 实模式存储器寻址 > 实模式存储器寻址_01
大家好
这一讲我们来学习实地址模式下的存储器变换
这一讲的内容呢
在我们整个这一门课中是非常重要的一个基础
也就是说 我们说这门课一共有三个基本点
第一个基本点是我们第一章就学过的那个
基本逻辑门
以及我们后边将要提到的译码器
那么这个就是我们的第二个基本点
为什么说它是第二个基本点呢?
也就是说它是整个这门课的基础
这一部分的内容学清楚了
我们才有可能比较
深入的理解
我们下一章将要学到的
指令操作数的寻址方式
而寻址方式学清楚了
那么我们等于说对所有的指令才能够理解
而所有的指令学清楚了
大家才有可能会编程序
因此呢 这一讲的内容希望大家能够
真正的能够把它理解了
y为了帮助大家理解 所以这一部分内容
加上它理解起来有一些难度 所以我们
比较细致的给大家做了一个划分
也就是说这一讲
我们将涉及了这么样四点的内容
一个是 内存分段管理的思想
还有一个是实地址模式下的内存地址变换
以及
我们在上一讲已经讲内部寄存器的时候
我们曾经提到过的段寄存器
但是因为当时在
讲的时候还没有讲到这里
所以我们把段寄存器只是作为一个概念
或者说一种寄存器的类型
来给大家做了简单地描述
那么在这一讲里头 我们把前边这两点
学完了之后 我们会再回来
把段寄存器的作用
或者说它是怎么样使用的
我们给大家做个解释
最后呢
有一点当然跟内存地址变换没有太大关系
但是我们也把它合成在这里
也就是说有关堆栈的概念
堆栈这个概念 我们在后边学指令的时候
因为有专门针对堆栈操作的指令
所以为了跟学那条指令打一下基础
我们在这里先把堆栈的概念跟大家提出来
当然讲的时候 我们也结合了
段的概念 一起来学习这个堆栈
好 下边我们先来学习
有关内存分段的这种
概念或者说它的思想
我们已经知道
8088CPU也好 8086CPU也好
从它的内部体系结构来讲
它是一个16位的体系结构
这种16位的体系结构就意味着
它可以同时处理或者同时产生
16位二进制码
也就是说它只有这样的能力
它能够同时处理
的二进制的位数只有16位
或者直接产生的二进制的位数也只有16位
16位二进制意味着什么呢?
它就可以能够
有能力产生2的16次方个编码
就像我们
两位二进制能
有能力产生4个编码一样
因为 2的2次等于4
对吧 我们3位二进制码
就可以产生8个不同的编码
就从000到111
那么我们现在16位二进制码
就可以产生从16位0到16位1
这样一共64K个编码
如果这64K个编码我们用来作为
内存单元的地址的话
那么也就说意味着它
能够直接管理的内存单元的个数是64K个
为什么要这样说?
是因为我们想
我们既然只有能力产生64K个编码
而且我们要管理内存
因为对内存的操作我们在前面已经讲过
无非是读取或者写入
那么不论是读取还是写入
我们都一定要找到我们要访问的那个
内存单元
就像我们到一个大楼里一定要找到
一个具体的房间一样
怎么找到呢? 我们基于的是它的门牌号码
所以在这里也一样
内存为了保证我们能够找到我们
需要的那个单元
所以我们内存每一个单元必须要有地址
也就是说要有门牌号码
而这个门牌号码一定在整个内存空间中
是一个唯一的门牌号码
否则就找不到了 就会找重了 对吧
所以
如果你只有产生64K个地址码的
这样编码能力的话
那么它能够直接管理的内存单元
就只有64K个
64K个内存单元呢 不论是
不要说今天我们根本无法想象这么小
就是在早期它也实在是太小了
我们8088CPU需要管理
一兆个内存单元
这个当然相对于今天来讲
这一兆字节的内存也是实在是小的不行
但是实际上在很多
嵌入式应用或者单片机系统里头
一兆已经非常大了
那么这个在早期呢 8088这个时代呢
一兆字节的内存是可以够用的了
那么一兆单元按照我们刚才的理论
要想管理一兆个单元
我们要多少位二进制码给它编地址呢?
也就说2的多少次方等于一兆呢?
需要20位
所以在这里呢 也就是说我们实际上
我们需要由16位的体系结构来产生一个
20位的地址的这样子的一个能力
怎么样去实现?
这个就是所谓的内存分段管理
好 下边我们
通过一个图
来帮助大家先建立一点点这样的一个概念
比如这个就是内存
我们这个这种图 我们前边已经看到过
就说我们以后画内存都是这样
中间每一道就是一个单元
现在我们如果说我们直接用
8088这样产生的16位地址
来管理它的话
那么我们来看 16位地址意思就是说
它能够产生64K个地址编码
假设现在这一块区域
就是64K个地址编码
那么也就是说就是64K个单元
那么也就是说现在我们用16位的
这个二进制码
就可以直接管理这么大一块区
刚才我们说了 这么大一块区实在有点太小
假设这一块区的第一个单元是零
对吧 那肯定是零了
那么这一块区太小 那么我们
还想管理一块区
我们有一种办法 比如这一块区
它也是64K个
它的第一个单元也是零
那么怎么样去区分这个零和这个零呢?
我们很容易的想到了我们
在这个
大楼的这种管理模式
我们说一栋大楼里头
一楼 第一个房间肯定是从1号开始编
那么我们怎么知道这个1号房间是在1楼呢?
我们通常如果这栋楼我们
假设没有超过10层
那么好 我们1楼的第一个房间可能就叫101
那么2楼的第一个房间我们可能就叫201
对吧
那么所以你看到这个房间地址编号的时候
你一看前面第一位数
你就知道它在第几层楼上
也就是说通过第一位十进制数
来区分你这个房间是一楼的1号还是二楼的1号
那么现在我们按照这样的思想
实际上我们也很容易去想
我们怎么样去区分
这个零号单元和这个零号单元呢?
我们在前面加上一个楼层号
就像一个区域号一样
比如这个是零 那么这就是第零块区
计算机里不是从1开始 从0开始
那么这一块区域呢 比如我们从1开始
好 这个00000H
和10000H
这两个就区分开了
如果按照这样子的分配的思想呢
或者是地址编码的思想呢
我们其实很容易理解
马上我们就和我们大楼的编址方式
就结合在一起了
那么这样的话 我们一兆个内存单元
我们可以分成多少块这样子的区呢?
刚好16块
所以分16块64K的区 正好加起来就是一兆了
那么为了区分这16块
我们前面用这个红颜色的表示这个块号
或者我们假设叫段号
那么这个段号有多少位就够了呢?
我们既然要分16块区 那么这个段号
就4位就够了 4位正好有16个组合 对吧
这样子的分段的思想
我们很容易理解
和我们人类平时
编的给大楼的编址方式是非常的像
但是这样子的方法
有一个很大的缺点
这个缺点 第一个缺点我们先来说
我们现在是16位体系结构的CPU
那么也就是说 大家从最早的8位CPU
一直后来把它变成
升级为第三代的微处理器 变成16位
实际上做了很多很多的工作
也就是说在技术的层面上做了很多的研究
才达到这一点
那么16位的体系就意味着
它内部所有的寄存器
都是16位的
它的运算器的处理能力是16位的
它内部的总线 也就是说芯片内部的通道
都是16位的
那么现在你需要用这个红颜色的这个
比如我们说它假设叫它段号
要用来区分这16块段
我们只需要4位就够了
那么为这个4位
我们需要设置专门的4位寄存器
4位的通道
这个实在是不太可行的
也就是说 对于这样子的一个4位的段号
这样的设置方式和我们整个16位体系结构
是不协调的 所以
这是一个这样的不足
另外一个不足呢 我们来看
假设现在这个 第一块区域有64K
但是实际上有可能我们
编写的程序或者我们操作的数据
根本用不到这么大
那么用不到这么大怎么办?
这块区域已经被一个占了
那么也就是说别人不可以占
那么别人在用的时候 用第二块区
所以以此呢就造成了内存很多很多的
一块一块的零散的空闲区
这个对内存效率或者它的有效的利用
也是非常的不合适的
因此这样子的方式呢
我们没有在内存管理上采用
我们希望怎么样呢?
希望假设我们第一块段
我们到绿颜色这么一个区域里头
那么现在我们第二块
既然第一块只用了这么大
那么我们第二块能不能从这里开始呢?
也就是说从黄颜色这个地方就往下
y这可能是第二块呢
我们现在希望这样
如果做到这样的话
我们等于每一块段每一块每一块
大家都能够比较紧凑的在一起
y或者甚至是像黄颜色这样
我们这一块呢
当第一个段用的时候
y这一块黄颜色的区域归第一个归属于第一块区
到 第一块区被用完了
可能在另外一个时间段
它又归属于第二块区
甚至在同一个时间点上
它既归属于第一个区又归属于第二块区
就大家共享
这样子的话
我们整个内存的利用率就会变的很高
因此呢 这就是我们下边要讲的
内存的地址变换
或者说实地址模式下的内存的管理
好 总结一下我们刚才讲的
要实现对一兆字节内存空间的正确的访问
肯定每个内存单元必须要有一个唯一的地址
这个唯一的地址
它的名字就是物理地址
意思说
它一定要在物理上是存在的一个地址
因此呢
这个物理地址
比如在这个内存里头 任何一个单元
它都要有一个唯一的物理地址
刚才我们说
因为我们要管理的内存是一兆个单元
所以呢 我们的物理地址
一定要是20位
因为2的20次方正好有一兆个地址编码
y这样才能保证我们一兆个地址单元
每个单元都有唯一的地址
所以内存地址变换的作用或者它的目的
就是希望如何将产生
直接能够直接产生的16位编码
变换为20位物理地址这样的一个过程
这就叫内存地址变换
-第1讲 关于本课程
--关于本课程
-第2讲 微型计算机系统
--微机系统_01
--微机系统_02
-第3讲 微型计算机一般工作过程
-第4讲 数制与编码
--计算机中的编码
-第5讲 计算机中数的表示与运算
--数的表示
--符号数的表示
--数的表示与运算
-第6讲 基本逻辑运算与逻辑电路
-第7讲 本周小结
--本周小结
-第1周 微型计算机基础概论--第一周单元测验
-第8讲 8088微处理器
-第9讲 8088 CPU主要引线及机构
-第2周 8088微处理器--第二周单元测验
-第10讲 实模式存储器寻址
-第11讲 8088系统总线
--8088系统总线
-第12讲 微处理器小结
--微处理器小结
-单元测验--作业
-第13讲 指令概述
--指令概述
-第14讲 寻址方式
--寻址方式
-第15讲 通用数据传送指令
-第16讲 地址传送指令
--地址传送指令
-第17讲 输入输出指令
--输入输出指令
-第4周 数据传送指令--第四周单元测验
-第18讲 算术运算指令
--加法运算指令
--减法指令
--乘除运算指令
-第19讲 逻辑运算指令
-第20讲 移位操作指令
--移位操作指令
-第5周 算术运算、逻辑运算与移位操作指令--第五周单元测验
-第21讲 关于串操作指令的说明
--串操作指令说明
-第22讲 串传送与串比较
--串传送与串比较
-第23讲 串扫描指令
--串扫描指令
-第24讲 串装入与串存储指令
-第六周单元测验--作业
-第25讲 程序控制指令说明
-第26讲 转移类指令
--无条件转移指令
--条件转移指令
-第27讲 循环控制指令
--循环控制指令
-第28讲 过程调用指令
--过程调用指令
-第29讲 中断指令
--中断指令
-第30讲 处理器控制指令
--处理器控制指令
-第31讲 指令系统小结
--指令系统小结
-第7周 程序与处理器控制--第七周单元测验
-第7周 程序与处理器控制--第七周作业
-第32讲 汇编语言源程序
-- 汇编语言源程序_01
-- 汇编语言源程序_02
-第33讲 伪指令
--数据定义伪指令
--其它伪指令
-第34讲 系统功能调用
-第35讲 汇编语言程序设计示例详解
--程序设计示例1
-第36讲 汇编语言程序设计小结
-第8周 汇编语言程序设计--第八周单元测验
-第8周 汇编语言程序设计--第八周作业
-第37讲 半导体存储器概述
--半导体存储器概述
-第38讲 内存单元编址
--存储单元编址
-第39讲 随机存取存储器RAM
-- RAM_01
--RAM_02
-第40讲 只读存储器ROM
--ROM_01
--ROM_02
-第九周单元测验--作业
-第41讲 半导体存储器扩展
--存储器扩展_2
-第42讲 半导体存储器小结
--半导体存储器小结
-第十周单元测验--作业
-第十周作业--作业
-第43讲 基本I/O接口
-第44讲 简单接口芯片
--简单接口芯片
-第45讲 基本输入输出方法
--基本I/O方法
-第46讲 简单I/O控制系统设计
-第47讲 中断技术
--中断技术1
--中断技术2
-第48讲 输入输出与中断技术小结
--本周小结
-第十一周单元测验--作业
-第49讲 可编程定时计数器
-第50讲 可编程并行接口
-第51讲 可编程接口小结
--本周小结_01
--本周小结_02
-第十二周单元测验
-第52讲 模拟量的输入输出
--模拟量的输入输出
-第53讲 D/A转换器
-第54讲 A/D转换器
-- A/D转换器_01
-第十三周单元测验--作业
-第55讲 I/O接口系统综合设计示例详解I
-第56讲 综合设计示例详解II
-第57讲 结束语
--结束语