《30天自制操作系统》学习笔记_day02

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同级文件夹里。

第二天的内容就是这样啦!

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值