30天自製作業系統讀書筆記 六

2022-05-05 05:57:07 字數 2026 閱讀 4119

首先先整理下**自谷月軒的部落格)

現在我們擁有這麼9個檔案:

恩,接下裡我們補坑。

介紹下gdt和idt

c語言描述:

struct

segment_descriptor ;

我們知道現在段位址是32位的。在這個結構裡用base表示,但是它分成了3段

low(2位元組) mid(1位元組) high(1位元組) 剛好32位。 

為什麼要分成3段呢?為了相容80286時代的cpu。

段上限 limit,這個看上去佔了24個位元組,但是limit_high中的上4位,用來儲存段屬性了,所以只能用20 位。

那還有剩下12位的段屬性。

高四位稱為「擴充套件訪問權」。這4位是由「gd00」構成的,其中g是指剛才g bit,d指段模式,1表示32位。

低8位表示一些許可權。不細寫了。

struct segment_descriptor *gdt = (struct segment_descriptor *) 0x00270000

;

struct gate_descriptor *idt = (struct gate_descriptor *) 0x0026f800

;

這2個位址是作者隨意的,反正這裡面沒有其他程式在占用。。。

for (i = 0; i < 8192; i++)

挨個初始化

void set_segmdesc(struct segment_descriptor *sd, unsigned int limit, int

base, int

ar)//

下面的是啥,我就不知道了。留著以後再看看吧

sd->limit_low = limit & 0xffff

; sd->base_low = base & 0xffff

; sd->base_mid = (base >> 16) & 0xff

; sd->access_right = ar & 0xff

; sd->limit_high = ((limit >> 16) & 0x0f) | ((ar >> 8) & 0xf0

); sd->base_high = (base >> 24) & 0xff

;

return;}

load_gdtr(0xffff, 0x00270000);

至於這句嘛,很簡單因為c語言不能直接操作cpu所以,只能改用彙編寫入gdtr這個暫存器了。

還有就是idt,他和gdt差不多,各位之前學習彙編的時候一定已經接觸過了,畢竟應該沒有哪本彙編教材不介紹大名鼎鼎的int中斷吧。

pic:

處理中斷的輔助晶元。 與cpu直接相連的pic成為主pic,與主pic相連的pic稱為從pic

,主pic負責處理第0到第7號中斷訊號,從pic負責處理第8到第15號中斷訊號。

從pic通過第二號irq與主pic相連。

void init_pic(void

)

/*pic初始化

*/

介紹下pic的暫存器:

imr :interrupt mask register   「中斷遮蔽暫存器」

8位對應8路irq訊號,置1表示忽略該路訊號。

icw :initial control word   「初始化控制資料」

icw 有4個,每個1個位元組。

icw 1 和icw 4 宣告了主機板配線方式( = = 完全不懂哎);

icw 3 是主從設定, 表示觸發器的哪一位連著從觸發器; (一般是irq2 啦);

icw 2 決定irq以哪乙個中斷號通知cpu, int 0x0~0x19 不能被使用.

到現在為止準備工作算是完成了。

今天接下來的東西只介紹了那麼一點,寫成筆記也沒什麼必要,等完成的差不多了在一塊整理吧!

30天自製作業系統讀書筆記 五

為了讓程式靈活點,作者覺得把什麼320x200這些資料直接寫入程式,不如讓程式自己獲取。所以就引入了結構體,指標。用指標直接在記憶體中獲取這些資料 如程式裡的這句 binfo scrnx short 0xff4 對於結構體和指標我就不細寫了,有c語言基礎的人都知道。因為已經進入了32位模式,所以不能...

30天自製作業系統讀書筆記 一

剛開始作者叫我們用二進位制編輯器,手敲01 寫了個img 磁碟映像檔案 並提供了一些檔案 run.bat,install.bat這些乙個批處理檔案,其實就是寫好了cmd指令儲存到文件裡面,方便以後執行。其中run.bat裡面的指令是這樣的 copy helloos.img z tools qemu ...

30天自製作業系統

第一天的內容很少,是一些簡單的基礎知識,在這裡我就沒有必要寫出來了,只說出大概的輪廓了,然後我會對其中的幾點進行詳細的解釋。文章的第一天的輪廓大概是這樣的,作者首先用二進位制編輯器做了乙個顯示二進位制的程式,然後用彙編完全db的形式,後又進行改善,最後以比較標準的組合語言編寫,但程式主體部分還沒有翻...