《30天自製作業系統》第四課學習筆記

2021-10-09 17:19:57 字數 2970 閱讀 2907

這一章只要是寫了如何讓螢幕顯示我們想要的畫面;

彙編檔案nasfunc.nas是用來寫一些要用彙編開實現的一些功能:

; naskfunc

; tab=

4[format "wcoff"

]; 製作目標檔案的模式

[instrset "i486p"

]; 使用到486為止的指令

[bits 32];

3製作32位模式用的機器語言

[file "naskfunc.nas"

]; 檔名

global _io_hlt, _io_cli, _io_sti, _io_stihlt ;定義其函式名

global _io_in8, _io_in16, _io_in32

global _io_out8, _io_out16, _io_out32

global _io_load_eflags, _io_store_eflags

[section .text]

_io_hlt:

;void

io_hlt

(void

); cpu暫停執行

hltret

_io_cli:

;void

io_cli

(void

); 關閉中斷

cliret

_io_sti:

;void

io_sti

(void

); 開啟中斷

stiret

_io_stihlt:

;void

io_stihlt

(void);

stihlt

ret_io_in8:

;int

io_in8

(int port)

;//寫入乙個位元組資料

mov edx,

[esp+4]

; port

mov eax,

0 in al,dx

ret_io_in16:

;int

io_in16

(int port)

;//寫入兩個位元組資料

mov edx,

[esp+4]

; port

mov eax,

0 in ax,dx

ret_io_in32:

;int

io_in32

(int port)

;//寫入4個位元組資料

mov edx,

[esp+4]

; port

in eax,dx

ret_io_out8:

;void

io_out8

(int port,

int data)

;//讀取乙個位元組資料

mov edx,

[esp+4]

; port

mov al,

[esp+8]

; data

out dx,al

ret_io_out16:

;void

io_out16

(int port,

int data)

;//讀取兩個位元組資料

mov edx,

[esp+4]

; port

mov eax,

[esp+8]

; data

out dx,ax

ret_io_out32:

;void

io_out32

(int port,

int data)

;//讀取4個位元組資料

mov edx,

[esp+4]

; port

mov eax,

[esp+8]

; data

out dx,eax

ret_io_load_eflags:

;int

io_load_eflags

(void);

//然後將32位標誌暫存器eflags壓入堆疊

pushfd ; push eflags

pop eax

ret_io_store_eflags:

;void

io_store_eflags

(int eflags)

;//恢復eflags暫存器

mov eax,

[esp+4]

push eax

popfd ; pop eflags

ret

設定調色盤

1)關閉中斷

2)在調色盤寫入0x3c8

3 ) 根據r g b的順序將其寫入0x03c9,如果要設定下乙個調色盤,再次直接寫入即可

(注:如果是要讀出調色盤的資料,先將調色盤的號碼寫入0x3c7,在從0x03c9讀出3次資料,資料依次就是r g b)

void

init_palette

(void);

set_palette(0

,15, table_rgb)

;return

;/* c語言中的static char語句只能用於資料,相當於彙編中的db指令 */

}void

set_palette

(int start,

int end,

unsigned

char

*rgb)

io_store_eflags

(eflags)

;/* 復原中斷許可標誌 */

return

;}

設定好調色盤之後,就可以在視訊記憶體0xa000寫入對應的顏色即可

void

harimain

(void

)}

Python系統學習第四課

while 迴圈 當乙個條件成立就可以迴圈 不知道具體的迴圈次數,但是知道迴圈的成立條件 benjin 1000 year 0while benjin 2000 benjin benjin 1 0.1 year 1print 第年拿了塊錢。format year,benjin 第1年拿了1100.0...

30天自製作業系統之 第四天

c語言與畫面顯示的練習 依舊先起個部落格隨筆,目前通過這樣的方式才能讓我保持繼續看這本書的動力。脫了好幾天,差點就又放棄了,趁著國慶放假的日子來從新拾起。第四章的主要內容就是利用c語言呼叫組合語言的畫圖介面,然後在c方法中對螢幕進行繪畫,進而達到一種類似window的圖形化介面的功能。這部分還是涵蓋...

C 學習第四課 串

字串 兩種形式,一種是c模式,一種是c 模式 c模式 char a 6 char a hello 幾種函式 strcpy str1,str2 將str2的內容複製到str1上 strcat str1,str2 將str2連到str1的後面 strlen str1 求取字串str1的長度 strcmp...