1.分配地址編碼
不管幾位機,儲存器永遠給每個位元組單元分配一個地址編碼!!!
8086有20個地址線,共有2^20=1024x1024=1M個地址編碼,所以,8086最大儲存空間是1MByte。
8位機, 1Word=1Byte
16位機,1Word=2Byte
32位機,1Word=4Byte
所以8086,
1MByte/(2Byte/Word) =0.5MWord=512KWord
而不等於512KByte。
2.段地址和段內偏移地址
在段暫存器Rs(CS,DS,SS,ES)已經確定的情況下,段開始地址是16 x Rs,20位地址,這是1MByte儲存器空間中任何16倍數開始的地址。
在指令中,
邏輯地址=Rs:16位段內偏移
物理地址=16 x Rs + 16位段內偏移
16位段內偏移,共有2^16個地址編碼,所以段內最大範圍是64KByte。(這是你問題的直接答案。)
8086內部都是16位暫存器,為了支援大於64KByte的儲存空間,採用,利用地址加法器,把段暫存器Rs乘以16變成20位地址,之後加上16位段內偏移地址的地址生成方案。
IBM的老沃森曾經說“全球市場只需要5臺計算機就夠了”。所以,在40年前,Intel在設計8086時,以為20位地址就足夠了,能支援1MByte儲存空間,很大啊!
3.穿越後的super8086
如果讓你穿越到1978年,你可能在不改變8086內部16位暫存器的情況下,只改變地址加法器,可能會設計出支援更大的儲存空間的super8086,如設計出支援32MByte儲存空間,有25條地址線的super8086。也可以更大!
只需要改變地址加法器,把段暫存器Rs左移9位!變成25位,之後加上16位偏移地址就行!
此時,在32MByte空間內,25位段開始地址永遠是512的整數倍位置,而段內空間範圍還是64KByte。
當然,現在大多數CPU或MCU方案是,32位機,採用32條地址方案,還不夠?採用透過儲存器管理軟體的虛擬儲存器空間管理方案,...。
新的聲音,
怎麼可能?歷史上這種模式的發聲很多!
1.分配地址編碼
不管幾位機,儲存器永遠給每個位元組單元分配一個地址編碼!!!
8086有20個地址線,共有2^20=1024x1024=1M個地址編碼,所以,8086最大儲存空間是1MByte。
8位機, 1Word=1Byte
16位機,1Word=2Byte
32位機,1Word=4Byte
所以8086,
1MByte/(2Byte/Word) =0.5MWord=512KWord
而不等於512KByte。
2.段地址和段內偏移地址
在段暫存器Rs(CS,DS,SS,ES)已經確定的情況下,段開始地址是16 x Rs,20位地址,這是1MByte儲存器空間中任何16倍數開始的地址。
在指令中,
邏輯地址=Rs:16位段內偏移
物理地址=16 x Rs + 16位段內偏移
16位段內偏移,共有2^16個地址編碼,所以段內最大範圍是64KByte。(這是你問題的直接答案。)
8086內部都是16位暫存器,為了支援大於64KByte的儲存空間,採用,利用地址加法器,把段暫存器Rs乘以16變成20位地址,之後加上16位段內偏移地址的地址生成方案。
IBM的老沃森曾經說“全球市場只需要5臺計算機就夠了”。所以,在40年前,Intel在設計8086時,以為20位地址就足夠了,能支援1MByte儲存空間,很大啊!
3.穿越後的super8086
如果讓你穿越到1978年,你可能在不改變8086內部16位暫存器的情況下,只改變地址加法器,可能會設計出支援更大的儲存空間的super8086,如設計出支援32MByte儲存空間,有25條地址線的super8086。也可以更大!
只需要改變地址加法器,把段暫存器Rs左移9位!變成25位,之後加上16位偏移地址就行!
此時,在32MByte空間內,25位段開始地址永遠是512的整數倍位置,而段內空間範圍還是64KByte。
當然,現在大多數CPU或MCU方案是,32位機,採用32條地址方案,還不夠?採用透過儲存器管理軟體的虛擬儲存器空間管理方案,...。
新的聲音,
到了雲計算時代,世界上只需 5 片電腦雲就夠了!怎麼可能?歷史上這種模式的發聲很多!