30天自制操作系统 (一个操作系统的实现)

原创 2016年06月01日 21:31:04

10分钟搞出一个简单操作系统

1 准备工作

  • 安装虚拟机(VMware-workstation),下载好虚拟机安装包之后,点击下一步安装就行。
  • 在虚拟机(VMware-workstation)中安装一个系统,笔者安装的是windows10(当然win7,win8,Linux都可以)。
  • 汇编编译器NASM,下载并安装。

2 用汇编写一个显示“Hello,OS world”的boot.asm文件

    org 07c00h          ; 告诉编译器程序加载到7c00处
    mov ax, cs
    mov ds, ax
    mov es, ax
    call    DispStr         ; 调用显示字符串例程
    jmp $          ; 无限循环
DispStr:
    mov ax, BootMessage
    mov bp, ax          ; ES:BP = 串地址
    mov cx, 16          ; CX = 串长度
    mov ax, 01301h      ; AH = 13,  AL = 01h
    mov bx, 000ch       ; 页号为0(BH = 0) 黑底红字(BL = 0Ch,高亮)
    mov dl, 0
    int 10h         ; 10h 号中断
    ret
BootMessage:        db  "Hello, OS world!"
times   510-($-$$)   db  0   ; 填充剩下的空间,使生成的二进制代码恰好为512字节
dw  0xaa55              ; 结束标志

3 用NASM编译boot.asm文件生成boot.bin二进制文件

  • 按照提示默认安装完成NASM之后,桌面会出现右图的图标
  • 这里写图片描述
  • 双击图标,出现下图
  • 双击图标,出现下图
  • 进入boot.asm所在的目录,我的boot.asm在D盘根目录,即D:\boot.asm
  • 进入之后,如图
  • 这里写图片描述
  • 输入以下命令,
  • nasm boot.asm -o boot.bin
    如图
  • 生成boot.bin文件
    这里写图片描述

4 生成A.img文件

生成A.img需要用到软件FloppyWriter.exe,(同样上传该工具)

  • 首先新建一个文件,将其名称及后缀改成“a.img”,目前a.img是空白的。这里写图片描述
  • 打开FloppyWriter.exe,出现这里写图片描述

  • 点击第二项“Write FIle to Image”如图,并选择第三步生成的boot.bin 文件这里写图片描述

  • 点击打开,选中刚才新建的a.img
  • 这里写图片描述
  • 成功
  • 这里写图片描述

好,现在回顾一下我们都做了什么。

  1. 汇编写boot.asm文件
  2. 用nasm编译成boot.bin
  3. 新建空白a.img,然后用FloppyWriter 将boot.bin写入a.img.

ok,继续下一步

5 打开虚拟机,这里写图片描述 点击“编辑虚拟机设置”

出现
这里写图片描述
点击“软盘驱动器”,下一步
点击使用软盘映像
点击使用软盘映像
点击 下一步,然后将a.img加载进去
这里写图片描述
然后 完成 –确定。

6 激动人心的时刻到了

这里写图片描述

好,你已经成功将“Hello,OS world”显示出来了

版权声明:给别人一份尊重,留自己一方安心。

Delphi7高级应用开发随书源码

  • 2003年04月30日 00:00
  • 676KB
  • 下载

U盘启动以及int 13h扩展读取U盘内容

从U盘启动有三种方式:USB-HDD, USB-CDROM, USB-FDD,其中USB-FDD格式较老,同时兼容性存在一定问题,目前也仅仅针对USB-HDD以及USB-CDROM两种方式进行了研究。...

汇编语言寄存器AX BX...全称

本文来自:http://baike.baidu.com/view/6159.htm 8086 有14个16位寄存器,这14个寄存器按其用途可分为(1)通用寄存器、(2)指令指针、(3)标志寄存器...

C语言实现队循FIFO缓冲区-《30天自制操作系统》

本代码整理自《30天自制操作系统》P135的整理FIFO缓冲区 写的很好,所以记录一下(增加了一个fifo8_free函数,用于查询剩余容量,觉得有用)。作者实现的是char类型的缓冲区,但是可以用...
  • fovwin
  • fovwin
  • 2012年10月30日 16:51
  • 14868

《30天自制操作系统》——走出保护模式的困境

现在我在吃饭,假设我是程序而我前面的桌子是数据。我知道桌子在哪,我也知道我的嘴在哪。我伸出筷子去夹菜,在保护模式下,程序段基址和数据段基址不一样,导致我前方的时空扭曲了,筷子伸到了口大丁桌子上而我并不...
  • ekkie
  • ekkie
  • 2016年05月13日 17:20
  • 393

30天自制操作系统(第03天)–进入32位模式并引入C语言

使用汇编语言编辑的是接近于机器语言的程序,但是汇编语言操作的基本都是寄存器、内存之类的底层的东西,阅读起来其实挺困难的。就如上一天的循环,不仔细阅读并模拟代码逻辑,还真的很难看出来是个循环呢。于是我们...

30天自制操作系统day3

第三章主要讲了启动区和从启动区载入操作系统程序。书中一个装载磁盘数据的代码示例:MOV AX, 0x0820 MOV ES, AXMOV CH, 0 MOV DH, 0 MOV CL, 2MOV AH...

30天自制操作系统之第15天 多任务(1)

多任务的本质是利用定时器和far跳转在任务之间进行切换,具体来说,一开始先运行main函数(就是处理我们的鼠标、键盘和定时器等事件),0.02s后定时器超时,执行如下语句: farjmp(0, 4 *...

《30天自制操作系统》学习笔记--第7天

今天看的还是比较顺利,很快一天的就看完了,总结一下今天的主要知识。        首先是中断处理程序,中断处理程序尽量高效,短小精悍,所以像显示啊什么的操作尽量不再中断处理程序中出现,因为一旦进入中...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:30天自制操作系统 (一个操作系统的实现)
举报原因:
原因补充:

(最多只允许输入30个字)