写点什么

自制操作系统系列(一):显示 hello world 开始旅程

作者:
  • 2022 年 9 月 29 日
    四川
  • 本文字数:1266 字

    阅读完需:约 4 分钟

简介

最近看了不少底层方面的东西,但还是得动手才能真正掌握,感觉操作系统也能整整了,于是就有了这系列,惯例的以 hello 开始

准备工作

本文操作的主要是下面的资料来源:


  • 《30 天自制操作系统》:大部头,读完真花不少时间

  • 《极客时间:操作系统实战 45 讲》


资料中有些工具不太好弄,所以会和他们有些区别,首先我们安装下两个软件:


  • NASM:汇编语言编译器,第一本书是用自写的 nask,但找不到啊,只能网上搜索,然后用这个了(可能后面会导致一些困难,但也没办法了,总有困难在前方)

  • qemu:虚拟机,用来启动我们的操作系统,vm 和物理机感觉太麻烦了,这个直接用一行命令启动就行了,很方便


下载链接对应的点击跳转即可,下载完成后,一路点点确认即可,这个应该轻车熟路了吧


博主的系统是 window10,不同系统的注意软件的适配下载

hello 编写

我们开始新建一个工程文件夹,博主的是 operating-system,你们随意


然后新建一个 myOS.asm 文件,输入下面的代码(先原本照抄再说,虽然以前在学校学过,但现在基本忘了)


; cherry-osORG 0x7c00 ;指定程序装载的位置
;下面用于描述FAT12格式的软盘JMP entryDB 0x90DB "CHRRYIPL" ;启动区的名称可以是任意的字符串,但长度必须是8字节DW 512; 每一个扇区的大小,必须是512字节DB 1 ;簇的大小(必须为1个扇区)DW 1 ;FAT的起始位置(一般从第一个扇区开始)DB 2 ;FAT的个数 必须是2DW 224;根目录的大小 一般是224项DW 2880; 该磁盘的大小 必须是2880扇区DB 0xf0;磁盘的种类 必须是0xf0DW 9;FAT的长度 必须是9扇区DW 18;1个磁道(track) 有几个扇区 必须是18DW 2; 磁头个数 必须是2DD 0; 不使用分区,必须是0DD 2880; 重写一次磁盘大小DB 0,0,0x29 ;扩展引导标记 固定0x29DD 0xffffffff ;卷列序号DB "CHERRY-OS " ;磁盘的名称(11个字节)DB "FAT12 " ;磁盘的格式名称(8字节)TIMES 18 DB 0; 先空出18字节 这里与原文写法不同
;程序核心entry: MOV AX,0 ;初始化寄存器 MOV SS,AX MOV SP,0x7c00 MOV DS,AX MOV ES,AX MOV SI,msgputloop: MOV AL,[SI] ADD SI,1 CMP AL,0 JE fin MOV AH,0x0e ;显示一个文字 MOV BX,15 ;指定字符的颜色 INT 0x10 ;调用显卡BIOS JMP putloopfin: HLT ;CPU停止,等待指令 JMP fin ;无限循环msg: DB 0x0a , 0x0a ;换行两次 DB "hello, my OS" DB 0x0a DB 0 TIMES 0x1fe-($-$$) DB 0 ;填写0x00,直到0x001fe DB 0x55, 0xaa
复制代码

编译运行

正常情况下,我们需要把上面安装的两个软件加入环境变量中,但简单点,直接使用绝对路径搞定它(注销用户麻烦)


先进入我们的工程目录,启动 powershell 或者 cmd 都行


使用 nasm 命令,将文件编程 img,下面是博主本地的安装路径


D:\software\NASM\nasm.exe .\myOS.asm -o .\myOS.img
复制代码


运行完成后,会在工程目录下生成 myOS.img 文件


接下来,使用 qemu 运行我们的镜像文件


 D:\software\qemu\qemu-system-i386.exe .\myOS.img
复制代码


可以看到下面的启动窗口,嘿嘿嘿,成功的走出第一步


参考链接

发布于: 刚刚阅读数: 4
用户头像

关注

还未添加个人签名 2018.09.09 加入

代码是门手艺活,也是门艺术活

评论

发布
暂无评论
自制操作系统系列(一):显示hello world开始旅程_操作系统_萧_InfoQ写作社区