幾行彙編幾行C 實現乙個最簡單的核心

2022-10-07 00:54:12 字數 2417 閱讀 2595

1)現有的作業系統都是用什麼語言開發出來的?

2)grub是什麼?

3)grub**能獲得呢?

4)我們要實現乙個hello os,那hello os的引導流程是怎樣的?

5)上圖中的bios是什麼?

6)為什麼寫作業系統一上來不能直接用c寫?

7)基本環境的彙編**是怎樣的?

8)能解釋一下上面**的含義嗎?

9)上面匯程式設計序中的mian函式為什麼沒有函式體?

10)既然說我們上面的函式不是應用程式的函式,那怎麼會有應用程式庫中的printf?

11)現在我們啟動的程式有了,接下來該幹嘛?

12)如何控制計算機螢幕?

13)顯示卡有哪些型別?

無論我們 pc 上是什麼顯示卡,它們都支援一種叫 vesa 的標準,這種標準下有兩種工作模式:字元模式和圖形模式。顯示卡們為了相容這種標準,不得不自己提供一種叫 vgabios 的韌體程式。

14)顯示卡的字元模式是怎樣工作的?

15)知道了顯示卡的字元工作模式,那我們的控制**應該怎麼寫?

void _strwrite(char* string)

return;}​

void printf(char* fmt, ...)

15.1)為什麼printf 函式的第二引數是「..."形式?16)現在3個檔案**寫好了,那麼怎麼編譯 hello os?17)現在我們只有3個檔案,那麼我們可以手動來編譯鏈結,但是以後系統成熟了,有幾萬,幾十萬個檔案,那應該怎麼辦?18)make工具是怎樣工作的?

19)makefile 檔案中規則是怎樣的?

20)這個make工具從**獲取呢?

21)makefile檔案內容大概是怎樣的?

cc = gcc #定義乙個巨集cc 等於gcc

cflags = -c #定義乙個巨集 cflags 等於-c

objs_file = file.o file1.o file2.o file3.o file4.o #定義乙個巨集

.phony : all everything   #定義兩個偽目標all、everything

all:everything       #偽目標all依賴於偽目標everything

everything :$(objs_file) #偽目標everything依賴於objs_file,而objs_file是巨集會被

#替換成file.o file1.o file2.o file3.o file4.o

%.o : %.c

$(cc) $(cflags) -o $@ $<

22)編譯的整體圖是怎樣的?

23)上圖中的nasm是啥?

24)現在我們編譯得到了hello os.bin,那接下來我們應該做什麼?

25)那如何才能讓grub找到他呢?

25.1)我們這個grub.cfg在**?

26)那我們的hello os在grub.cfg檔案中啟動項應該是怎樣的?

menuentry 'helloos'

27)怎麼檢視你的boot目錄掛載的分割槽呢?28)一切就緒,整體安裝的步驟是怎樣的?選擇 hello os,按下 enter 鍵(或者重啟按 esc 鍵),這樣就可以成功啟動我們自己的 hello os 了。

29)centos 7的步驟是怎樣的?

乙個十幾行簡單的C程式引發的思考

今天碰到乙個很好玩的程式,我糾結了很久才弄明白。下面解釋都是在debug模式下的 在vc6.0下輸出的結果是 這下我就奇怪了,p為什麼是e9呢?毫無根據可言額.沒學過彙編的人就是傻額 我就開始除錯了,p是233 0xe9 疑問1.為什麼 p的值是e9呢?疑問2.fun的值怎麼是0x00401060呢...

linux 如何顯示乙個檔案的某幾行 中間幾行

一 從第3000行開始,顯示1000行。即顯示3000 3999行 cat filename tail n 3000 head n 1000 二 顯示1000行到3000行 cat filename head n 3000 tail n 1000 檢視檔案倒數3000 倒數2000行之間的資料 ca...

linux 如何顯示乙個檔案的某幾行 中間幾行

一 從第3000行開始,顯示1000行。即顯示3000 3999行 cat filename tail n 3000 head n 1000 二 顯示1000行到3000行 cat filename head n 3000 tail n 1000 注意兩種方法的順序 分解 tail n 1000 顯...