1.制作启动区
为了以后开发,先制作512字节的启动区,剩下的用磁盘映像管理工具制作(作者提供)
启动区只需要最初的512字节,将02_day->hellloos3文件夹中的helloos.nas后半部分截去,并重新命名为ipl.nas
在这里博主对一些值进行了更新,并命名KAY-OS ,不深入讨论每行命令作用,建议学习汇编语言
; hello-os
; TAB=4
ORG 0x7c00 ; 指明程序装载地址
; 标准FAT12格式软盘专用的代码 Stand FAT12 format floppy code
JMP entry
DB 0x90
DB "KAYOSIPL" ; 启动扇区名称(8字节)
DW 512 ; 每个扇区(sector)大小(必须512字节)
DB 1 ; 簇(cluster)大小(必须为1个扇区)
DW 1 ; FAT起始位置(一般为第一个扇区)
DB 2 ; FAT个数(必须为2)
DW 224 ; 根目录大小(一般为224项)
DW 2880 ; 该磁盘大小(必须为2880扇区1440*1024/512)
DB 0xf0 ; 磁盘类型(必须为0xf0)
DW 9 ; FAT的长度(必??9扇区)
DW 18 ; 一个磁道(track)有几个扇区(必须为18)
DW 2 ; 磁头数(必??2)
DD 0 ; 不使用分区,必须是0
DD 2880 ; 重写一次磁盘大小
DB 0,0,0x29 ; 意义不明(固定)
DD 0xffffffff ; (可能是)卷标号码
DB "KAY-OS " ; 磁盘的名称(必须为11字?,不足填空格)
DB "FAT12 " ; 磁盘格式名称(必??8字?,不足填空格)
RESB 18 ; 先空出18字节
; 程序主体
entry:
MOV AX,0 ; 初始化寄存器
MOV SS,AX
MOV SP,0x7c00
MOV DS,AX
MOV ES,AX
MOV SI,msg
putloop:
MOV AL,[SI]
ADD SI,1 ; 给SI加1
CMP AL,0
JE fin
MOV AH,0x0e ; 显示一个文字
MOV BX,15 ; 指定字符颜色
INT 0x10 ; 调用显卡BIOS
JMP putloop
fin:
HLT ; 让CPU停止,等待指令
JMP fin ; 无限循环
msg:
DB 0x0a, 0x0a ; 换行两次
DB "Welcome KAY-OS"
DB 0x0a ; 换行
DB 0
RESB 0x7dfe-$ ; 填写0x00直到0x001fe
DB 0x55, 0xaa
编译测试
我们改造asm.bat将输出的文件命名为ipl.bin,同时输出文件ipl.lst,ipl.lst可以用来查看指令如何翻译成机器语言。
另外增加makeimg.bat,它是以ipl.bin二进制文件为基础,制作磁盘映像文件的批处理文件。它利用了作者自带的磁盘映像管理工具edimg.exe。先读入一个空白的磁盘映像文件,然后在开头写入ipl.bin,最后输出磁盘映像。
从编译到测试:双击!cons 我们输入asm 进行编译,我们发现不像day01一样输出helloos.img
而是输出了ipl.bin 和 ipl.lst 打开ipl.lst
确实是每条汇编命令对应的机器码
输入makeimg生成镜像文件
输入run运行镜像文件
MakeFile的使用
使用Makefile的主要目的还是批处理,使用文本编辑器创建不带后缀的MakeFile文件。
输入以下内容
#文件生成规则
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
上述代码其实描述的是一种文件生成之间的依赖关系,生成ipl.bin需要ipl.nas和Makefile 如果都有· make工具就会自动执行接下来的一行。
我们需要make.exe工具执行代码 作者提供了make.exe 为了更好从命令行执行,制作make.bat。
用!cons打开命令行,输入make -r ipl.bin 就会启动make.exe 生成ipl.bin
如果输入make -r helloos.img 会生成helloos.img和依赖的ipl.bin
进一步简化操作
在MakeFile中增加
img :
…/z_tools/make.exe -r helloos.img
此时输入make img 就能达到和输入 make -r helloos.img一样效果
完整MakeFile 集合了run asm install 这样无论输入 make install 还是make asm 或者make install 都能直接启动虚拟机运行
代码如下:
# 默认动作
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
注意画红线的几个是初始时必备的四个文件放到和tolset同级文件夹里。
第二天的内容就是这样啦!