物理地址= 16 *选择器+偏移量 但我不知道为什么选择乘以16?
答案 0 :(得分:4)
为了与Z80“兼容程序员”,但仍然能够使用超过64 kiB的内存,早期的英特尔处理器引入了内存分段。在添加到16位偏移之前,16位段将向左移位4位(意味着乘以16,不 64,如您的问题所述),从而产生20位地址。
对于习惯使用Z80的程序员来说,所需要的只是使用操作系统提供的段,他们可以使用给定的64千字节偏移量。新的程序员可以对段进行更复杂的操作,允许他们访问1 MiB的地址空间(IBM PC将其降低到640 kiB,但出于他们自己的原因)。
答案 1 :(得分:2)
64?当然?阅读例如wikipedia。乘以64就像向左移6位(维基百科说它应该是4,即* 16),即就像说选择器代表22位地址的最重要的16位(维基百科报告20)。这也是维基百科中所描述的真实模式(比我能做的更好)。
答案 2 :(得分:2)
8088/8086的目标是提供一种方法,使16位处理器可以拥有1兆字节的寻址空间,而无需程序员将地址空间划分为64K块,并担心地址是否越过边界它们之间。虽然它受到了很多诽谤,但实际上它比我用过的处理超过寄存器大小的地址的其他方法更好。在数据被自然细分为64K或更少的项目的情况下,以及在16字节边界上开始填充项目是可接受的情况下,它通常相对容易地工作。乘以16(而不是一些更大或更小的数字)可能是任意的,但是当以十六进制表示法列出事物时它很方便,并且在使用两个小数字之间是一个很好的折衷(这将限制地址空间到半个或更少的数字)或者数字太大(这需要更多的代码来处理分配的块的任意偏移,否则会浪费更多的内存填充块到更大的数量)。
8088分割设计中唯一的主要缺陷是:
尽管程序员经常在当天抱怨8088/8086,但它比我当时或之后看到的任何其他16位处理器要好得多(nb:我认为68000是一个32位处理器)。
答案 3 :(得分:1)
我不知道为什么用选择器乘以64?
16位指针可轻松寻址64 KB。
CPU设计人员希望能够处理1 MB。
因此,他们没有使用单个16位指针,而是指定一个指针由两个寄存器实现,即段加偏移,其中'segment'是一个16位寄存器,其值乘以16 in为了解决1 MB的问题。
值(16)来自于将所需的地址范围(1 MB)除以16位寄存器大小(64 KB)的自然可寻址性...即16来自1 MB / 64 KB。