美文网首页IT@程序员猿媛
从0开始制作“操作系统”第一步

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

作者: ringawho | 来源:发表于2019-04-28 22:38 被阅读4次

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

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

前两天心血来潮,想起这样一件事,很容易的搜索到两本书《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

相关文章

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

    在我其他事还没折腾出个结果的时候,就让我发现了做操作系统这个东西,当然,目标只是一个小的不能再小的(甚至能不能叫操...

  • 教你编译PHP7 (nginx+mysql+php7)

    操作系统: CentOS Linux, 6.5 64位服务器: 阿里云空的操作系统,我们从0开始.在开始前,请确保...

  • 超简单的原版镜像黑苹果安装教程

    第一步(制作黑苹果启动盘)此为原版镜像制作 使用TransMac制作启动盘准备工具在Windows操作系统下使用T...

  • 实现一个简单的64位操作系统 (0x02)编写一个简单的boot

    0x01 概述 在上一章中已经将环境搭建好了,接下来就开始进行操作系统编写的工作了。编写操作系统的第一步当然是编写...

  • 从0开始

    不想再碌碌无为继续这么混下去了好嘛

  • 从0开始

    空杯心态,说着容易做着难。 当我们从有了孩子的欣喜若狂,到孩子第一天上幼儿园的充满希望,然后到小学三四年级的开始纠...

  • 从0开始

    当一家公司开始招聘专业安全人员的时候,意味着安全对这家公司已经比较重要了,比如曾发生一些入侵或者信息泄漏等安全事件...

  • 从0开始

    The best time to plant a tree is twenty years ago. The se...

  • 从0开始

    接触简书已经半年多了,最初是在看一些公众号的文章时偶然间看到了简书,这个集读文写文于一身的平台,早早的就下了这个软...

  • 从0开始

    写作是我的短板,一直以来都想突破但都在得过且过,没有行动,希望从今天开始学习,跟大家一起努力加油,成为更好的自己!

网友评论

    本文标题:从0开始制作“操作系统”第一步

    本文链接:https://www.haomeiwen.com/subject/dbcsnqtx.html