内存位置和内存段之间的差异

时间:2014-06-09 14:39:23

标签: assembly architecture x86

x86架构内存位置的大小为8位,内存段为16位。 内存位置和内存段之间有什么区别?

2 个答案:

答案 0 :(得分:0)

分段是英特尔发明的metod /机制,它为一些内存位置的4位扩展了16/32位CPU物理地址。因此,如果CPU为16(32)位,则指向某个存储器位置的实际地址大小为20(36)位并且是被卡的:

PhysicalAddress = Segment * 16 + Offset

同时检查:Real mode memory addressing explaination

答案 1 :(得分:0)

您所指的16位存储器段是段寄存器的宽度。您问题的内存位置的8位宽度是每个内存地址增量的数据量。大多数CPU以8位增量寻址存储器,但这不是通用法则 - 存在每个存储器增量具有不同数据宽度的CPU。后者意味着“如果要访问32位字表中的下一个元素,则必须将内存地址偏移32/8 = 4个地址”。前者,段寄存器大小,是CPU寄存器通常不超过16位宽时的残留。因此,当用作存储器指针时,每个存储器位置只能寻址64k *位数。 64 KiB,即。这些段寄存器实质上引入了一个64 KiB窗口,可以通过内存空间进行移位,从而允许总共访问更多内存。只是不是所有的同时。通过写入这些段寄存器,相应地设置该64 KiB窗口的位置。由于这些寄存器是16位宽,我们可以有64k内存位置,这样的64 KiB窗口开始。结果,它们重叠。 名称“段寄存器”有点模糊,因为每个段寄存器增量的结果16字节部分称为“段落”。希望增加混乱。

注意:这一切都与x86“真实模式”有关,与“过时模式”相同。高达8086,这是这些CPU知道的唯一模式。后代引入该模式,以保持兼容性。