這一章主要講的是顯示字元和gdt、idt
字元的顯示其實就是畫出來,就是根據字的形狀進行編碼,比如:
;}系統所用的字型檔是由hankaku.txt的檔案構成的,這麼檔案會被連線到系統檔案裡面,在makefile中可以看到該通過工具與程式檔案向連線,並且以_hankaku作為彙編的語言的表示,在外部呼叫這個字型檔的話只需要宣告 extern char hankaku[4096];即可
hankaku.bin : hankaku.txt makefile
$(makefont) hankaku.txt hankaku.bin
hankaku.obj : hankaku.bin makefile
$(bin2obj) hankaku.bin hankaku.obj _hankaku
bootpack.bim : bootpack.obj naskfunc.obj hankaku.obj makefile
$(obj2bim) @$(rulefile) out:bootpack.bim stack:
3136k map:bootpack.map \
bootpack.obj naskfunc.obj hankaku.obj
gdt
(全域性描述符表gdt(global descriptor table)在整個系統中,全域性描述符表gdt只有一張(乙個處理器對應乙個gdt),gdt可以被放在記憶體的任何位置,但cpu必須知道gdt的入口,也就是基位址放在**,intel的設計者門提供了乙個暫存器gdtr用來存放gdt的入口位址,程式設計師將gdt設定在記憶體中某個位置之後,可以通過lgdt指令將gdt的入口位址裝入此暫存器,從此以後,cpu就根據此暫存器中的內容作為gdt的入口來訪問gdt了。gdtr中存放的是gdt在記憶體中的基位址和其表長界限。
關於特權級的說明:任務中的每乙個段都有乙個特定的級別。每當乙個程式試圖訪問某乙個段時,就將該程式所擁有的特權級與要訪問的特權級進行比較,以決定能否訪問該段。系統約定,cpu只能訪問同一特權級或級別較低特權級的段。
a. 選擇子sel=21h=0000000000100 0 01b 他代表的意思是:選擇子的index=4即100b選擇gdt中的第4個描述符;ti=0代表選擇子是在gdt選擇;左後的01b代表特權級rpl=1
b. offset=12345678h若此時gdt第四個描述符中描述的段基址(base)為11111111h,則線性位址=11111111h+12345678h=23456789h
由於是13位來對gdt表來進行選擇,所以最大可以查詢2的13次方也就是8192個。
詳細可以參考進行學習
idtidt,interrupt descriptor table,即中斷描述符表,和gdt類似,他記錄了0~255的中斷號和呼叫函式之間的關係
//gdt載入的位址
/* idt初始化 */
for(i =
0; i <
256; i++
)load_idtr
(0x7ff
,0x0026f800);
//idt載入的位址
return
;}
學習第五天
清楚測試用例是什麼 測試用例的重要性 有效性 測試用例是測試人員測試過程中的重要參考依據,準確的測試用例的計畫 執行和跟蹤是 測試的有效性的有力證明 可復用性 設計良好的測試用例可以重複執行,能節約時間,提高測試效率 易組織性 清晰詳細的測試用例能夠便於測試執行的開展 可評估性 測試用例的通過率是檢...
Java學習第五天
當類載入器需要載入某個類時,類載入器會在載入初始化後生成該類的乙個類物件 class 用於描述該類的元資料資訊等。在其後的連線過程中,會初始化該類的靜態成員 變數或靜態初始化器 靜態初始化變數和初始化器按照先後順序執行初始化。例如 static int a 10 static 這樣初始化後a 100...
C 學習第五天
c 中的is和as is可用於任何型別。例如 int a 10 a is object true object o 10 o is int true o person o is int false as右側型別必須為引用型別或可空型別。as操作如果失敗,不丟擲異常,而是返回null 結構 struc...