8086存储器分段

存储器分段的原因:
我们都知道8086/8088 CPU有20根地址线,这样可以直接寻址的物理地址空间为1M字节(存储单元以字节为单位),范围是00000H至FFFFFH。但8086/8088 CPU的寄存器都是16位,那么在传输地址时显然一次只能传输16位有效地址,也就是只足够访问64K字节地址空间。为了实现寻址1M字节物理空间,8086/8088引入了分段的概念。
存储器分段的两个条件:
1. 逻辑段的开始地址必须是16的倍数,因为段寄存器长为16位;
2. 逻辑段的最大长度为64K,因为指针寄存器长为16位。
逻辑地址与物理地址的形成
段地址是指逻辑段在1MB内存中的起始地址,只是利用了其值的最低4位二进制固定为0的特性,将这4位暂时舍去,而仅保存其前16位并存放在16位的段寄存器中。
偏移地址是指某存储单元与本段段地址之间的距离,也叫偏移量。由于限定每段不超过64KB,所以偏移地址值最大不超过FFFFH。(偏移地址在编程中也常被称为“有效地址”(EA))
段地址和偏移地址的表示都是无符号的16位二进制数,一般用4位十六进制数。
逻辑地址是用户在程序中采用的地址
物理地址是存储单元的实际地址,是CPU和内存储器进行数据交换时所使用的地址。
对于任何一个存储单元来说,可以唯一地被包含在一个逻辑段中,也可以被包含在多个相互重叠的逻辑段中,也就是说,同一个物理地址可以对应多个逻辑地址,只要能得到它所在段的段地址和段内偏移地址,就可以对它进行访问。访问时,只需将逻辑地址转换为对应的物理地址即可。转换方法为:
物理地址 = 段地址 * 16 + 偏移地址
其中,段地址 * 16的操作常常通过将16位段寄存器的内容(二进制形式)左移4位,末位补4个0来实现(这也就是前面讲到的将暂时舍去的4个0补回来)。
例: 假设段地址 = 1000H,偏移地址 = 2345H,
那么物理地址 = 1000H * 16 + 2345H
=1000H * 10H + 2345H
= 12345H

在这里插入图片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章