Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/assembly/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Memory 关于实模式物理存储器寻址_Memory_Assembly_X86_Addressing_Real Mode - Fatal编程技术网

Memory 关于实模式物理存储器寻址

Memory 关于实模式物理存储器寻址,memory,assembly,x86,addressing,real-mode,Memory,Assembly,X86,Addressing,Real Mode,我和我的朋友正在集思广益,讨论一个关于实模式下物理内存寻址的问题,但我们对此束手无策。来吧 在实模式下,16乘以段选择器寄存器,并添加到偏移寄存器,以获得20位物理地址。因此,这导致了重叠段的可能性 例如,“段选择器->0040和偏移量->0010”=“段选择器->0030和偏移量->0110” 我们的理解是,段选择器在被添加到偏移量之前被移位4位。所以为了避免这种分割,他们为什么不在将段选择器添加到偏移量之前将其移位6(乘以64)。在我们看来,这将消除记忆重叠的可能性 这与他们在此期间面临的任

我和我的朋友正在集思广益,讨论一个关于实模式下物理内存寻址的问题,但我们对此束手无策。来吧

在实模式下,16乘以段选择器寄存器,并添加到偏移寄存器,以获得20位物理地址。因此,这导致了重叠段的可能性

例如,“段选择器->0040和偏移量->0010”=“段选择器->0030和偏移量->0110”

我们的理解是,段选择器在被添加到偏移量之前被移位4位。所以为了避免这种分割,他们为什么不在将段选择器添加到偏移量之前将其移位6(乘以64)。在我们看来,这将消除记忆重叠的可能性


这与他们在此期间面临的任何硬件限制有关,还是仅仅是一个设计决策。

这是由于设计限制。他们有一个20位地址总线,最简单的方法是让段寄存器选择段落,然后向其添加偏移量(对于超过20位地址总线的部分,它会环绕到内存底部)。

移位4会得到一个整兆字节的地址空间。哇

这项设计是在8位系统配置为64KB的时候完成的,这些内存足够丰富,可以购买这么多内存。还有一个足够大的盒子,可以装下所有的内存板

以下是16 kB的内容:


如果要安装4MB,首先必须租用另一个房间来存储内存板

现在,你可以买一台完整的电脑,剩下的钱和我第一次4MB内存配置的成本一样多!这是正确的。请记住,他们试图用16位寄存器达到1MB的内存地址空间(20位)!!!。实现这一点的最有效方法是使用“分段”,将分段基础部分向左“移位”4位。你所说的要不惜一切代价避免的重叠并不像你想象的那么糟糕!。考虑到可以用这个方案定义小片段(一些字节长)以及大片段(接近64KB长)。