30天自制操作系统第2天helloos3

403 阅读2分钟

本文转载CSDN:blog.csdn.net/zl182062088…

helloos3

准备工作

代码编辑

; hello-os
; TAB=4

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

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

		JMP		entry
		DB		0x90
		DB		"HELLOIPL"		; 可以自由的写引导扇区的名称
		DW		512				; 每个扇区的大小(必须是512)
		DB		1				; 簇的大小(必须是1个扇区)
		DW		1				; FAT从哪里开始(一般都是从第1扇区开始)
		DB		2				; FAT的个数(必须为2)
		DW		224				; 根目录的大小(通常设为224条目)
		DW		2880			; 磁盘大小(必须为2880扇区)
		DB		0xf0			; 磁盘种类(必须为0xf0)
		DW		9				; FAT的长度(必须为9扇区)
		DW		18				; 每个磁道有多少扇区(必须是18)
		DW		2				; 磁头数(必须是2)
		DD		0				; 不使用分区,必须是0
		DD		2880			; 磁盘大小再写一遍
		DB		0,0,0x29		; 固定
		DD		0xffffffff		; (可能是)卷码标号
		DB		"HELLO-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		; 换行2次
		DB		"hello, world"
		DB		0x0a			; 换行
		DB		0

		RESB	0x7dfe-$		; 填定0x00,直到0x001fe
		
		DB		0x55, 0xaa

; 以下是启动区以下部分的输出

		DB		0xf0, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00
		RESB	4600
		DB		0xf0, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00
		RESB	1469432

编译及运行

  • 在tolset文件夹中新建子文件夹helloos2;
  • 复制 tolset 文件夹中子文件夹z_new_w中,!cons_9x.bat和!cons_nt.bat文件到helloos2文件夹内;
  • 打开记事本输入以下代码,并另存为asm.bat且放在helloos2文件夹内:
..\z_tools\nask.exe helloos.nas helloos.img
  • 同上,打开记本输入以下代码,并保存为run.bat且放在helloos2文件夹内:
copy helloos.img ..\z_tools\qemu\fdimage0.bin
..\z_tools\make.exe -C ..\z_tools\qemu
  • 以上,文件都准备好了,下面开始运行。
    1. 点击运行!cons_nt.bat,出现如下界面:
      在这里插入图片描述
    2. 在打开的命令行程序中输入 asm 并回车,生成helloos.img文件:
      在这里插入图片描述
    3. 接着输入 run 并回车输出以下界面:
      在这里插入图片描述
  • 接下来使用VMware-Workstation运行。
    1. 创建虚拟机
      在这里插入图片描述
      因为大多所以就在这里一一发了,直接上链接:juejin.cn/post/684490… 2.运行虚拟机,会输出以下界面
      在这里插入图片描述
      好了,以上是30天自制操作系统第2天helloos3,请大家多多支持!!!