邏輯位址
:即邏輯上的位址,實模式下由「段基位址+
段內偏移」組成;保護模式下由「段選擇符
+段內偏移」組成。
線性位址
:邏輯位址經分段機制後就成線性位址,它是平坦的;如果不啟用分頁,那麼此線性位址即實體地址。
實體地址
剛才說了8086cpu
資料匯流排為
16位,也就是一次最多能取
2^16
=64kb
資料,這個資料也解釋了實模式下為什麼每個段最大只有
64kb
。但剛才還說了其位址匯流排為
20位,這樣它能定址的能力其實是
2^20=1mb
,這也就是實模式下
cpu的最大定址能力。既然它有
1mb定址能力,那怎麼用
16位的段暫存器表示呢?
這就引出了分段的概念,8086cpu
將1mb
儲存空間分成許多邏輯段,每個段最大限長為
64kb
(但不一定就是
64kb
)。這樣每個儲存單元就可以用「段基位址+段內偏移位址」表示。段基位址由
16位段暫存器值左移
4位表達,段內偏移表示相對於某個段起始位置的偏移量。比如:
seg=0x07c0
jmpi offset, #seg
offset: mov ax,cs
實模式下的定址舉例:
先找到cs**段的位址
mov ax,cs
然後把段位址乘以16,即將16位變成20位。這時因為8086的資料匯流排是16位的,但是位址匯流排是20位的。實現方法很簡單,左移4位即可。
shl eax, 4
add eax, label_seg_code32
這樣便得到了所尋位置的實體地址。
因為位址匯流排只有20位,所以最大定址空間只有1m。
實模式定址
實模式下的定址舉例 先找到cs 段的位址 mov ax,cs 然後把段位址乘以16,即將16位變成20位。這時因為8086的資料匯流排是16位的,但是位址匯流排是20位的。實現方法很簡單,左移4位即可。shl eax,4 add eax,label seg code32 這樣便得到了所尋位置的實體地...
實模式和保護模式區別及定址方式
實模式和保護模式區別及定址方式 我記得大學的彙編課程,組成原理課裡老師講過實模式和保護模式的區別,在很多書本上也有談及,無奈本人理解和感悟能力實在太差,在很長一段時間裡都沒真正的明白它們的內含,更別說為什麼實模式下最大定址空間為1mb?段的最大長度不超過64kb?而保護模式下為啥最大定址能力就變成了...
實模式和保護模式區別及定址方式
我記得大學的彙編課程 組成原理課裡老師講過實模式和保護模式的區別,在很多書本上也有談及,無奈本人理解和感悟能力實在太差,在很長一段時間裡都沒真正的明白它們的內含,更別說為什麼實模式下最大定址空間為1mb?段的最大長度不超過64kb?而保護模式下為啥最大定址能力就變成了64tb?每個段最大也達4gb?...