進入32位模式並匯入C語言

2021-08-29 08:09:18 字數 947 閱讀 8012

顯示卡記憶體和一般的記憶體一樣可以儲存資料,它的每個位址都對應著畫面上的畫素,可以利用這一機制在畫面上繪製出五彩繽紛的圖案。vram 分布在記憶體分布圖上好幾個不同的地方。這是因為不同的畫面模式的畫素數也不一樣,不同的畫面模式可以使用的記憶體也不一樣。

32位模式下可使用的記憶體容量遠遠大於1mb。cpu的自我保護功能(識別出可疑機器語言並進行遮蔽)在16位下不能用,但在32位下能用。

通過bios 獲取鍵盤狀態並儲存狀態資訊:

這一部分在32位模式下,程式的前半部分使用組合語言編寫,後半部分使用c語言編寫,使用匯程式設計序呼叫c語言程式bootpack.c。

ccl是c語言編譯器,可以將c源程式編譯成組合語言源程式,由作者根據gcc改造而來,而gcc是以gas組合語言為基礎,輸出的是gas組合語言源程式。

gas2nask 將gas匯程式設計序轉化為nas源程式,之後使用nask.exe 將bootpack.nas生成obj檔案,obj2bim將目標檔案和別的目標檔案相連線,並存入一些交換資訊,bim是作者設計的一種檔案格式,是乙個二進位制映象檔案。bim2hrb針對不同的作業系統進行必要的加工,比如加上識別用的檔案頭或者壓縮。

使用組合語言寫乙個函式,函式名io-hlt,將輸出格式設定為wcoff模式,以便與bootpack.obj鏈結。

之後使用bootpack.c呼叫io_hlt,執行結果同樣是黑屏。

由實模式進入保護模式來進行32位定址

因為cpu在實模式下位址匯流排為20位,所以能訪問到的內存在1m左右,為了能操作更多的記憶體,cpu生產商設計了保護模式,在此模式下匯流排位址可達32位,訪問記憶體明顯增加。用保護模式來32位定址的操作要用乙個叫gdt的東西,這個gdt global descriptor table 叫全域性描述表...

C語言 32位,64位機器sizeof區別

float,double 採用ieee標準浮點數格式,格式固定float 32bit,double 64bit int一般和cpu暫存器長度有關,不過也和編譯器,彙編器有關 由於c c 標準沒有規定整數型別的固定長度。同一cpu不同作業系統和編譯器,對於int 型別規定的長度是不同的 於是為了區別這...

C語言 32位,64位機器sizeof區別

float,double 採用ieee標準浮點數格式,格式固定float 32bit,double 64bit int一般和cpu暫存器長度有關,不過也和編譯器,彙編器有關 由於c c 標準沒有規定整數型別的固定長度。同一cpu不同作業系統和編譯器,對於int 型別規定的長度是不同的 於是為了區別這...