1.编辑器用Notepad++就行
2.代码核心区解释

(1)ORG 0x7c00h是这段代码的拷贝在内存中的首地址
(文件编译后存在磁盘里,BIOS从磁盘的启动盘引导)
(2)接着就是初始化各种寄存器
(3)设置SI为msg的地址
(4)putloop也是一个地址,putloop:到jmp putloop指令为止这段汇编指令是从msg所在的内存地址一次取8位,即一个字节到al寄存器中,然后设置显示的格式,其中的CMP AL,0是看有没有取完字符串,取完就跳转到fin,让CPU待机。
(5)int 10是调用显卡BIOS
3.书中所说的制作启动区,就是我们写的这些代码
电脑开机过程:
(1)按下开机键,CPU 将 PC 寄存器的值强制初始化为 0xffff0,这个位置是 BIOS 程序的入口地址(一跳)
(2)该入口地址处是一个跳转指令,跳转到 0xfe05b 位置,开始执行(二跳)
(3)执行了一些硬件检测工作后,最后一步将启动区内容加载到内存 0x7c00,并跳转到这里(三跳)
(4)启动区代码主要是加载操作系统内核,并跳转到加载处(四跳)
经过这连续的四次跳跃,终于来到了操作系统的世界了,剩下的内容,可以说是整个操作系统课程所讲述的原理,分段、分页、建立中断、设备驱动、内存管理、进程管理、文件系统、用户态接口等等。
而我们所写的这段启动区代码会被加载到内存为0x7c00h的内存区域,然后PC设置为0x7c00h,开始执行一条条指令
BIOS实模式下的内存分布如图(感谢低并发编程公众号的作者)

我们制作的磁盘映像文件就是启动盘(启动盘最后两个字节为0x55, 0xaa,就是BIOS用来查找启动盘的标志),而ipl.bin文件只是名字不一样,本质也是磁盘映像文件,制作磁盘映像文件会根据你定义的磁盘属性来制作(就是核心代码之前那段定义指令)
4.makefile入门
make.exe是一个直接编译(一步到位)的程序
输入命令make run直接得到镜像文件
(1)首先用make.bat这个批处理程序调用make.exe执行(run为传递的参数)
…\z_tools\make.exe %1 %2 %3 %4 %5 %6 %7 %8 %9
(2)然后make.exe会根据参数找到makefile中的执行命令执行相应指令
这是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
asm :
…/z_tools/make.exe -r ipl.bin
img :
…/z_tools/make.exe -r helloos.img
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
src_only :
…/z_tools/make.exe clean
-del helloos.img
本文详细介绍了自制操作系统的初始步骤,包括使用Notepad++编辑代码,理解启动区代码的作用,了解BIOS加载过程,以及通过makefile进行编译和运行。在启动区代码中,涉及了初始化寄存器、显示字符和调用显卡BIOS等关键操作。通过连续的四次跳跃,最终进入操作系统的世界。同时,文章也解析了makefile的工作原理,用于生成ipl.bin和helloos.img等镜像文件。
1900





