《30天自制操作系统》笔记(01)——hello bitzhuwei's OS!
最初的OS代码
; hello-os
; TAB=4 ORG 0x7c00 ; 指明程序的装载地址 ; 以下这段是标准FAT12格式软盘专用的代码 JMP entry
DB 0x90
DB "HELLOIPL" ; freeparam 启动区的名称可以是任意的字符串(8字节)
DW ; 每个扇区(sector)的大小(必须为512字节)
DB ; 簇(cluster)的大小(必须为1个扇区)
DW ; FAT的起始位置(一般从第一个扇区开始)
DB ; FAT的个数(必须为2)
DW ; 根目录的大小(一般设成224项)
DW ; 该磁盘的大小(必须是2880扇区)
DB 0xf0 ; 磁盘的种类(必须是0xf0)
DW ; FAT的长度(必须是9扇区)
DW ; 1个磁道(track)有几个扇区(必须是18)
DW ; 磁头数(必须是2)
DD ; 不使用分区,必须是0
DD ; 重写一次磁盘大小
DB ,,0x29 ; 意义不明,固定
DD 0xffffffff ; (可能是)卷标号码
DB "HELLO-OS " ; freeparam 磁盘的名称(11字节)
DB "FAT12 " ; 磁盘格式名称(8字节)
RESB ; 先空出18字节 ; 程序核心 entry:
MOV AX, ; 初始化寄存器
MOV SS,AX
MOV SP,0x7c00
MOV DS,AX
MOV ES,AX MOV SI,msg
putloop:
MOV AL,[SI]
ADD SI, ; 给SI加1
CMP AL,
JE fin
MOV AH,0x0e ; 显示一个文字
MOV BX, ; 指定字符颜色
INT 0x10 ; 调用显卡BIOS
JMP putloop
fin:
HLT ; 让CPU停止;等待指令
JMP fin ; 无限循环 msg: ; 信息显示部分
DB 0x0a, 0x0a ; 换行2次
DB "hello, bitzhuwei's OS!" ; freeparam
DB 0x0a ; 换行
DB RESB 0x7dfe-$ ; 填写0x00,直到0x001fe DB 0x55, 0xaa ; 以下是启动区以外部分的输出 DB 0xf0, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00
RESB
DB 0xf0, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00
RESB
02helloos.nas
虚拟机加载helloos.img
下载(30天自制操作系统光盘.rar),解压。
将"OS\projects\01_day\helloos1"文件夹复制到"OS\tolset"文件夹下,如下图所示。
进入"OS\tolset\helloos1"文件夹,删除"helloos.nas"文件,然后将上表中的"02helloos.nas"内容保存到此处,并重命名为"helloos.nas"。(即更新helloos.nas文件的内容)
双击"!cons_9x.bat"(若后续操作失败,则双击"!cons_nt.bat"重试),在弹出的命令行窗口中输入"asm",回车;然后输如"run",回车。
之后你就可以看到QEMU这个虚拟机加载启动了(以helloos.nas为源代码生成的)helloos.img这个及其简单的操作系统,如下图所示。
真机加载helloos.img
刚刚是用虚拟机启动的helloos.img这个操作系统,下面介绍如何用物理机器加载启动之。
制作启动盘
首先,准备一个U盘,保证里面的数据你都不需要了。
然后,下载一个UltraISO软件。运行之,打开刚刚生成的helloos.img,如下图所示。
然后,使用菜单项"启动-写入硬盘映像…",如下图所示。
在弹出的窗口中,确定"硬盘驱动器"中选中的是你准备好的U盘,然后点击"写入"按钮,稍候即可,如下图所示。
真机启动
刻录成功了,就是说启动盘做好了。下面就重启电脑,然后选择从U盘启动,你就可以看到真机启动helloos.img了。除了一些细节不同外,和虚拟机加载helloos.img的情况基本一致。
总结
以后继续编写OS用虚拟机测试比较方便。
操作系统的hello world就算完成了。