从0开始制作“操作系统”第一步

在我其他事还没折腾出个结果的时候,就让我发现了做操作系统这个东西,当然,目标只是一个小的不能再小的(甚至能不能叫操作系统都是个问题),因为我实在很好奇,虽然查过很多,但是不能从根源上了解一下计算机,就总觉得缺了什么

(刚发现,由于自己激动,写了一堆废话,所以为了大家着想,重点部分开头加个重:,其它重点我也加粗)

前两天心血来潮,想起这样一件事,很容易的搜索到两本书《30天自制操作系统》以及《一个操作系统的实现》(以下还是简称一下书一和书二吧,毕竟名字那么长),就决定是他们了

今天有了时间,我就开始动手了,首先怎么说都得来一句Hello World!恰好这两本书也是这样的,不过为了尽量在真实的同时方便,我就使用虚拟机了

书一中是从二进制开始的,然后逐步将其变为汇编代码,我觉得自己可以理解这个过程,就偷偷的跳过了(虽然可以拿提供的源代码试,但是懒啊),书二是直接从汇编开始的,它的代码更少,我们就采用它的了


不管怎么说,我们总是得用到汇编的,不过需求应该不大,写过一些基础的代码就可以了,下面要开始第一步了,汇编部分

1. 汇编代码

这恰好到学汇编的一学期,对80x86那个环境啊,是真的让人脑壳疼,我一个64位的机子要写去16位,要不dosbox,要不虚拟机上masm32或者masm for windows,dosbox和masm for windows这俩我不想采用,见过sublime,vscode,as这些之后,我实在是看不下去,而两天前我为了完成作业,在虚拟机上(win7 32位)用masm32和官方的包成功搅合在一起,然后用sublime写代码,不过需要虚拟机,有点麻烦

而今天,我发现两本书都要用nasm进行汇编,妈耶,我实在不想配了,还要折腾我,在几次找书中的代码对应的masm代码未果后,不得已,我还是接受它吧

下载地址:https://www.nasm.us/pub/nasm/releasebuilds/2.14/win64/nasm-2.14-win64.zip
也可以自己去找,官网上很好找的

果然,逃脱不了真香定理,我发现它真的是舒服,只需要解压,直接就可以运行,没错,相当简单,配个环境变量就更舒服了,虽然没有试过在windows上编个小程序试试,但是就以这编译来说,至少在这里,绝对够了

重:下来展示我们的代码(没有汇编代码的高亮,我不上图了,方便复制)

; 参考书二的代码
    ORG     0x7c00
    MOV     AX, 0x7c00
    MOV     SP, 0x7c00
    MOV     DS, AX
    Call    print
    jmp     $
print:
    ; ES: BP储存了message的地址
    MOV     AX, message
    MOV     BP, AX
    ; CX中放要输出的串的长度
    MOV     CX, 15
    ; AH=13H,AL=01H
    MOV     AX, 01301H
    ; BH=0(页号为0),BL=0CH(黑底红字)
    MOV     BX, 000CH
    MOV     DL, 0
    ; 10号中断,BIOS显示I/O功能调用
    ; AX=13H输出字符串,其它的也都一样,都看成是参数
    INT     10H
    RET
message:
    ; 要输出的字符串
    db      "Hello, OS world!"
    ; 用0填充到510字节,最后两字节为55和AA
    ; 不过我试过,删了也没有错误发生,不过最好加上
    times   510-($-$$) db 0
    dw      0xAA55

重:接下来需要编译,使用刚提到的nasm,要生成bin文件

nasm filename.asm -o filename.bin

接下来就要制作启动镜像了,当然得使用UltraISO了

2. 使用UltraISO制作ISO镜像

(1) 重:首先新建启动光盘映像

图片.png

(2) 重:加载映像,使用刚刚生成的bin文件

图片.png

(3) 重:之后保存就好

但是,我们怎么能用这么低效率的方式呢,到第四步我们改变一下这个做法

3. 使用Vmware运行

重:这就简单了,和正常的一样,只是将使用的镜像是上一步生成的ISO镜像


重:第四步可选,只是为了让整个过程更快速,也可以直接跳到最后看一眼结果

4. 提高效率的一步

在汇编代码所在目录下建立一个make.bat

@echo off
:: 编译汇编代码
nasm %1.asm -o %1.bin
:: 因为如果原本有这个文件,会弹窗询问是否覆盖,为避免点击所以先删除
del %1.iso
:: UltraISO的命令行方式,-bootfile指定引导文件
UltraISO -bootfile %1.bin -output %1.iso -silent
del %1.bin

只需要运行make filename就可一步生成iso文件(filename不包括后缀.asm)

我是为了在sublime中运行,所以这样写,大家可以直接把%1换为文件名(注意UltraISO那条命令中要写绝对路径)

而我在sublime中有

{
    "shell_cmd": "make ${file_path}\\\\${file_base_name}"
}

这样Ctrl-B之后就可以直接调用使用Ctrl+B开启,使用Ctrl+E关机,而且不会关闭这个标签页

至于在虚拟机那里,这个界面下


图片.png

这样下来,我就可以在sublime中Ctrl+B编译并生成ISO文件,然后Alt+Tab切换到虚拟机,Ctrl+B开机,看到结果之后Ctrl+E关机,再切换回去

5. 展示结果

最后必须得展示下结果,哈哈哈,虽然有点简单只有一行字

图片.png
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 213,992评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,212评论 3 388
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 159,535评论 0 349
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,197评论 1 287
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,310评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,383评论 1 292
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,409评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,191评论 0 269
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,621评论 1 306
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,910评论 2 328
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,084评论 1 342
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,763评论 4 337
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,403评论 3 322
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,083评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,318评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,946评论 2 365
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,967评论 2 351

推荐阅读更多精彩内容