2、制作启动区 IPL

2019-04-14 20:13发布

将heloos.nas后半部分删掉,因为启动区只需要最初的512字节,并将文件名改为ipl.nas
ipl.nas中的内容: ; hello-os ; TAB=4 ORG 0x7c00 ; 指明程序的装载地址 ; 以下这段是标准FAT32格式软盘专用的代码 JMP entry DB 0x90 DB "HELLOIPL" ; freeparam 启动区的名称可以是任意的字符串(8字节) DW 512 ; 每个扇区(sector)的大小(必须为512字节) DB 1 ; 簇(cluster)的大小(必须为1个扇区) DW 1 ; FAT的起始位置(一般从第一个扇区开始) DB 2 ; FAT的个数(必须为2) DW 224 ; 根目录的大小(一般设成224项) DW 2880 ; 该磁盘的大小(必须是2880扇区) DB 0xf0 ; 磁盘的种类(必须是0xf0) DW 9 ; FAT的长度(必须是9扇区) DW 18 ; 1个磁道(track)有几个扇区(必须是18) DW 2 ; 磁头数(必须是2) DD 0 ; 不使用分区,必须是0 DD 2880 ; 重写一次磁盘大小 DB 0,0,0x29 ; 意义不明,固定 DD 0xffffffff ; (可能是)卷标号码 DB "HELLO-OS " ; freeparam 磁盘的名称(11字节) DB "FAT12 " ; 磁盘格式名称(8字节) RESB 18 ; 先空出18字节 ; 程序核心 entry: MOV AX,0 ; 初始化寄存器 MOV SS,AX MOV SP,0x7c00 ;0x7c00到0x7dff为启动区内容的装载地址 MOV DS,AX ;DS必须指定为0,因为它是默认的段寄存器,地址的值会加上这个值的16倍 putloop: MOV AL,[SI] ADD SI,1 ; 给SI加1 CMP AL,0 JE fin MOV AH,0x0e ; 显示一个文字 MOV BX,15 ; 指定字符颜 {MOD} INT 0x10 ; 调用显卡BIOS JMP putloop fin: HLT ; 让CPU停止;等待指令 JMP fin ; 无限循环 msg: ; 信息显示部分 DB 0x0a, 0x0a ; 换行2次 DB "hello, world!" ; freeparam DB 0x0a ; 换行 DB 0 RESB 0x7dfe-$ ; 填写0x00,直到0x001fe,是为了保证第510字节(即第0x1fe字节)开始的地 方是55AA DB 0x55, 0xaa ;如果启动区最后2字节不是0x55aa,计算机会认为盘上没有需要启动的程序。 制作一个不带扩展名的文件 “Makefile”,写入以下内容: default : ../z_tools/make.exe img #制作文件ipl.bin ipl.bin : ipl.nas Makefile #要制作文件ipl.bin,需先检查ipl.nas和Makefile这两个文件是否准备好 ../z_tools/nask.exe ipl.nas ipl.bin ipl.lst #制作文件 helloos.img 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_toolsqemufdimage0.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 这样,asm.bat,run.bat,install.bat都可以删掉了。
制作make.bat,以通过make.exe让Makefile发挥作用,make.bat中的内容为: ..z_toolsmake.exe %1 %2 %3 %4 %5 %6 %7 %8 %9 双击!cons_nt.bat,输入make_run
这里写图片描述
这里写图片描述