1.1 运行一个操作系统

使用Bz1621.lzh工具,这是一个二进制编辑器,输入指定内容:

保存为helloos.img,接下来我们有两种方式运行此操作系统。
PC模拟器
在一个文件中,放入img文件和!cons_9x.bat和!cons_nt.bat文件,这两个文件有一个能打开,然后写入一个文件run.bat。

Copy helloos.img …\z_tools\qemu\fdimage0.bin

…\z_tools\make.exe -C …\z_tools\qemu

该文件的路径应该为

G:\操作系统\tolset\helloos0

双击!cons_nt.bat,打开之后,输入命令run,即可运行。

VM虚拟机
首先创建虚拟机。


然后导入软盘img文件。

开启虚拟机即可。

1.2 使用汇编语言

这里使用的汇编语言编译器是nask,是日本川河秀实写的。
写入如下汇编语言:

; hello-os
; TAB=4; 以下这段是标准的FAT12格式软盘专用代码DB       0xeb, 0x4e, 0x90DB      "HELLOIPL"        ; 启动区的名称可以是任意8字节的字符串DW      512             ; 每个扇区的大小必须为512字节DB     1               ; 簇的大小必须为一个扇区DW     1               ; FAT的起始位置DB        2               ; FAT的个数(必须为2)DW      224             ; 根目录的大小(一般设为224项)DW      2880            ; 该磁盘的大小(必须是2880扇区)DB     0xf0            ; 磁盘的种类(必须是9扇区)DW     9               ; FAT的长度(必须是九扇区)DW        18              ; 一个磁道(track)有几个扇区(必须是18)DW     2               ; 磁头数(必须是2)DD     0               ; 不使用分区,必须是0DD       2880            ; 重写一次磁盘大小DB        0,0,0x29        ; 意义不明,固定DD      0xffffffff      ; 可能是卷标号码DB     "HELLO-OS   " ; 磁盘的名称(11字节)DB       "FAT12   "        ; 磁盘格式名称(8字节)RESB 18              ; 空出18字节; 程序主体DB        0xb8, 0x00, 0x00, 0x8e, 0xd0, 0xbc, 0x00, 0x7cDB        0x8e, 0xd8, 0x8e, 0xc0, 0xbe, 0x74, 0x7c, 0x8aDB        0x04, 0x83, 0xc6, 0x01, 0x3c, 0x00, 0x74, 0x09DB        0xb4, 0x0e, 0xbb, 0x0f, 0x00, 0xcd, 0x10, 0xebDB        0xee, 0xf4, 0xeb, 0xfd; 信息显示部分DB        0x0a, 0x0a      ; 两个换行DB        "hello, world"DB      0x0a            ; 换行DB      0RESB   0x1fe-$         ; 填写0x00,直到0x001feDB     0x55, 0xaa; 以下是启动区以外部分的输出DB     0xf0, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00RESB  4600DB      0xf0, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00RESB  1469432
编写asm.bat将汇编代码编译成img。

…\z_tools\nask.exe helloos.nas helloos.img

1.3 汇编与Makefile

启动区内容的装载地址。
:::info
0x00007c00-0x00007dff
:::
这里我们只用nask制作512字节的启动区。ipl.nas:

; hello-os
; TAB=4ORG     0x7c00          ; このプログラムがどこに読み込まれるのか; 以下は標準的なFAT12フォーマットフロッピーディスクのための記述JMP     entryDB     0x90DB      "HELLOIPL"        DW      512             DB      1               DW      1               DB      2               DW      224             DW      2880            DB      0xf0            DW      9               DW      18              DW      2               DD      0               DD      2880            DB      0,0,0x29        DD      0xffffffff      DB      "HELLO-OS   " DB      "FAT12   "        RESB    18              entry:MOV       AX,0            ; 寄存器初始化MOV     SS,AXMOV        SP,0x7c00MOV        DS,AXMOV        ES,AXMOV        SI,msg
putloop:MOV     AL,[SI]ADD      SI,1            ; SI加1。CMP      AL,0JE      finMOV      AH,0x0e         ; 单字符显示功能MOV        BX,15           ; 指定字符颜色INT     0x10            ; 调用显卡BIOSJMP       putloop
fin:HLT                     ; 让CPU停止,等待指令JMP     fin             ; 无限循环msg:DB        0x0a, 0x0a      ; 换行两次DB        "hello, world"DB      0x0a            ; 换行DB      0RESB   0x7dfe-$        ; 填充0直到到0x7dfeDB        0x55, 0xaa

Makefile:

# 默认动作default :../z_tools/make.exe img# 文件生成规则ipl.bin : ipl.nas Makefile../z_tools/nask.exe ipl.nas ipl.bin ipl.lsthelloos.img : ipl.bin Makefile../z_tools/edimg.exe   imgin:../z_tools/fdimg0at.tek \wbinimg src:ipl.bin len:512 from:0 to:0   imgout:helloos.img# 命令asm :../z_tools/make.exe -r ipl.binimg :../z_tools/make.exe -r helloos.imgrun :../z_tools/make.exe imgcopy helloos.img ..\z_tools\qemu\fdimage0.bin../z_tools/make.exe -C ../z_tools/qemuinstall :../z_tools/make.exe img../z_tools/imgtol.com w a: helloos.imgclean :-del ipl.bin-del ipl.lstsrc_only :../z_tools/make.exe clean-del helloos.img
批处理文件make.bat:

…\z_tools\make.exe %1 %2 %3 %4 %5 %6 %7 %8 %9

只需要输入

make run

它会首先生成ipl.bin,然后生成helloos.img文件,然后使用make.exe(make.exe 会让Makefile文件发挥作用),然后启动模拟器。
“make clean”:删除掉除最终成果意外的所有中间生成文件,把硬盘清理干净。
“make src_only”:把源程序以外的文件全部都删除干净。
“make”:不带参数时,默认动作是“make img”。

1.4 总结

最终我们的文件中需要有如下文件。

前两个是终端自然不必多说。
ipl.nas中的内容为:

; hello-os
; TAB=4ORG     0x7c00          ; 指明程序的装在位置; 以下的计述用于标准FAT12格式的软盘JMP     entryDB     0x90DB      "dayedaye"        ; 启动区的名称可以是任意字符串(8字节)DW       512             ; 每个扇区的大小(必须为512字节)DB     1               ; 簇的大小(必须为一个扇区)DW     1               ; FAT的起始位置(一般从第一个扇区开始)DB      2               ; FAT的个数(必须为2)DW      224             ; 根目录的大小(一般设成224项)DW      2880            ; 该磁盘的大小(必须是2880扇区)DB     0xf0            ; 磁盘的种类(必须是0xf0)DW        9               ; FAT的长度(必须是9扇区)DW        18              ; 一个磁道(track)有几个扇区(必须是18)DW     2               ; 磁头数(必须是2)DD     0               ; 不使用分区,必须是0DD       2880            ; 重写一次磁盘大小DB        0,0,0x29        ; 意义不明,固定DD      0xffffffff      ; 可能是卷标号码DB     "daye-OS    " ; 磁盘的名称(10字节)DB       "FAT12   "        ; 磁盘格式名称(字节)RESB  18              ; 先空出18字节; 程序主体entry:MOV        AX,0            ; 初始化寄存器MOV     SS,AXMOV        SP,0x7c00MOV        DS,AXMOV        ES,AXMOV        SI,msg
putloop:MOV     AL,[SI]ADD      SI,1            ; 给SI+1CMP     AL,0JE      finMOV      AH,0x0e         ; 显示一个文字MOV     BX,15           ; 指定字符颜色INT     0x10            ; 调用显卡BIOSJMP       putloop
fin:HLT                     ; 让CPU停止,等待指令JMP     fin             ; 无限循环msg:DB        0x0a, 0x0a      ; 换行两次DB        "hello, world"DB      0x0a            ; 换行DB      0RESB   0x7dfe-$        ; 填写0x00,直到0x7dfeDB      0x55, 0xaa
Makefile里面则是一些我们希望实现的功能的命令。

# 默认执行default :../tools/make.exe img# 文件生成规则ipl.bin : ipl.nas Makefile../tools/nask.exe ipl.nas ipl.bin ipl.lsthelloos.img : ipl.bin Makefile../tools/edimg.exe   imgin:../tools/fdimg0at.tek \wbinimg src:ipl.bin len:512 from:0 to:0   imgout:helloos.img# 命令asm :../tools/make.exe -r ipl.binimg :../tools/make.exe -r helloos.imgrun :../tools/make.exe imgcopy helloos.img ..\tools\qemu\fdimage0.bin../tools/make.exe -C ../tools/qemuinstall :../tools/make.exe img../tools/imgtol.com w a: helloos.imgclean :-del ipl.bin-del ipl.lstsrc_only :../tools/make.exe clean-del helloos.img
看到这里我们还需要注意一件事,就是我们的操作系统的文件目录中,还需要有一个tools文件,文件中存放了一些工具,例如make.exe,nask.exe,edimg.exe,fdimg0at.tek和fdimage0.bin等。<br />make.bat则是批处理文件。
..\tools\make.exe %1 %2 %3 %4 %5 %6 %7 %8 %9

自制操作系统 1 准备工作相关推荐

  1. 如何读emmc里的引导程序_自制操作系统学习1 引导程序

    本系列学习有前面的汇编学习基础最好,如果没有影响也不大本系列学习主要资源来自<[30天自制操作系统].(川合秀实)>,<自己动手写操作系统>两本书 一.准备工作 bochs v ...

  2. 《30天自制操作系统》---第一天

    <30天自制操作系统>---第一天 二进制编译与文本编译器大家用自己顺手的就可以,今天通过两种方法运行虚拟机,第一种通过作者提供的工具运行在QEMU中,第二种方法运行到VMWare中,直接 ...

  3. 30天自制操作系统——第一天制作一个Hello word操作系统

    入手一本<30天自制操作系统>,内容诙谐有趣,很适合对操作系统一窍不通的新手. 据作者所言,这本书的最终目标是从零开始编写一个五脏俱全的图形操作系统,不用什么基础,而且只需30天!! 没有 ...

  4. 为什么《30天自制操作系统》封面中的猫是两只尾巴

    刚刚在一社区,发了一贴,被指出一问题,询一高人,得一答案.这便是我没有关注到的封面上的那只猫,我想这也是很多读者没有关注到的.因为在我微博的200转发贴中,并没有人提到封面中的猫为何有两只尾巴.于是咨 ...

  5. 发布在《30天自制操作系统》之前的帮助阅读贴

    说明:这是8月15日即将上市的一本新书,本文的摘选也可以命名为<30天自制操作系统>上市之前必读.本书幽默,有趣,可以说是技术书里的幽默书,让您读起来绝对不会感到乏味.在本书上市之前,您一 ...

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

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

  7. 写在《30天自制操作系统》上市之前

       这本<30天自制操作系统>马上就要在各大书店和网上商城全面上架了,作为本书的4位译者之一,我负责翻译了本书约三分之二的内容.这是我参与翻译的第一本译著,我感到很激动也很紧张,因为我知 ...

  8. 自制操作系统(十) 图像叠加处理

    2016.07.12 参考书籍:<30天自制操作系统>.<自己动手写操作系统> qq:992591601  欢迎交流 图像叠加处理的原理很简单,就是给图像分层,从低下往上面画, ...

  9. 《30天自制操作系统》笔记(04)——显示器256色

    <30天自制操作系统>笔记(04)--显示器256色 进度回顾 从最开始的(01)篇到上一篇为止,已经解决了开发环境问题和OS项目的顶层设计问题. 本篇做一个小练习:设置显卡显示256色. ...

最新文章

  1. c 嵌入html5 win7,Html5新标签解释及用法
  2. 如何修复XML内存“泄漏”
  3. 在线打假!“鲁迅说过的话”检索系统上线 网友太热情系统一度崩溃
  4. nowcoder80D applese的生日
  5. 如果地球突然停止转动,那么接下来会发生什么?
  6. 小程序入门学习20--springboot之集成mybatis
  7. hdu2089不要62(数位dp)
  8. 正则维纳滤波matlab,正则化约束维纳滤波
  9. SocksCap64全局代理设置教程
  10. Matlab:求出n边凹多边形内角
  11. c++ map是有序还是无序的_实现有序map之go
  12. (九)DFI接口时序
  13. 一个中年SAP自由职业者的2020年终总结
  14. 大学课设之Mysql图书管理设计
  15. Nodejs 使用 Buffer 将图片转为 base64
  16. 高一计算机精英班班徽,高一8班班徽设计图案素材大全
  17. 码题集新手村600道(前300道)
  18. 台式电脑计算机硬盘清理,怎样清理台式电脑硬盘垃圾
  19. java多态app_【Java基础】Java中的多态
  20. 计算机专用英语词汇1000个!

热门文章

  1. 区块链需要c语言和linux嘛,区块链技术如何运作?使用什么开发语言?
  2. word段落每行首字怎么对齐_如何将emword/em中上下两行文字首字对齐?-word 左右对齐,word同一行不同...
  3. 三维渲染 体照明模型
  4. 用netstat -ano查看本机端口详解
  5. 如何PDF转Excel,手机和电脑都能用的方法
  6. 研磨设计模式之简单工厂模式-3
  7. 计算机考研301数学一攻略,国家海洋技术中心
  8. 分布式系统概念和设计-操作系统中的支持和设计
  9. python爬取B站动态的评论总数(不含用户评论内容详情)
  10. Building Huuuuuge Apps with AngularJS