1、熟悉8086存储器的分段管理方式。
2、掌握存储单元地址的两种描述方式:物理地址和逻辑地址,以及从逻辑地址到物理地址的换算方法。
2、掌握存储单元地址的两种描述方式:物理地址和逻辑地址,以及从逻辑地址到物理地址的换算方法。
内存是设置在主机内部的存储器,能被CPU直接访问,主要用来存放当前运行的程序和所需的数 据,以便随时向CPU提供信息。它与CPU的联系最密切,若把CPU比作生产成品的工厂,那么内存就是原材料供应处,随时为CPU提供原材料。了解8086系统对内存的管理方式有助于理解CPU的工作原理。
一、基础知识
一、基础知识
1、存储单元的地址
存储器的基本存储单位是一个二进制位(bit),每8位组成一个字节,每相邻的2个字节可组成一个字(16位)。
存储器以字节为单位存储信息。为区别不同的字节存储单元,每个单元都被指定一个唯一的编号,称为该单元的物理地址(简称PA)。地址编号从0开始,按顺序加1,一般用十六进制数表示。
因此PC机的内存是按字节编址的,即以字节单元为单位对内存进行编址。
2、存储单元的内容
一个存储单元中存放的信息称该单元的内容。
如图1,地址是00100H的字节单元的内容为27H,表示为 (00100H)= 27H = 00100111B
存储器的基本存储单位是一个二进制位(bit),每8位组成一个字节,每相邻的2个字节可组成一个字(16位)。
存储器以字节为单位存储信息。为区别不同的字节存储单元,每个单元都被指定一个唯一的编号,称为该单元的物理地址(简称PA)。地址编号从0开始,按顺序加1,一般用十六进制数表示。
因此PC机的内存是按字节编址的,即以字节单元为单位对内存进行编址。
2、存储单元的内容
一个存储单元中存放的信息称该单元的内容。
如图1,地址是00100H的字节单元的内容为27H,表示为 (00100H)= 27H = 00100111B
![](https://i-blog.csdnimg.cn/blog_migrate/2b61f469d32a10a7d7ae5612aaab90a6.jpeg)
图1 存储单元的内容
存储单元的内容“ 取之不尽,新来旧去 ”(可重复取出而不被破坏,一旦存入新的信息,则原保存内容即自动丢失)。
3、存储器中字数据的存储
存储形式:一个字占用连续的两个字节单元(称一个字单元),其低8位(低字节)在低地址的字节单元中,高8位(高字节)在相邻的高地址字节单元中,并以低地址作为该字单元的地址。
例如,图1中字数据3427H存放在地址是00100H和00101H的两个字节单元中,其中低字节27H在低地址的字节单元00100H中,高字节 34H在高地址的字节单元00101H中,字数据3427H的地址是低地址00100H。
地址是00100H的字单元的内容为3427H,表示为 (00100H)= 3427H
可见 一个地址既可作字节单元的地址,又可作字单元的地址,视使用情况而定。
存储形式:一个字占用连续的两个字节单元(称一个字单元),其低8位(低字节)在低地址的字节单元中,高8位(高字节)在相邻的高地址字节单元中,并以低地址作为该字单元的地址。
例如,图1中字数据3427H存放在地址是00100H和00101H的两个字节单元中,其中低字节27H在低地址的字节单元00100H中,高字节 34H在高地址的字节单元00101H中,字数据3427H的地址是低地址00100H。
地址是00100H的字单元的内容为3427H,表示为 (00100H)= 3427H
可见 一个地址既可作字节单元的地址,又可作字单元的地址,视使用情况而定。
二、8086/8088的存储器管理(内存)
8086/8088CPU有20位地址总线,可寻址的最大内存空间达220 字节=1M字节,地址范围为00000H-0FFFFFH。内存中每个字节单元有唯一的20位物理地址, CPU存取内存中的程序和数据必须使用20位物理地址。
问题: 8086/8088CPU访问1MB空间的内存必须有20位地址,而其内部与地址有关的寄存器均为16位的,只能处理16位地址,对内存的直接寻址范围最大只能达64KB。
8086/8088CPU应如何提供20位地址,以寻址1MB内存?
解决方法: 存储器地址分段
8086/8088CPU应如何提供20位地址,以寻址1MB内存?
解决方法: 存储器地址分段
1、存储器的分段
把1MB内存划分成若干个存储区域,每个区域称为一个逻辑段(每个段都在一个连续的存储区域内,容量最大64KB)。8086规定每个段的段起始地址必须 能被16整除,其特征是:20位段起始地址的最低4位为0(用16进制表示为××××0H)。暂时忽略段起始地址的低4位,其高16位(称段基址)可存放 在16位的寄存器中。段基址可确定某个段在内存中的起始位置,而段中某个单元在该段中的位置则可由该单元在段内相对于段起始地址的偏移量(称偏移地址,也 为16位)来决定。也就是说,内存中某单元的位置可用16位的段基址和16位的偏移地址确定。
当CPU访问存储单元时,先由段寄存器提供存储单元所在段的段基址。然后段基址被左移4位(乘16),即恢复段起始地址,再与待访问存储单元的偏移地址相加,可得到该单元的20位物理地址。这样一来,CPU寻址范围可达1MB。
2、段的分配
在对存储器进行操作时,内存一般可分成4个段,分别称为代码段、数据段、堆栈段和附加数据段, 每个段存放不同性质的数据,进行不同的操作。
代码段:存放指令。
堆栈段:程序的堆栈区(子程序调用、系统功能调用、中断处理等操作使用,是按“先进后出”原则访问的特殊存储区域)或作为临时数据存储区。
数据段:存放程序所使用的数据。
附加数据段:辅助的数据区(串操作指令使用)。
4个逻辑段的段基址分别放在相应的代码段寄存器CS、数据段寄存器DS、堆栈段寄存器SS和附加段寄存器ES中,由这4个段寄存器来指明每个段在内存中的起始地址。
假设当前有效的代码段、数据段、堆栈段、附加段的段地址分别为1055H、250AH、8FFBH、EFF0H,则各段在内存中的分配情况如下图所示。
把1MB内存划分成若干个存储区域,每个区域称为一个逻辑段(每个段都在一个连续的存储区域内,容量最大64KB)。8086规定每个段的段起始地址必须 能被16整除,其特征是:20位段起始地址的最低4位为0(用16进制表示为××××0H)。暂时忽略段起始地址的低4位,其高16位(称段基址)可存放 在16位的寄存器中。段基址可确定某个段在内存中的起始位置,而段中某个单元在该段中的位置则可由该单元在段内相对于段起始地址的偏移量(称偏移地址,也 为16位)来决定。也就是说,内存中某单元的位置可用16位的段基址和16位的偏移地址确定。
当CPU访问存储单元时,先由段寄存器提供存储单元所在段的段基址。然后段基址被左移4位(乘16),即恢复段起始地址,再与待访问存储单元的偏移地址相加,可得到该单元的20位物理地址。这样一来,CPU寻址范围可达1MB。
![](https://i-blog.csdnimg.cn/blog_migrate/b1ce94bc0971f1ce8e6e3867daaf7ee2.jpeg)
2、段的分配
在对存储器进行操作时,内存一般可分成4个段,分别称为代码段、数据段、堆栈段和附加数据段, 每个段存放不同性质的数据,进行不同的操作。
代码段:存放指令。
堆栈段:程序的堆栈区(子程序调用、系统功能调用、中断处理等操作使用,是按“先进后出”原则访问的特殊存储区域)或作为临时数据存储区。
数据段:存放程序所使用的数据。
附加数据段:辅助的数据区(串操作指令使用)。
4个逻辑段的段基址分别放在相应的代码段寄存器CS、数据段寄存器DS、堆栈段寄存器SS和附加段寄存器ES中,由这4个段寄存器来指明每个段在内存中的起始地址。
假设当前有效的代码段、数据段、堆栈段、附加段的段地址分别为1055H、250AH、8FFBH、EFF0H,则各段在内存中的分配情况如下图所示。
![](https://i-blog.csdnimg.cn/blog_migrate/56b1ffb5766a4b2aa0ab94aa315ba3d1.jpeg)
2)4个段可分配在1MB的任何地方,段与段间可重叠或不重叠、可连续排列、断续排列。
3)尽管CPU在某一时刻最多只能同时访问4个段,但用户在程序中可根据需要定义多个这样的段。若CPU要访问4个段以外的其他段,只要改变相应段寄存器的内容即可。
3)尽管CPU在某一时刻最多只能同时访问4个段,但用户在程序中可根据需要定义多个这样的段。若CPU要访问4个段以外的其他段,只要改变相应段寄存器的内容即可。
3、存储单元的物理地址与逻辑地址
采用分段管理的存储器,其存储单元地址有两种描述方式:
物理地址 |
逻辑地址
|
存储单元的实际地址(20位)
|
由16位的段地址和段内偏移地址组成,表示为 段地址:偏移地址
|
与存储单元有唯一对应关系
|
|
CPU访问存储单元时使用物理地址
|
编程时程序以逻辑地址编址
|
逻辑地址—→物理地址的转换:
16位段地址×16+16位偏移地址—→20位物理地址
由BIU中的地址加法器实现。
16位段地址×16+16位偏移地址—→20位物理地址
由BIU中的地址加法器实现。
http://student.csdn.net/space.php?uid=2728&do=blog&id=33251