簡體   English   中英

內存位置和內存段之間的差異

[英]Difference between memory location and memory segment

x86體系結構的內存位置的大小為8位,內存段為16位。 內存位置和內存段之間有什么區別?

分段是Intel發明的方法/機制,它將16/32位CPU物理地址擴展為某些內存位置的4位。 因此,如果CPU為16(32)位,則指向某個內存位置的地址的實際大小為20(36)位長,並且經過計算:

PhysicalAddress = Segment * 16 + Offset

另請檢查: 實模式內存尋址說明

您所指的16位內存段是段寄存器的寬度。 問題中存儲位置的8位寬度是每個存儲地址增量的數據量。 大多數CPU以8位為增量對內存進行尋址,但這不是通用的定律-存在每個內存增量具有不同數據寬度的CPU。 后者表示“如果要訪問32位字的表中的下一個元素,則必須將內存地址偏移32/8 = 4個地址”。 前者,即段寄存器的大小,是從CPU寄存器通常不超過16位寬開始的遺留物。 結果,當用作存儲器指針時,每個存儲器位置只能尋址64k *位數量。 64 KiB,即。 這些段寄存器本質上引入了一個64 KiB的窗口,該窗口可以在內存空間中移動,從而允許總共訪問更多的內存。 並非同時全部。 通過寫入那些段寄存器,可以相應地設置該64 KiB窗口的位置。 由於這些寄存器為16位寬,因此我們可以有64k個存儲位置,即這樣的64 KiB窗口開始的位置。 結果,它們重疊。 名稱“段寄存器”有點模棱兩可,因為每個段寄存器增量產生的16個字節部分稱為“段”。 希望能加重混亂。

注意:這全部與x86“實模式”相關,后者與“過時模式”相同。 直到8086,這是那些CPU知道的唯一模式。 后來的人們進入這種模式,以保持兼容性。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM