30天自製作業系統 學習筆記2

2022-09-20 06:09:15 字數 1392 閱讀 6895

第二天的內容就比第一天要有趣多了。

首先解釋了一下helloos的彙編**,**如下:

開始的時候一直不知道64行打下是幹什麼用的,注釋寫的是啟動區以外部分的輸出。我隨意改了很多,也沒見到輸出的run有什麼不同。加上後來看的內容,覺得這段就是沒用的。現在寫的這個啟動區的**,更本沒用盡到本職工作,而是僅僅輸出了hello, world而已。所以對啟動區以外的東西,無法操控,自然,以外的東西都木有用了。

org    0x7c00

org是在nask開始執行的時候,會告訴它這些機器指令裝載到記憶體中的哪些位址(cpu放不下全部),而後面的0x7c00是被intel那幫老頭子規定的,具體歷史原因未知~

0x00007c00-0x00007dff  記憶體中,是啟動區內容的裝載位址

$也變成了將要讀入的記憶體位址。

不同名稱的暫存器有不同的用途,具體見書。

書中介紹的主要是16位的暫存器,提到的8位暫存器其實只是16位暫存器裡的高8位和低8位抽象出來的乙個邏輯概念。還略提了一下32位暫存器。

彙編裡所有的標號都是單純的數字,對應著指定的記憶體位址(標號所在地的位址)

記憶體離cpu很遠(10cm),相比於cpu中的半導體。

mov byte [678],123

mov word [678],123

mov dword [678],123

mov指令的元資料和目的資料的資料必須位數相同,否則會因找不到相對應的機器語言而出錯。

只有bx, bp, si, di可以用來指定記憶體位址。其餘不行是因為cpu沒有相應的處理電路。

int    0x10

bios功能很多,是為作業系統開發人員準備的各種函式的集合。而int就是用來呼叫這些函式的指令。0x10代表是16號函式(控制顯示卡)。函式的引數存於指定暫存器中。

在玩helloos03的時候,我改了改**,想在結尾迴圈輸出't'這個字元。一開始頻繁出錯,最終發現,程式要正確跑的話,無論怎樣不能影響原有的結構(**加在resb0x7dfe-$前還是後就影響很大)。效果圖如下:

還講了講make和makefile. 雖然接觸linux的時候已經了解過,不過真的用在實際中還是少數。這次用了之後對這兩個的理解加深了很多。

貌似明天開始要用c了,速度要大大加快了估計。

《30天自製作業系統》學習筆記 helloos0

本文 一 軟體 檔案 說明 1.cons nt.bat檔案 這是一種批處理檔案,可以直接執行指令。本檔案在這裡的作用相當於cmd,用記事本檢視其內容是,也即是cmd。2.cons 9x.bat檔案 和 cons nt.bat作用相同,只是用於windows95平台,所以相應的程式為command。3...

《30天自製作業系統》學習筆記(一)

一 組合語言 一 暫存器 ax accumulator 累加暫存器 al ah cx counter 計數暫存器 cl ch dx data 資料暫存器 dl dh bx base 基址暫存器 bl bh sp stack pointer 棧指標暫存器 bp base pointer 基址指標暫存器...

《30天自製作業系統》學習筆記(三)

一 指標相關 目的 達到效果 mov byte i i 0x0f 使用c語言直接操作記憶體 做法 int i char p p char i p i 0x0f 二 顯示控制 一 色號設定。採用調色盤模式,有程式設計師自己指定顏色編號。二 調色盤使用步驟。禁止中斷 將想要設定的調色盤號碼寫入0x03c...