最近买了本书《30天自制操作系统》,打算跟着这本书来对操作系统有个更为深入的理解。
这个系列的博客(其实所有博客基本也都是)主要还是作为一个学习的笔记来用的,或者说备忘,所以可能排版也比较随意,大家不要太介意哈~
第一天主要是安装相关的软件,以及学会用模拟操作系统的运行。我们希望能够在虚拟机中打出QEMU。
第二天学习到的主要是寄存器的一些知识以及Makefile的基本知识。
从第一天来看,总的来说,我们所做的事情是:
helloos.nas ==> 利用nask.exe编译 ==> helloos.img ==> 在qemu中运行。
这里要用到两个软件:nask.exe以及qemu。
其实主要还是熟悉整个操作流程而已,更多的还是软件的使用,并没有太多理论上的知识收获。(就我个人来说)
第二天则比较有意思。
首先是helloos.nas文件的分析。
由于这学期也是在学习计算机组成原理,所以汇编学起来也还比较快。
值得留意的一些指令是:
ORG 0x7c00 ;指明程序的装载地址
DB是define byte,1B;
DW是define word,2B;
DD是define double-word,4B
RESB是reserve byte;
在RESB 0x1fe-$中,$是指前面所已经输出的字节,所以这句指令是说将该文件后面的全部保留下来。
然后还有寄存器们(16b,分割线后面的是8b):
AX == accumulator | AL, AH
CX == counter | BL, BH
DX == data | CL, CH
BX == base | DL, DH
SP == stack pointer
BP == base pointer
SI == source index
DI == destination index
ES == extra segment
CS == code segment
SS == stack segment
DS == data segment
FS, GS:无名
还有一些需要记一下的是:
直接输出信息:
MOV SI, msg ; Source index
loop:
MOV AL, [SI]
ADD SI, 1
CMP AL, 0
JE fin
; call BIOS
MOV AH, 0x0e
MOV BX, 15
INT 0x10
JMP loop
msg:
DB 0x0a, 0x0a
DB "Hello, xavier!"
DB 0x0a
DB "How are you?"
DB 0x0a
DB 0
主要还是从
http://community.osdev.info/?%28AT%29BIOS 可以找到更多信息。(日文!= =||)
0x00007c00~0x00007dff:启动区内容的装载地址
helloos.nas ==> helloos.img ==> 在qemu中运行:
../z_tools/nask.exe helloos.nas
../z_tools/make.exe -r helloos.img
copy helloos.img ..\z_tools\qemu\fdimage0.bin
../z_tools/make.exe -C ../z_tools/qemu
最后就是一些Makefile的入门知识。
语法就是
ipl.bin: ipl.nas Makefile
../z_tools/nask.exe ipl.nas ipl.bin ipl.lst
要制作ipl.bin就需要文件ipl.nas以及Makefile,需要执行语句:
../z_tools/nask.exe ipl.nas ipl.bin ipl.lst
Makefile能够分析文件依赖性。
常用的大概是这样:
default:
../z_tools/make.exe img
ipl.bin: ipl.nas Makefile
../z_tools/nask.exe ipl.nas ipl.bin ipl.lst
helloos.img: ipl.bin Makefile
../z_tools/edimg.exe imgin:../z_tools/fdimg0at.tek \
wbinimg src:ipl.bin len:512 from:0 to:0 imgout:helloos.img
img:
../z_tools/make.exe -r helloos.img
asm:
../z_tools/make.exe -r ipl.bin
run:
../z_tools/make.exe img
copy helloos.img ..\z_tools\qemu\fdimage0.bin
../z_tools/make.exe -C ../z_tools/qemu
install:
../z_tools/make.exe img
../z_tools/imgtol.com w a: helloos.img
clean:
-del ipl.bin
-del ipl.lst
没错,基本上就这么多了~