第4天 C語言與畫面顯示的練習

2021-10-04 13:02:35 字數 2744 閱讀 7327

2020.3.28

1. 用c語言實現記憶體寫入

2. 條形圖案(harib01b)

3. 挑戰指標(harib01c)

c語言小知識

4. 指標的應用(1)(harib01d)

5. 指標的應用(2)(harib01e)

6. 色號設定(harib01f)

projects/04_day下的harib01f的naskfunc.nas:

; naskfunc

; tab=4

[format "wcoff"] ; 製作目標檔案的模式

[instrset "i486p"] ; 使用486為止的指令

[bits 32] ; 製作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);

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);

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);

mov edx,[esp+4] ; port

mov eax,[esp+8] ; data

out dx,eax

ret_io_load_eflags: ; int io_load_eflags(void);

pushfd ; push eflags

pop eax

ret_io_store_eflags: ; void io_store_eflags(int eflags);

mov eax,[esp+4]

push eax

popfd ; pop eflags

ret

in: cpu從裝置取得電氣訊號的指令

out: cpu向裝置傳送電訊號的指令

沒有mov eax, eflags的命令,所以,只能借助棧來實現,pushfd和popfd。

pushfd: push flags double-word,將標誌位按雙字長壓入棧。其實,它所做的就是push eflags

popfd: push flags double-word,將標誌位按雙字長彈出棧。其實,它所做的就是pop eflags

io_load_eflags**含義

pushfd:將標誌位壓入棧;pop eax,將棧中的資料(標誌位)彈出給eax。

注意到:這個函式是有返回值的。

根據c語言的規約,執行ret時,eax中的值就被看做成函式的返回值。

io_store_eflags**含義

mov eax,[esp+4]:將eflags放入eax中;push eax:將eax彈入棧中;popfd:將棧中的資料彈出,給eflags

make run:

條紋的顏色改變了。這證明程式正確。

7. 繪製矩形(harib01g)

8. 今天的成果(harib01f)

9. 拓展:畫心(harib01i_ex)

10. 題外話:使用mfc畫心(harib01i_ex)

第4天 函式 函式的應用(練習01)

class funcationdemo3 需求1 定義個功能,完成兩個整數的和的獲取 思路 既然可以定義功能,就可以用函式來體現 如何頂乙個函式呢?通過兩個明確來完成。明確一 這個功能的結果是什麼?是和,功能的結果,所以該功能的返回值型別是int 其實就是在明確函式的返回值型別。明確二 這個功能實現...

C語言的模擬練習(4)

程式 include include 完成猜數字遊戲 void chaishuzi else if value 0 else else if key printf 大了!n else 寫 可以在整型有序陣列中查詢想要到數字,找到了返回下標,找不到返回 1 折半查詢 int baniry sort i...

c語言程式設計第4周程式設計練習(素數和)

1 素數和 5分 題目內容 我們認為2是第乙個素數,3是第二個素數,5是第三個素數,依次類推。現在,給定兩個整數n和m,0輸入格式 兩個整數,第乙個表示n,第二個表示m。輸出格式 乙個整數,表示第n個素數到第m個素數之間所有的素數的和,包括第n個素數和第m個素數。輸入樣例 2 4輸出樣例 進步 在使...