實模式定址方式

2021-07-22 03:57:17 字數 936 閱讀 5318

邏輯位址

:即邏輯上的位址,實模式下由「段基位址+

段內偏移」組成;保護模式下由「段選擇符

+段內偏移」組成。

線性位址

:邏輯位址經分段機制後就成線性位址,它是平坦的;如果不啟用分頁,那麼此線性位址即實體地址。

實體地址

剛才說了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?...