《30天自制操作系统》笔记(01)——hello bitzhuwei's OS!

最初的OS代码

 1 ; hello-os
 2 ; TAB=4
 3
 4         ORG        0x7c00            ; 指明程序的装载地址
 5
 6 ; 以下这段是标准FAT12格式软盘专用的代码
 7
 8         JMP        entry
 9         DB        0x90
10         DB        "HELLOIPL"        ; freeparam 启动区的名称可以是任意的字符串(8字节)
11         DW        512                ; 每个扇区(sector)的大小(必须为512字节)
12         DB        1                ; 簇(cluster)的大小(必须为1个扇区)
13         DW        1                ; FAT的起始位置(一般从第一个扇区开始)
14         DB        2                ; FAT的个数(必须为2)
15         DW        224                ; 根目录的大小(一般设成224项)
16         DW        2880            ; 该磁盘的大小(必须是2880扇区)
17         DB        0xf0            ; 磁盘的种类(必须是0xf0)
18         DW        9                ; FAT的长度(必须是9扇区)
19         DW        18                ; 1个磁道(track)有几个扇区(必须是18)
20         DW        2                ; 磁头数(必须是2)
21         DD        0                ; 不使用分区,必须是0
22         DD        2880            ; 重写一次磁盘大小
23         DB        0,0,0x29        ; 意义不明,固定
24         DD        0xffffffff        ; (可能是)卷标号码
25         DB        "HELLO-OS   "    ; freeparam 磁盘的名称(11字节)
26         DB        "FAT12   "        ; 磁盘格式名称(8字节)
27         RESB    18                ; 先空出18字节
28
29 ; 程序核心
30
31 entry:
32         MOV        AX,0            ; 初始化寄存器
33         MOV        SS,AX
34         MOV        SP,0x7c00
35         MOV        DS,AX
36         MOV        ES,AX
37
38         MOV        SI,msg
39 putloop:
40         MOV        AL,[SI]
41         ADD        SI,1            ; 给SI加1
42         CMP        AL,0
43         JE        fin
44         MOV        AH,0x0e            ; 显示一个文字
45         MOV        BX,15            ; 指定字符颜色
46         INT        0x10            ; 调用显卡BIOS
47         JMP        putloop
48 fin:
49         HLT                        ; 让CPU停止;等待指令
50         JMP        fin                ; 无限循环
51
52 msg: ; 信息显示部分
53         DB        0x0a, 0x0a        ; 换行2次
54         DB        "hello, bitzhuwei's OS!"    ; freeparam
55         DB        0x0a            ; 换行
56         DB        0
57
58         RESB    0x7dfe-$        ; 填写0x00,直到0x001fe
59
60         DB        0x55, 0xaa
61
62 ; 以下是启动区以外部分的输出
63
64         DB        0xf0, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00
65         RESB    4600
66         DB        0xf0, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00
67         RESB    1469432

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天自制操作系统笔记(九十)

    第九天和第十天的内容为解决鼠标和图层的刷新问题,以及内存分配问题,这里的内存分配我们采取的是最简单的最先匹配原则,将整个内存由申请的进程开始逐渐的截取成不同的段.这样产生的问题可能是产生很多的外部碎片 ...

  2. 《30天自制操作系统》笔记(04)——显示器256色

    <30天自制操作系统>笔记(04)--显示器256色 进度回顾 从最开始的(01)篇到上一篇为止,已经解决了开发环境问题和OS项目的顶层设计问题. 本篇做一个小练习:设置显卡显示256色. ...

  3. 《30天自制操作系统》笔记(09)——绘制窗口

    <30天自制操作系统>笔记(09)--绘制窗口 进度回顾 上一篇中介绍了图层式窗口管理的思路和算法.在此基础上,本篇就解决绘制窗口及其简单的优化问题. 这里稍微吐槽一下<30天自制操 ...

  4. 《30天自制操作系统》学习笔记--第好多天

    之前看<30天自制操作系统>,参考而成,和书中系统并不完全一致,是在原有基础上按照自己的习惯而成,由于水平和工作原因,未完成内存管理和文件系统,有兴趣者可以通过以下网址https://gi ...

  5. 由《30天自制操作系统》引发的漫画创作

    大家可还记得<30天自制操作系统>的封面上的那只猫吗?记得当时,在果壳网有人问,为何这只猫长了两只尾巴呢,延着这条线,我把这本书捧上了展示的舞台.事隔四个多月,我又重提此书. 这本经我手宣 ...

  6. 索骥馆-DIY操作系统之《30天自制操作系统》扫描版[PDF]

    内容简介: <30天自制操作系统>是一本兼具趣味性.实用性与学习性的操作系统图书.作者从计算机的构造.汇编语言.C语言开始解说,让读者在实践中掌握算法.在这本书的指导下,从零编写所有代码, ...

  7. 30天自制操作系统——第1天 从计算机结构到汇编程序入门

    落灰一学期的<30天自制操作系统>,希望能够利用大二最后这几个月完成操作系统的制作,以下是我阅读本书所记录的笔记以及学习过程,愿顺利完成. 1.先动手操作 (1)安装"二进制编辑 ...

  8. 关于U盘启动操作系统《30天自制操作系统》

    原本的启动是从img启动的,而且这个img是用FAT12文件系统进行格式化的(具体去搜索FAT12文件格式,这里给大家推荐一篇http://www.doc88.com/p-646605198560.h ...

  9. 为什么《30天自制操作系统》封面中的猫是两只尾巴

    刚刚在一社区,发了一贴,被指出一问题,询一高人,得一答案.这便是我没有关注到的封面上的那只猫,我想这也是很多读者没有关注到的.因为在我微博的200转发贴中,并没有人提到封面中的猫为何有两只尾巴.于是咨 ...

最新文章

  1. lodash 提取前N个元素 take
  2. php的htaccess,.htaccess
  3. vs界面竖线光标变成灰色方块,输入时替代已有字符
  4. 程序员如何克服焦虑?
  5. pyecharts第八节、雷达图
  6. Xcode Cocoa程序MessageBox 弹框
  7. 解决linux删除文件后空间没有释放问题
  8. sf | 空间矢量对象的属性连接方法
  9. Flex 结合sandy引擎创造
  10. oracle not in 数组,慎用Oracle的not in (轉)
  11. 对于NAS,IP SAN以及iSCSCI SAN存储的一些认识和理解
  12. 华氏温度转换为摄氏温度(PTA厦大慕课)
  13. 用循环写出九九乘法表格。
  14. 记录极致cms百度编辑器修改上传图片大小限制
  15. 什么是DNS over HTTPS?
  16. Vue Error-报错信息:Syntax Error: Assigning to rvalue.
  17. cordova 实现第三方登录及分享,qq,微信,微博
  18. spring事务的传播行为的讲解(笔记 侵删)
  19. hapi入门简介(入门实践)----净土小沙弥学hapi.js_第二篇
  20. 《电路/电路原理》—戴维宁(南)定理实战演练

热门文章

  1. 浏览器如何渲染页面?
  2. 2台xenserver组成的资源池开启HA存在的问题
  3. SATA硬盘如何使用GHOST
  4. Spring Aop实例之AspectJ注解配置
  5. DataSet转换为实体(函数)
  6. 我的android面试经历
  7. 使用Eclipse编译运行MapReduce程序 Hadoop2.6.0/Ubuntu
  8. Eclipse下搭建Hadoop开发环境,并运行第一个实例
  9. 预防session劫持
  10. 算法:删除链表中重复的元素||