1. 程式人生 > >pmtest1.asm from 自動手寫作業系統 粗略解釋

pmtest1.asm from 自動手寫作業系統 粗略解釋

第一章其實還是很好理解的,配置相關暫存器,使用10號中斷顯示helloworld,到了第三章一開始就講了一堆沒法讓人理解的東西,著實讓人崩潰,看了很多部落格,兩天才大概明白是怎麼回事!

首先得有8086的相關知識,王爽那本書。

然後就是為啥真實模式跳到保護模式會有gdt這東西。

因為在8086下,
段(16位)×16+偏移(16位)=20位,所以2^20=1048576B=1024KB=1mb
最多隻能訪問1mb的空間,很少,然後他想了一個辦法,把更大的32位的段基址放在一個表中,叫做gdt(globe descriptor table),這個表裡頭可以存放顯示操作的段,存放資料data的段,存放視訊記憶體地址的段,各種段,就這樣一折騰使得最大的定址空間達到了2^32=4gb的空間。

但是cpu並不知道你這個表在哪裡,你得使用lgdt命令來把一個結構為32位表頭段地址+16位表界限載入到gdtr這個寄存基中來告訴cpu你的表在哪裡。

最後就是選擇子了,其實也好理解,因為並不是表裡的每一個段都是要執行的,就像上面說的

存放顯示操作的段
存放資料的段
存放視訊記憶體地址的段

我們只要執行存放顯示操作的段,所以就有了選擇子(selector),選擇子實際是一個偏移來的,在這裡不多講,有了選擇子就可以選擇性的執行表中的某一個任務啦。

看完上面兩個就差不多懂了!