地址总线大小与存储器大小之间的关系; 8086中的内存分段

问题描述 投票:0回答:1

我的问题与8086中的内存分段有关。我了解到,

8086具有20位地址总线。因此它可以寻址2 ^ 20个不同的地址。这意味着它的内存大小为2 ^ 20,即1MB。

我有一些疑问:

  1. 我从8086具有20位地址总线这一事实中了解到,它可以具有2 ^ 20个0和1的不同组合,每个组合代表一个物理地址。我不明白的是2 ^ 20个不同的地址位置如何表示1 MB的可寻址内存?如何将不同地址位置的总数与内存大小(以兆字节为单位)相关?

  2. 另外,如果我错了,请纠正我,8086中的16位段寄存器将内存中不同段(代码,堆栈,数据,额外)的起始地址保存在我的问题中, 20位内存中的地址?那么16位寄存器如何保存20位地址?如果它包含20位地址的高16位,处理器如何确定必须指向的确切地址位置?

[[P.S:我是一个初学者,是微处理器,完全依靠自学,所以如果我的问题看起来有些愚蠢,请您原谅。

提前感谢。
cpu cpu-registers processor microprocessors memory-segmentation
1个回答
0
投票
  1. 对于这个问题,重要的是要记住,可能的内存地址数量与系统中安装的实际内存(RAM)数量之间存在差异。对于8086,您需要注意的是内存地址的长度为20位,因此这意味着有2 ^ 20个可能的内存地址(由于1 MiB为1024或2 ^ 10 KiB且1 KiB为1024或1 KiB,所以大小正好为1 MiB。 2 ^ 10字节)。这并不意味着系统必然具有1 MiB的RAM,它很可能具有较少的内存,但8086可能寻址的最多地址是1 MiB;因此,如果在地址空间中只有RAM,那么它可能拥有的最大RAM是1 MiB。通常,您可能会在地址空间中留出一些空白,而这些地址空间却用于ROM或其他外围设备。因此,该地址空间的大小为1 MiB,但这并不意味着系统中的RAM /内存为1 MiB。
  2. 正确,段寄存器是8086的所有16位。通过将适当的段寄存器与自变量(自变量是指令使用的任何寻址模式的结果)组合在一起来创建内存地址。将参数添加到段寄存器的值中,该值移位了4位。因此,例如,如果ss0x1111sp0x2222,并且您执行了push ax指令,则将值压入的20位地址为(ss << 4) + sp0x11110 + 0x02222 = 0x13332 。可以在Wikipedia的“实模式”部分下找到更多信息:https://en.wikipedia.org/wiki/X86_memory_segmentation
© www.soinside.com 2019 - 2024. All rights reserved.