30天自制操作系统第3天harib00a

30天自制操作系统

第3天进入32位模式并导入 C 语言

制作真正的IPL(Initial Program Loader,启动程序装载器)

harib00a
准备材料(windows环境)
开始实验
  1. 在tolset文件夹下创建子文件侠harib00a;

  2. 打开记事本,输入以下代码并另存为 !cons_nt.bat文件(windows 批处理),存放在harib00a文件夹中;

cmd.exe

ps:当然也可以直接使用 win + r 快捷键也可以,不过最好还是创建一个比较好。因为以后打开时不需要再麻烦了。

  1. 打开 VC code 创建 ipl.nas 文件,输入以下代码,也存放的harib00a中;
; hello-os
; TAB = 4

		ORG		0x7c00				; 指明程序的装载地址

; 以下的记述用于标准FAT12格式的软盘

		JMP		entry
		DB		0x90
		DB		"HARIBOTE"			; 启动区的名称可是任意的字符串
		DW		512					; 每个扇区(sector)的大小(必须为512字节)
		DB		1					; 簇(cluster)的大小(必须为1个扇区)
		DW		1					; FAT12的起始位置(一般从第一个扇区开始)
		DB		2					; FAT的个数(必须为2)
		DW		224					; 根目录的大小(一般设成224项)
		DW		2880				; 该磁盘的大小(必须是2880扇区)
		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		"HARIBOTEOS "		; 磁盘的名称(11字节)
		DB		"FAT12   "			; 磁盘格式名称
		RESB	18					; 先空出18字节

; 程序主体

entry:
		MOV		AX,0				; 初始化寄存器
		MOV		SS,AX
		MOV		SP,0x7c00
		MOV		DS,AX

; 读光盘

		MOV		AX,0X0820
		MOV		ES,AX
		MOV		CH,0				; 柱面0
		MOV		DH,0				; 磁头0
		MOV		CL,2				; 扇区2

		MOV		AH,0x02				; AH=0x02 : 读盘
		MOV		AL,1				; 1个扇区
		MOV		EX,0
		MOV		DL,0x00				; A驱动器
		INT		0x13				; 调用磁盘BIOS
		JC		error

; 虽然读完了,但是因为暂时没有要做的事所以停止等待指令

fin:
		HLT							; 让CPU停止,等待指令
		JMP		fin					; 无限循环

error:
		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

msg:
		DB		0x0a, 0x0a			; 换行两次
		DB		"load error"
		DB		0x0a
		DB		0
		RESB	0x7dfe-$
		DB		0x55, 0xaa
  1. 打开记事本,输入以下代码,另存为 make.bat, 同样放到harib00a中;
..\z_tools\make.exe %1 %2 %3 %4 %5 %6 %7 %8 %9
  1. 创建 Makefile,并输入以下代码并存放到harib00a中;
TOOLPATH = ../z_tools/
MAKE     = $(TOOLPATH)make.exe -r
NASK     = $(TOOLPATH)nask.exe
EDIMG    = $(TOOLPATH)edimg.exe
IMGTOL   = $(TOOLPATH)imgtol.com
COPY     = copy
DEL      = del

# 默认操作

default :
	$(MAKE) img

# 文件生成规则

ipl.bin : ipl.nas Makefile
	$(NASK) ipl.nas ipl.bin ipl.lst

haribote.img : ipl.bin Makefile
	$(EDIMG)   imgin:../z_tools/fdimg0at.tek \
		wbinimg src:ipl.bin len:512 from:0 to:0   imgout:haribote.img

# 命令

asm :
	$(MAKE) ipl.bin

img :
	$(MAKE) haribote.img

run :
	$(MAKE) img
	$(COPY) haribote.img ..\z_tools\qemu\fdimage0.bin
	$(MAKE) -C ../z_tools/qemu

install :
	$(MAKE) img
	$(IMGTOL) w a: haribote.img

clean :
	-$(DEL) ipl.bin
	-$(DEL) ipl.lst

src_only :
	$(MAKE) clean
	-$(DEL) haribote.img

编译及运行
  1. 双击 !cons_nt.bat,并在打开的命令行中输入 make run
    在这里插入图片描述

  2. VMware中运行结果,如下图
    在这里插入图片描述

ps: 结果就是这样,因为本次实验的目的是制作真正的IPL,而且什么都没输出。
好的今天到这里harib00a就张结束了,请大家多多支持!!!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值