80×86為什麼要求資料區段的起始地址必須為16的倍數?

來源:互聯網
上載者:User

電腦的記憶體管理單元是以“位元組”為最小單位進行線性編址的,位元組是80x86CPU對記憶體管理的基元。為了標識每個儲存單元,就給每個儲存單元規定一個編號,該編號就是記憶體單元的物理地址。
儲存單元的物理地址是一個16位的位元,物理地址通常採用16進位書寫。
16位CPU內部擁有20根地址線,它的定址範圍就是2的20次方,也就是1M的記憶體空間。
但是16位CPU存放儲存單元位移量的寄存器(IP,SP,BP,SI,DI,BX)的編碼範圍僅為:00000H - 0FFFFH,也就是只能訪問65536個儲存單元,64K。
為了能夠訪問1M的記憶體空間,CPU就採用了記憶體分段的管理員模式,並且在CPU內部加入了段寄存器。

首先說的是段寄存器的大小是16位的,其中放的是段值。一個物理地址的計算是段值*段的大小+段內位移=1M;而段內位移的範圍是地址線位元或者指標寄存器的大小決定的,所以它的範圍是0-64K。當為0時也就是段的起始地址,所以此時段的大小最小為16.否則不能等於1M。所以我認為既然是為了用16位表示20位的地址空間而採用的分段,所以段的 起始地址肯定就是16的倍數了。

參考:80x86,完整的地址當初被設計為 段址*16+偏址,所以就要求段對齊在 16 的倍數上了。定為 16 應該是和當時記憶體容量的預期有關。這樣的地址形成方式可以訪問到 1M 的記憶體空間(網路找來的)

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.