《30天自制操作系统》笔记(01)——hello bitzhuwei’s OS!【转】-阿里云开发者社区

开发者社区> 桃子红了呐> 正文

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

简介:
+关注继续查看

转自: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!





本文转自张昺华-sky博客园博客,原文链接:http://www.cnblogs.com/sky-heaven/p/8134375.html,如需转载请自行联系原作者

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
10、深入理解计算机系统笔记:存储器层次结构,高速缓存存储器(2)
1、组相联高速缓存(set associative cache) 1 < E < C/B 2、全相联映射(fully associative cache) E = C/B 因为全相联高速缓存需要并行搜索许多相匹配的行,所以构造相对是困难的;因此只适合做小的高速缓存;如虚拟存储器系统中的TLB,它缓存页表项。
986 0
29、深入理解计算机系统笔记,并发编程(concurrent)(1)
1、如果逻辑控制流在时间上重叠,那么它们就是并发的。这种现象,称为并发(concurrency)。 2、为了允许服务器同时为大量客户端服务,比较好的方法是:创建并发服务器,为每个客户端创建各自独立的逻辑流。
733 0
31、深入理解计算机系统笔记,并发编程(concurrent)(3)
1、基于预线程化(prethreading)的并发服务器 常规的并发服务器中,我们为每一个客户端创建一个新线程,代价较大。一个基于预线程化的服务器通过使用“生产者-消费者模型”来试图降低这种开销。
932 0
19、深入理解计算机系统笔记,虚拟存储器,基本原理(1)
1、一个系统中的进程是与其他进程共享CPU和主存资源的。 2、虚拟存储器(Virtual Memory),是硬件异常,硬件地址翻译,主存,磁盘文件和内核软件的完善交互,它为每个进程提供一个大的,一致的,私有地址空间。
718 0
Echarts字体和线条颜色设置操作笔记
这篇文章主要讲述Echarts设置字体和线条的颜色相关操作笔记,希望文章对你有所帮助,主要是自己的在线笔记吧。我在前面先放各种修改前后图片颜色的对照,后面再详细介绍代码。这样更方便阅读及读者知道,是否对自己有所帮助,其重点是如何在模板动态网页或JSP网站中插入Echarts图片。 1. 修改标题的
8001 0
深入解析Windows操作系统笔记——CH3系统机制
3.系统机制 微软提供了一些基本组件让内核模式的组件使用: 1.陷阱分发,包括终端,延迟的过程调用(DPC),异步过程调用(APC),异常分发以及系统服务分发 2.执行体对象管理器 3.同步,包括自旋锁,内核分发器对象,以及等待是如何实现的。
1332 0
28、深入理解计算机系统笔记,Web服务器简介
1、Web服务器以两种不同的方式向客户端提供内容: 1)静态内容(static content):从服务器磁盘取得文件并把它返回客户端来服务。 2)动态内容(dynamic content):运行一个可执行文件,并把它的输出返回给客户端。
592 0
25、深入理解计算机系统笔记,虚拟存储器,垃圾回收
1、垃圾收集器将存储器视为一张有向可达图(reachability graph)。 2、Mark%Sweep垃圾收集器由标记(mark)阶段和清除(sweep)阶段组成。标记阶段标记出根节点的所有可达的和已分配的后继,而后面的清除阶段释放每个被标记的已分配块。
524 0
深入解析Windows操作系统笔记——CH2系统结构
2.系统结构 本章主要介绍系统的总体结构,关键部件之间的交互,以及运行在什么环境。 2.系统结构... 1 2.1 需求和设计目标... 1 2.2 操作系统模型... 2 2.3 总体结构.
1079 0
4269
文章
0
问答
文章排行榜
最热
最新
相关电子书
更多
《2021云上架构与运维峰会演讲合集》
立即下载
《零基础CSS入门教程》
立即下载
《零基础HTML入门教程》
立即下载