段界限為什麼要減1

2021-07-22 04:19:31 字數 496 閱讀 5730

orange's

乙個作業系統的實現,第3章,

pmtest1.asm

中,有如下**

gdtptr     dw gdtlen - 1  ; gdt界限

我們知道乙個描述符中包含段基址和段界限,那麼如果

gdtlen

是gdt

的長度,為什麼段界限要

-1呢?

因為段界限表達的是段內的最大偏移,而不是段的最大長度。

乙個簡單的例子,加入乙個段有如下記憶體:

var1 db 0x01;偏移

0var2  db 0x02;偏移

1 那麼段界限應該是1還是

2呢?答案是

1,最大偏移是1。

訪問段中資料使用:段基址

+偏移(所以段界限說明的是這個最大偏移)

總之,牢記一點,段界限不是指段的最大長度,而是只段內的最大偏移,所以一定要在段長度的基礎上再減1。

sinx x的極限為什麼是1 什麼是極限片?

極限片 maximum card 縮寫為mc。最初起源於歐洲,當時郵友們發現當明信片圖案 郵戳 郵票三個元素內容統 一 題材相接近時,會使明信片更有趣味性。於是郵友們開始為郵票找與其匹配的明信片圖案,並蓋主題相近的郵戳。這便是極限明信片的由來。至於為什麼要叫極限片這個名字,是因為按英文直譯過來就叫極...

C語言中為什麼要清除 bss段

bss段裡的內容 顯示初始化為0或者未顯示初始化的全域性變數 顯示初始化為0或者未顯示初始化的static區域性變數。為什麼要清除.bss段 c語言程式在編譯完成後,初始化為非零的全域性變數存放在.data段,而未初始化或初始化為0的全域性變數存放在.bss段中。在生成的可執行檔案中,只有.data...

1 面向介面 我們為什麼要面向介面?

聽過很多朋友說起過面向介面,一般都指面向介面的程式設計,這樣說很對,程式設計中應用介面可以分離實現,實現可插拔等,那麼只有在程式設計中可以用嗎?回到起初的問題,我們為什麼要面向介面?面向介面的成本高嗎?我現在用的是物件導向 面向過程 的方法,那麼面向介面又在 它和物件導向 過程 什麼關係?我的 中為...