第1天 從計算機結構到匯編程序入門
1 先動手操作
與其啰啰嗦嗦地寫上一大堆,還不如實際動手開發來得輕松,我們這就開始吧。而且我們一上來就完全拋開前面的說明,既不用C語言,也不用匯編程序,而是采用一個迥然不同的工具來進行開發(笑)。
■■■■■
有一種工具軟件名為“二進制編輯器”(Binary Editor),是一種能夠直接對二進制數進行編輯的軟件。我們現在要用它來編輯出下圖這樣的文件。
也許有人會說“這樣的工具我從來沒有見過呀”,沒關系,下面我們來詳細地介紹一下。
首先打開下面這個網頁:
http://www.vcraft.jp/soft/bz.html

用BZ打開helloos.img時的畫面
點擊“在此下載”(Download)的鏈接,下載文件Bz1621.lzh(在此非常感謝c.mos公司無償公開這么好的軟件)。當你讀到本書的時候,也許會有新的版本發布,所以文件名可能會有所不同。接下來,安裝下載下來的文件,然后雙擊啟動Bz.exe程序。如果不能正常啟動的話,可以參考上面網頁的“★注意★”一項,按照上面的安裝指導進行操作。
順利啟動的話屏幕上會出現如下畫面。

BZ起動時的畫面
好,讓我們趕緊來輸入吧,只要從鍵盤上直接輸入EB4E904845……就可以了,簡單吧。其中字符之間的空格是這個軟件在顯示時為方便閱讀自動插入的,不用自己從鍵盤上輸入。另外,右邊的.N.HELLOIPL……部分,也不用從鍵盤輸入,這是軟件自動顯示的。可能版本或者顯示模式不一樣的時候,右側顯示的內容會與下面的截圖有所不同。不過不用往心里去,這些內容完全是錦上添花的東西,即使不一樣也沒事。

輸入到000037位置時的畫面
從000090開始后面全都是00,一直輸入到最后168000這個地址。如果一直按著鍵盤上的“0”不放手的話,畫面上的0就會不停地增加,但因為個數相當多,也還是挺花時間的。如果家里有只貓的話,倒是可以考慮請它來幫忙按住這個鍵(日本的諺語:想讓貓來搭把手,形容人手不足,連貓爪子都想借用一下),或者也可以干脆就用透明膠把這個鍵粘上。

168000附近的畫面
因為一下子輸入到最后實在是挺花時間的,大家也許想保存一下中間結果,這時可以從菜單上選擇“文件”(File)→“另存為”(Save As),畫面上就會彈出保存文件的對話框。我們可以隨便取個名字進行保存,筆者推薦使用“helloos.img”。當想要打開保存過的文件時,首先要啟動Bz.exe,從菜單上選擇“文件”(File)→“打開”(Open),然后選擇目標文件,這樣原來保存的內容就能顯示出來了。可是這個時候不管我們怎么努力按鍵盤,它都一點反應也沒有。這是怎么回事?難道必須要一次性輸入到最后嗎?這個大家不必擔心,其實只要從菜單里選擇“編輯”(Edit)→“只讀”(Read Only)就可以進入編輯狀態啦。好了,我們繼續輸入。
如果家里的貓自由散漫慣了,不肯幫忙,而大家又不想用透明膠粘鍵盤這種土方法的話,不妨這樣:用鼠標選擇一部分0,然后從菜單選擇“編輯”(Edit)→“復制”(Copy)。簡簡單單復制粘貼幾次就可以大功告成了,這工具還真方便呀。
哦,對了,差點忘記一件重要的事——在地址0001F0和001400附近還有些地方不全是00,要像下圖那樣把它們也改過來,然后整體檢查一下,確認沒有輸入錯誤。

0001F0附近

001400附近
下面,我們把輸入的內容保存下來就完成了軟盤映像文件的制作,這時查看一下文件屬性,應該能看到文件大小正好是1474560字節(=1440×1024字節)。然后我們將這個文件寫入軟盤(具體后述),并用它來啟動電腦。如下所示,畫面上會顯示出“hello, world”這個字符串。目前的程序雖然簡單,但畢竟一打開電腦它就能夠自動啟動,還能在屏幕上顯示出一句話來,已經小小成功了哦。不過,我們現在還沒有結束這個程序的方法,所以想要結束的時候,只能把軟盤取出來后切斷電腦電源,或者重新啟動。

至于最關鍵的往磁盤上寫映像文件的方法,筆者已經預先準備好了一個程序。在介紹它的使用方法之前,我們先把筆者準備的工具全都安裝進來吧,這樣后面講解起來比較省事。下面我們就來看怎么安裝這些工具。
■■■■■
打開附帶光盤,里面有一個名為tolset的文件夾,把這個文件夾復制到硬盤的任意一個位置上。現在里面的東西還不多,只有3MB左右,不過以后我們自己開發的軟件也都要放到這個文件夾里,所以往后它會越來越大,因此硬盤上最好留出100MB左右的剩余空間。工具安裝到此結束,我們既不用修改注冊表,也不用設定路徑參數,就這么簡單。而且以后不管什么時候,都可以把這整個文件夾移動到任何其他地方。用這些工具,我們不僅可以開發操作系統,還可以開發簡單的Windows應用程序或OSASK應用程序等。
接下來我們打開剛才安裝的tolset文件夾,在文件夾的名字上單擊鼠標右鍵,從彈出的菜單上選擇“新建”(New)→“文件夾”(Folder)。畫面上會顯示出缺省的文件夾名“新建文件夾”(New Folder),我們要把它改為“helloos0”,并把前面保存的映像文件helloos.img復制到這個文件夾里。另外,剛才安裝的tolset文件夾下有個名為z_new_w的子文件夾,其中有!cons_9x.bat和!cons_nt.bat這兩個文件,要把它們也復制粘貼到helloos0文件夾里。
接著,在文件夾helloos0里單擊鼠標右鍵,從彈出的菜單中選擇“新建”(New)→“文本文件”(Text Document),并將文件命名為“run.bat”,回車后屏幕上會顯示“如果改變文件擴展名,可能會導致文件不可用。確實要更改嗎?”的對話框,我們選擇“是”,創建run.bat文件。然后在run.bat文件名上單擊鼠標右鍵,在彈出的菜單上選擇“編輯”(Edit),輸入下面內容并保存。
run.bat
copy helloos.img ..\z_tools\qemu\fdimage0.bin ..\z_tools\make.exe -C ../z_tools/qemu
然后按照同樣的步驟,創建install.bat,并將下列內容輸入進去。
install.bat
..\z_tools\imgtol.com w a: helloos.img
其實以上步驟創建的所有文件都已經給事先給大家準備好了,就放在附帶光盤中名為projects\01_day\helloos0的子文件夾里。所以大家只要把光盤上的helloos0復制下來,粘帖到硬盤的tolset文件夾里,所有的準備工作就瞬間完成了。
■■■■■
好了,現在我們就來把這個有點像操作系統的軟件安裝到軟盤上吧。隨便從附近的小店里買片新軟盤來,在Windows下格式化一下(格式化方法:把軟盤插入磁盤驅動器后打開“我的電腦”,在“3.5吋軟盤”(3.5inches Floppy)A:上單擊鼠標右鍵,再選擇“格式化”(Format)即可)。對了,這個時候不要選擇“快速格式化”選項。然后用鼠標左鍵雙擊helloos0文件夾里的!cons_nt.bat文件(Windows95/98/Me的用戶需要雙擊!cons_9x.bat),屏幕上就會出現一個命令行窗口(console)。我們先仔細確認一下軟盤是否已經插好,然后在命令行窗口上輸入“install”并回車,這樣安裝操作就開始了。稍候片刻,等安裝程序執行完畢,我們的操作系統啟動盤也就做好了。完成安裝之后,也可以關閉剛才的命令行窗口了。
現在我們就用這張操作系統啟動軟盤來啟動一下電腦試試吧,肯定跟剛才一樣,會顯示出“hello, world”的字樣來。
在這里要提醒大家幾點:一是軟盤雖然不要求必須用全新的,但如果太舊的話,在讀寫過程中容易出問題,所以最好還是不要用太舊的軟盤。另外,就算是新盤,如果太便宜的話有時也用不了,若是發現有問題,就需要再去買一張。最后一點,一旦格式化或者往軟盤內安裝操作系統,就會把里面原有的東西全部覆蓋掉,所以大家千萬不要用存有重要文件的軟盤來嘗試哦。
■■■■■
看到這里,大家可能會有各種問題:“這些我都明白,可是既要專門去買張軟盤,又要重啟電腦,實在太麻煩了,難道就沒有什么更簡單的方法嗎?”、“我家的電腦根本就沒有軟驅呀”、“我的電腦沒有什么重啟按鈕,也沒有關電源的開關,一旦啟動了這個奇怪的操作系統,就沒法終止啦”。其實這些問題筆者已經考慮到了,所以特意準備了一個模擬器。我們有了這個模擬器,不用軟盤,也不用終止Windows,就可以確認所開發的操作系統啟動以后的動作,很方便呢。
使用模擬器的方法也非常簡單,我們只需要在用!cons_nt.bat(或者是!cons_9x.bat)打開的命令行窗口中輸入“run”指令就可以了。然后一個名叫QEMU的非常優秀的免費PC模擬器就會自動運行。QEMU不是筆者開發的,它是由國外的一些天才們開發出來的。感謝他們!
“我按照你說的一步一步地做了一遍,可是不行呀!怎么回事呢?”會遇到這種情況的人肯定是個非常認真的人,可能真的完全按照上面步驟用二進制編輯器自己做了一個helloos.img文件出來。出現這種問題,肯定是因為文件中有輸入錯誤的地方,雖然筆者不知道具體錯在哪兒,不過建議最好檢查一下000000到000090,以及0001F0前后的數據。如果還是不行的話,那就干脆用附帶光盤中筆者做的helloos.img好了。
可能有些人嫌麻煩,懶得自己輸入,上來就直接使用光盤里的helloos.img文件,這當然也沒什么不可以;但筆者認為這種體驗(一點一點地輸入,再千辛萬苦地糾錯,最終功夫不負有心人取得成功)本身更難能可貴,建議大家最好還是親自嘗試一下。
■■■■■
就這樣,我們沒有去改造現成的操作系統,而是從零開始開發了一個,并讓它運轉了起來(當然,如果別人承認這是個操作系統的話)。這太了不起了!大家完全可以在朋友們面前炫耀一番了。僅學習了幾個小時開發的一個初學者,就能從零開始做出一個操作系統,這本書不錯吧(笑)?這次我們考慮到從鍵盤直接輸入比較麻煩,所以就只讓它顯示了一條消息;如果能再多輸入一些內容的話,那僅用這種方法就可以開發任意一個操作系統(當然最大只能到1440KB)。現在唯一的問題是,我們還不知道之前輸入的那些“EB 4E 90 48 45……”到底是什么意思(而這也正是我們所面臨的最大問題)。今天剩下的時間,以及以后的29天時間里,我們都會講解這個問題。
- 操作系統實用教程(Linux版)
- Mastering vRealize Operations Manager(Second Edition)
- Windows Server 2019 Cookbook
- Mastering ElasticSearch
- 零起點學Linux系統管理
- 精解Windows8
- 混沌工程實戰:手把手教你實現系統穩定性
- macOS效率手冊
- 零基礎學鴻蒙PC:新一代國產操作系統
- Linux系統最佳實踐工具:命令行技術
- Office 365 User Guide
- Linux操作系統案例教程(第2版)
- 基于Arduino的嵌入式系統入門與實踐
- Responsive Web Design with AngularJS
- Mastering AWS CloudFormation