转自:http://www.cnblogs.com/bitzhuwei/p/OS-in-30-days-01-hello-bitzhuwei-OS.html

《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
 

虚拟机加载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语言

如果您愿意花几块钱请我喝杯茶的话,可以用手机扫描下方的二维码,通过微信捐赠。我会努力写出更好的文章。
(微信捐赠不显示捐赠者的个人信息,如需要,请注明您的联系方式(微信留言只显示10个汉字))

Thank you for your kindly donation!

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

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

    <30天自制操作系统>笔记(01)——hello bitzhuwei's OS! 最初的OS代码 ; hello-os ; TAB=4 ORG 0x7c00 ; 指明程序的装载地址 ; 以 ...

  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. bzoj3663/4660CrazyRabbit && bzoj4206最大团

    题意 给出平面上N个点的坐标,和一个半径为R的圆心在原点的圆.对于两个点,它们之间有连边,当且仅当它们的连线与圆不相交.求此图的最大团. 点数<=2000,坐标的绝对值和半径<=5000. ...

  2. 【bzoj3573】[HNOI2014]米特运输 树形dp

    题目描述 米特是D星球上一种非常神秘的物质,蕴含着巨大的能量.在以米特为主要能源的D星上,这种米特能源的运输和储存一直是一个大问题.D星上有N个城市,我们将其顺序编号为1到N,1号城市为首都.这N个城 ...

  3. android面试(1)----布局

    1.说出android 五中布局,并说出各自作用? FrameLayout: 堆叠布局,也是就可以堆在一起.最长应用于Fragment的使用上. LinearLayout: 线性布局,可以是竖排或水平 ...

  4. 《转》理解Object.defineProperty的作用

    对象是由多个名/值对组成的无序的集合.对象中每个属性对应任意类型的值.定义对象可以使用构造函数或字面量的形式: var obj = new Object; //obj = {} obj.name = ...

  5. The Largest Clique UVA - 11324( 强连通分量 + dp最长路)

    这题  我刚开始想的是  缩点后  求出入度和出度为0 的点  然后统计个数  用总个数 减去 然而 这样是不可以的  画个图就明白了... 如果  减去度为0的点  那么最后如果出现这样的情况是不可 ...

  6. Java发送http get/post请求,调用接口/方法

    由于项目中要用,所以找了一些资料,整理下来. GitHub地址: https://github.com/iamyong    转自:http://blog.csdn.net/capmiachael/a ...

  7. 实现了一下Berlekamp-Massey

    //from https://www.cnblogs.com/TSHugh/p/9265155.html //在FP中求固定项数数列的线性递推式 //此递推式严格符合数学定义,故可能在末尾出现一些看起 ...

  8. 框架----Django内置Admin

    Django内置的Admin是对于model中对应的数据表进行增删改查提供的组件,使用方式有: 依赖APP: django.contrib.auth django.contrib.contenttyp ...

  9. js通过生成临时表单再删除的方式向后台提交数据(模拟ajax的post提交但还要跳转页面不返回数据)以及 struts向前台返回文件下载及防止中文乱码处理

    为了避免发送数据中有特殊字符,发送时用 encodeURIComponent 编码 (其实这个 if中是直接通过浏览器下载文件的方法,else是向后台传数据的方法) struts后台Action处理接 ...

  10. SSH 阿里云服务器

    1.在服务机上操作 创建要远程登录的用户和密码 sudo adduser username    正在添加用户“username”... 正在添加新组“username”(1001)... 正在添加新 ...