从计算机结构到汇编程序入门
最近受知乎影响,一股脑热买了这本《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)