《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就算完成了。

点此查看下一篇《30天自制操作系统》笔记(02)——导入C语言

《30天自制操作系统》笔记(01)——hello bitzhuwei’s OS!的更多相关文章

  1. 《30天自制操作系统》笔记(01)——hello bitzhuwei’s OS!【转】

    转自:http://www.cnblogs.com/bitzhuwei/p/OS-in-30-days-01-hello-bitzhuwei-OS.html 阅读目录(Content) 最初的OS代码 ...

  2. 《30天自制操作系统》笔记(06)——CPU的32位模式

    <30天自制操作系统>笔记(06)——CPU的32位模式 进度回顾 上一篇中实现了启用鼠标.键盘的功能.屏幕上会显示出用户按键.点击鼠标的情况.这是通过设置硬件的中断函数实现的,可以说硬件 ...

  3. 《30天自制操作系统》笔记(03)——使用Vmware

    <30天自制操作系统>笔记(03)——使用Vmware 进度回顾 在上一篇,实现了用IPL加载OS程序到内存,然后JMP到OS程序这一功能:并且总结出下一步的OS开发结构.但是遇到了真机测 ...

  4. 《30天自制操作系统》笔记(02)——导入C语言

    <30天自制操作系统>笔记(02)——导入C语言 进度回顾 在上一篇,记录了计算机开机时加载IPL程序(initial program loader,一个nas汇编程序)的情况,包括IPL ...

  5. 30天自制操作系统第九天学习笔记(u盘软盘双启动版本)

    暑假学习小日本的那本书:30天自制操作系统 qq交流群:122358078    ,更多学习中的问题.资料,群里分享 environment:开发环境:ubuntu 第九天的课程已学完,确实有点不想写 ...

  6. 单字节的FIFO缓存(30天自制操作系统--读书笔记)

    从今天起,写一些读书笔记.最近几个月都在看<30天自制操作系统这本书>,书虽说看的是电子书,但可以花钱买的正版书,既然花费了金钱,就总得有些收获. 任何人都不能总是固步自封,想要进步就得学 ...

  7. 《30天自制操作系统》笔记3 --- (Day2 上节)完全解析文件系统

    Day2 汇编语言学习与Makefile入门 本文仅带着思路,研究源码里关于文件系统的参数 关于day2主程序部分及更多内容,请看<30天自制操作系统>笔记 导航 发现学习中的变化 源码差 ...

  8. 从你的u盘启动:30天自制操作系统第四天u盘启动学习笔记

    暑假学习小日本的那本书:30天自制操作系统 qq交流群:122358078    ,更多学习中的问题.资料,群里分享 developing environment:ubuntu 关于u盘启动自己做的操 ...

  9. 30天自制操作系统第八天学习笔记(u盘软盘双启动版本)

    暑假学习小日本的那本书:30天自制操作系统 qq交流群:122358078    ,更多学习中的问题.资料,群里分享 environment:开发环境:ubuntu 第八天的学习思考: 关于鼠标是怎么 ...

随机推荐

  1. 02-Swift初体验

    Playground是什么? 从Xcode6开始出现(Swift开始出现) 翻译为:操场/游乐场 对于学习Swift基本语法非常方便 所见即所得(快速查看结果) 语法特性发生改变时,可以快速查看. S ...

  2. 第一个c++程序

    #include <iostream> using namespace std; int main(int argc, const char * argv[]) { //cin接收键盘输入 ...

  3. vim的跨文件复制粘贴

    1.用vim打开一个文件,例如:a.cpp 2.在普通模式下,输入:":sp"(不含引号)横向切分一个窗口,或者":vsp"纵向切分一个窗口,敲入命令后,你将看 ...

  4. PHP导出大量数据到excel表格

    /** * @creator Jimmy * @data 2016/8/22 * @desc 数据导出到excel(csv文件) * @param $filename 导出的csv文件名称 如date ...

  5. 【洛谷P2889】Milking Time

    很容易想到以结束时间加上R从小到大排序 之后怎样呢? 我们按层考虑,f[i]表示前i个时间段嫩得到的最大价值 每次枚举其之前的状态,如果其ed<当前i的st,那么取max即可 #include& ...

  6. [转]为什么使用 Redis及其产品定位

    原文链接:http://www.infoq.com/cn/articles/tq-why-choose-redis 传统MySQL+ Memcached架构遇到的问题 实际MySQL是适合进行海量数据 ...

  7. Linux Memcache 安装配置

    mkdir /soft cd /soft wget http://memcached.org/files/memcached-1.4.29.tar.gz tar -zxvf memcached-.ta ...

  8. MIPS ABI n32意味着什么?

    ABI是应用程序二进制接口的简称,用于标识处理器的工作模式及规范目标文件的编码格式. MIPS指令集架构自MIPS3起正式支持64位工作模式,故编码可以遵从o32(o意思是old).n32(n意思是n ...

  9. dom解析xml

    <?xml version="1.0" encoding="UTF-8"?><ShowList> <Movie>  < ...

  10. WINDOWS窗口风格 WS_OVERLAPPEDWINDOW

    转自:http://blog.csdn.net/hquxiezk/archive/2008/07/29/2733269.aspx #define WS_OVERLAPPEDWINDOW (WS_OVE ...