存储器分段和地址的形成
来源:互联网 发布:惠普网络打印机设置 编辑:程序博客网 时间:2024/05/13 11:13
从8086开始采用分段的方法管理存储器。只有充分理解存储器分段的概念和存储器逻辑地址和物理地址的关系,才能熟练地使用8086/8088汇编语言。
1. 存储单元的地址和内容
* 存储单元的地址是无符号数,n 位二进制数总共能够表示 2n 个存储单元的地址。为了书写方便,存储单元地址常采用十六进制数表示。
* 当以字方式存取字时,处理器自动采用“高高低低”原则。
2. 存储器的分段
* 8086/8088 CPU 有 20 根地址线,可直接寻址的物理地址空间为 1M 字节(=220)。
* 系统存储器由以字节为单位的存储单元组成,存储单元的物理地址长 20 位,范围是 00000H 至 FFFFFH。
* 为什么要分段
8086/8088 微处理器内部数据通路和寄存器皆为 16 位,内部 ALU 只能进行 16 位运算,在程序中也只能使用 16 位地址,寻址范围局限在 216=65536(64K)字节。
通过对存储器分段和使用段寄存器的方法,8086/8088 有效地实现了寻址 1M 字节物理空间。
* 根据需要把 1M 字节地址空间划分成若干逻辑段。每个逻辑段必须满足如下两个条件:
第一,逻辑段的开始地址必须是 16 的倍数;
第二,逻辑段的最大长度为 64K。
* 按照这两个条件,1M 字节地址空间最多可划分成 64K 个逻辑段,最少也要划分成 16 个逻辑段。
第一个条件与段寄存器长 16 位有关;(16 位扩展成 20 位,地址按照 {0000,0000,0000,0000,0000} {0000,0000,0000,0001,0000} {0000,0000,0000,0010,0000} 递增)
第二个条件与指针寄存器长 16 位有关。
3. 物理地址的形成
由于段的起始地址必须是 16 的倍数,所以段起始地址有如下形式:
bbbb,bbbb,bbbb,bbbb,0000
用 16 进制可表示成 XXX0。这种 20 位的段起始地址,可压缩表示成 16 位的 XXXX 形式。
我们把 20 位起始地址的高 16 位 XXXX 称为段值。显然,段起始地址等于段值乘 16(即左移 4 位)。
要访问的某一个存储单元总是属于某个段。我们把存储单元的地址与所在段的起始地址的差称为段内偏移,简称为偏移。在一个段内,通过偏移可指定要访问的存储单元,或者说要访问的存储单元可由偏移量来指定。在整个 1M 地址空间中,存储单元的物理地址等于段起始地址加上偏移。
于是,存储单元的逻辑地址由段值和偏移量两部分组成,用如下形式表示:
段值:偏移
根据逻辑地址可方便地得到存储单元的物理地址,计算公式如下:
物理地址=段值×16+偏移
通过移位和算术加可容易地实现上述公式。
采用段值和偏移构成逻辑地址后,段值由段寄存器给出,偏移可由指令指针 IP、堆栈指针 SP 和其他可作为存储器指针使用的寄存器(SI、DI、BX 和 BP)给出,偏移还可直接用 16 位数给出。指令中不使用物理地址,而是使用逻辑地址,由总线接口单元 BIU 按需要根据段值和偏移自动形成 20 位物理地址。
- 存储器分段和地址的形成
- 存储器分段和地址计算
- 存储器地址的分段表示及物理地址的计算
- 存储器的分段详解
- 程序存储器的分段
- 存储器的分段管理
- 80386的分段机制、分页机制和物理地址的形成
- 80386的分段机制、分页机制和物理地址的形成
- 80386的分段机制、分页机制和物理地址的形成
- 80386的分段机制、分页机制和物理地址的形成
- 80386的分段机制、分页机制和物理地址的形成
- 8086的存储器分段结构
- 主存地址的形成
- 8086存储器的分段组织与管理
- 8086存储器的分段组织与管理
- Windows下IPv6地址的形成和使用
- IP地址分类和分段
- 操作系统的分段与逻辑地址和转换物理地址
- 对文件的命名
- 报表中遇到的问题(四)
- 写一篇吧
- s3c2440的网卡接口扩展
- 实战Concurrent
- 存储器分段和地址的形成
- 字符串转换为十六进制
- xp 英文版 安装后出现 中文乱码,解决方案。
- 有关颜色的几个函数
- 小智慧,大道理
- C++ 中 能用string 的就不要用C语言中的字串.....
- 6v电源控制12v继电器
- 手动配置tomcat6.0运行环境小实例
- 手动配置tomcat6.0运行环境小实例