《30天自制操作系统》学习笔记_day01
《30天自制操作系统》学习笔记_day01
1.二进制编辑器查看操作系统源代码并编写
博主未采用书中推荐二进制编辑器,而是使用Notepad++和HexEditor插件。
参考:新版Notepad++加十六进制查看的插件HexEditor
000000:HELLOIPL启动区的名称可以是任意的字符串(8字节)
启动区: 软盘的第一个扇区为启动区,计算机读取软盘512个字节为一个扇区单位。软盘大小1440KB共2880个扇区,计算机从第一扇区读取内容,如果最后两个字节内容不是0x55AA计算机会认为没有启动程序。
000020:HELLO-OS磁盘的名称(11字节)
000030:FAT12磁盘格式名称(8字节)
在第9行二进制数据后的数据,全部都是0000 0000 0000 0000,这些数据仅仅是为了凑够1440kb数据,凑够一个3.5英寸软盘大小。
2.运行软盘映像
img后缀的文件
在作者给出的OS文件中day1->helloos0 的helloos.img是用上述写机器码方法写的操作系统映像文件,在Vmware虚拟机中可以直接运行。
新建虚拟机
在虚拟机设置中删去CD/DVD设置,而选用软盘设置,软盘文件地址及上述helloos0中的helloos.img
启动虚拟机
3.初识汇编代码
用Notepad++在helloos1中打开helloos.nas,发现是汇编程序,
其中RESB指令是"reserve byte“的简写表示空出来字节,nask汇编程序会自动填上0x00,这样就省去字节写18万行代码。这段nask代码定义的字节数刚好1440KB也就是我们操作系统的大小。
编译运行
将汇编程序编译成映像文件需要使用作者提供的程序软件,在tolset文件下新建helloos1文件夹,将刚刚的helloos.nas复制进去
我们在helloos1文件夹下:
新建文本,输入文本 cmd.exe,保存文件,文件名修改为!cons_nt.bat。
新建文本输入: …\z_tools\nask.exe helloos.nas helloos.img 文件名修改为asm.bat,
新建文本输入:
copy helloos.img …\z_tools\qemu\fdimage0.bin
…\z_tools\make.exe -C …/z_tools/qemu
文件名修改为run.bat。
!cons_nt.bat的功能是在当前目录打开cmd命令行,
asm.bat的功能是使用helloos1文件夹的同级文件夹z_tools文件夹下的nask.exe根据helloos.nas生成helloos.img。
run.bat的功能是复制当前生成的hellloos.img镜像文件,使用qemu运行。
打开!cons_nt.bat在命令行中输入asm.bat可以发现在同级目录下生成了helloos.img
继续在命令行中输入run.bat会使用作者的qume虚拟机运行(当然也可以按照上文的使用Vmvare虚拟机)
加工润色汇编代码
作者修改完的汇编代码位于helloos2文件下
因为注释是日文的,所以博主去Github上找了中文版的。
相当于使汇编程序更加有逻辑性。
有一行命令需要注意,在信息显示部分中的RESB 0x1fe-$ 预留字节命令,$ 变量可以告诉我们当前行数的字节数,在这个程序里前面已经输入了132个字节,所以这里的 $ 就是132因此用 0x1fe-132得到378字节,连续输出378个字节的0x00,保证从0x1f字节(510)开始输出55AA。
这样的好处是我们可以修改hello world的输出内容,而不必考虑因为输出内容变化而带来的字节数问题。