從計算機結構到匯編程序入門
最近受知乎影響,一股腦熱買了這本《30天自制操作系統》的書,該書是日本一位大牛寫的。看了前20頁,還是有些東西可以琢磨的,雖然接觸計算機也7年了,慚愧在於大多都只停留在想法,而未動手去好好實踐,大忌大忌。寫這個系列章節也是希望通過這樣的方式來督促自己。工作幾個月的感受其實就是:凡是能夠追求百分百的一定不能懈怠,不能因為你已經取得第一而放棄繼續追求完美。兩年前跟導師辯論過,當時我還是很不理解,“都已經達到第一了,為什么還要去花十倍的努力去做的完美”,這里再次感謝導師的教誨。一鞠躬。
廢話多了,言歸正傳。首先根據書中第一天的任務下載個二進制編輯器,https://www.vcraft.jp/soft/bz.html,這里直接放工具在百度雲盤里。https://pan.baidu.com/s/1I1FoGeB-BRLFkbX3Pv8fnA
書中介紹該工具用於對二進制進行編輯,可以生成.img文件。之前搞KVM、OpenStack就經常跟.img文件打交道,這次終於可以試一試自己寫一個.img了(nice臉)。
以下代碼是該書作者自己寫的匯編編譯器做的一個.img文件的生成腳本。該代碼主要是節省手工編寫17萬行的二進制(書中提到),這也是編譯器干的事。至於匯編代碼中每個語句的含義,需要后續章節在體會體會才行。
; hello-os ; TBA=4 DB 0xeb, 0x4e, 0x90 DB "HELLOIPL" DW 512 DB 1 DW 1 DB 2 DW 224 DW 2880 DB 0xf0 DW 9 DW 18 DW 2 DD 0 DD 2880 DB 0,0,0x29 DD 0xffffffff DB "HELLO-OS " DB "FAT12 " RESB 18 ; 程序主體 DB 0xb8, 0x00, 0x00, 0x8e, 0xd0, 0xbc, 0x00, 0x7c DB 0x8e, 0xd8, 0x8e, 0xc0, 0xbe, 0x74, 0x7c, 0x8a DB 0x04, 0x83, 0xc6, 0x01, 0x3c, 0x00, 0x74, 0x09 DB 0xb4, 0x0e, 0xbb, 0x0f, 0x00, 0xcd, 0x10, 0xeb DB 0xee, 0xf4, 0xeb, 0xfd ; 信息顯示部分 DB 0x0a, 0x0a DB "hello, world" DB 0x0a DB 0 RESB 0x1fe-$ DB 0x55, 0xaa ; 啟動區以外部分的輸出 DB 0xf0, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00 RESB 4600 DB 0xf0, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00 RESB 1469432
根據書中的教程,第一個操作系統的hello world可以輸出運行了。(nice)