第二天的內容就比第一天要有趣多了。
首先解釋了一下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...