X86 段:偏移寻址方案是如何工作的?

X86 段:偏移寻址方案是如何工作的?,x86,x86-16,real-mode,memory-segmentation,X86,X86 16,Real Mode,Memory Segmentation,我读到过,在Intel 8086 CPU时代,最大的寄存器是16位,每个人都在寻找一种方法来访问超过65536字节的线性内存,但他们没有扩展CPU寄存器,而是发明了段:偏移寻址方案,按照我的理解,你可以“分组”两个16位寄存器合并到一个32位内存地址中。但在同一个地方,我也读到CPU只能访问1MB内存。这是怎么回事?2^32等于4294967296,所以我不明白,请告诉我:)段寄存器值左移4(乘以16),并添加到地址的“偏移”部分 16*65536=1兆字节。8086有20位地址行。因此,它可以

我读到过,在Intel 8086 CPU时代,最大的寄存器是16位,每个人都在寻找一种方法来访问超过65536字节的线性内存,但他们没有扩展CPU寄存器,而是发明了段:偏移寻址方案,按照我的理解,你可以“分组”两个16位寄存器合并到一个32位内存地址中。但在同一个地方,我也读到CPU只能访问1MB内存。这是怎么回事?2^32等于4294967296,所以我不明白,请告诉我:)

段寄存器值左移4(乘以16),并添加到地址的“偏移”部分


16*65536=1兆字节。

8086有20位地址行。因此,它可以寻址的最大值是2^20=1MB。

实际上只需要再加四位(或一个四位寄存器)就可以寻址到1048360字节…(65535到1兆字节),但他们有一个16位寄存器可用…因此他们使用了一个16位寄存器,而不是期待内存地址总线扩展到32位的日子。 英特尔8088有20个地址行,编号为A0-A19 这个处理器可以处理1兆字节的内存。 FFFFF将是最大的线性地址…每十六进制数字4位,5位=20个地址行


我想这个线性地址需要一个000F的段和一个FFFF的偏移量,你能给我看一下最大的段吗:偏移量地址,可以用老的x86方式表示吗?最大的有效地址是0xffffff。有多段寄存器和偏移值组合可以实现这一点。任意seg=0xf000,偏移量=0xffff。这是作业吗?不,这不是作业。但准确地说,16位段:偏移寻址方案可以访问1114095字节,对吗?(65535*16+65535)仅在地址总线宽度大于20位(286及以上)且A20门禁用的处理器上。额外的0xfff0内存(0xffff0+0xffff-1MB)称为“DOS高内存区”iirc。在原来的8086上,有效地址将环绕。你说的“环绕”是什么意思?