我的问题与8086中的内存分段有关。我了解到,
8086具有20位地址总线。因此它可以寻址2 ^ 20个不同的地址。这意味着它的内存大小为2 ^ 20,即1MB。
我有一些疑问:
我从8086具有20位地址总线这一事实中了解到,它可以具有2 ^ 20个0和1的不同组合,每个组合代表一个物理地址。我不明白的是2 ^ 20个不同的地址位置如何表示1 MB的可寻址内存?如何将不同地址位置的总数与内存大小(以兆字节为单位)相关?
另外,如果我错了,请纠正我,8086中的16位段寄存器将内存中不同段(代码,堆栈,数据,额外)的起始地址保存在我的问题中, 20位内存中的地址?那么16位寄存器如何保存20位地址?如果它包含20位地址的高16位,处理器如何确定必须指向的确切地址位置?
[[P.S:我是一个初学者,是微处理器,完全依靠自学,所以如果我的问题看起来有些愚蠢,请您原谅。
提前感谢。ss
为0x1111
,sp
在0x2222
,并且您执行了push ax
指令,则将值压入的20位地址为(ss << 4) + sp
或0x11110 + 0x02222 = 0x13332
。可以在Wikipedia的“实模式”部分下找到更多信息:https://en.wikipedia.org/wiki/X86_memory_segmentation