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

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

简介

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

准备工作

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

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

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

  • NASM:汇编语言编译器,第一本书是用自写的nask,但找不到啊,只能网上搜索,然后用这个了(可能后面会导致一些困难,但也没办法了,总有困难在前方)
  • qemu:虚拟机,用来启动我们的操作系统,vm和物理机感觉太麻烦了,这个直接用一行命令启动就行了,很方便

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

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

hello编写

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

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

; cherry-os
ORG 0x7c00 ;指定程序装载的位置

;下面用于描述FAT12格式的软盘
JMP entry
DB 0x90
DB "CHRRYIPL" ;启动区的名称可以是任意的字符串,但长度必须是8字节
DW 512; 每一个扇区的大小,必须是512字节
DB 1 ;簇的大小(必须为1个扇区)
DW 1 ;FAT的起始位置(一般从第一个扇区开始)
DB 2 ;FAT的个数 必须是2
DW 224;根目录的大小 一般是224项
DW 2880; 该磁盘的大小 必须是2880扇区
DB 0xf0;磁盘的种类 必须是0xf0
DW 9;FAT的长度 必须是9扇区
DW 18;1个磁道(track) 有几个扇区 必须是18
DW 2; 磁头个数 必须是2
DD 0; 不使用分区,必须是0
DD 2880; 重写一次磁盘大小
DB 0,0,0x29 ;扩展引导标记 固定0x29
DD 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,msg
putloop:
    MOV AL,[SI]
    ADD SI,1
    CMP AL,0
    JE fin
    MOV AH,0x0e ;显示一个文字
    MOV BX,15 ;指定字符的颜色
    INT 0x10 ;调用显卡BIOS
    JMP putloop
fin:
    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

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

image.png

参考链接

相关文章
|
Web App开发 安全 算法
Rust开发操作系统系列:全新Hello World系统
正如标题,这篇文章是关于如何用Rust开发一个船新的操作系统,而这个操作系统只会打印一句话: Hello World 在这之前,我们需要了解有关计算机底层的基础知识,包括IO、接口、网络底层等等,当然如果你是老手或者是对Rust一窍不通的人,通过这篇文章也能清楚的了解如何制作一个微型的、有Terminal的操作系统 首先让我们了解一下Rust,[Rust是一门系统编程语言 ,专注于安全,尤其是并发安全,支持函数式和命令式以及泛型等编程范式的多范式语言。
5824 0
自制操作系统-最简单的系统hello World
版权声明:您好,转载请留下本人博客的地址,谢谢 https://blog.csdn.net/hongbochen1223/article/details/45594039 按照自制操作系统的步骤,首先需要使用二进制编辑器编辑一个.img文件,编辑完成之后,可以有两种运行方式: 1:可以将该img文件烧进软盘文件中,重新启动计算机 2:使用qume虚拟机运行。
1101 0
|
2月前
|
安全 Linux 数据安全/隐私保护
Vanilla OS:下一代安全 Linux 发行版
【10月更文挑战第30天】
83 0
Vanilla OS:下一代安全 Linux 发行版
|
11天前
|
弹性计算 自然语言处理 Ubuntu
OS Copilot-操作系统智能助手-Linux新手小白的福音
OS Copilot是由阿里云推出的操作系统智能助手,专为Linux新手设计,支持自然语言问答、辅助命令执行等功能,极大提升了Linux系统的使用效率。用户只需通过简单的命令或自然语言描述问题,OS Copilot即可快速提供解决方案并执行相应操作。例如,查询磁盘使用量等常见任务变得轻松快捷。此外,它还支持从文件读取复杂任务定义,进一步简化了操作流程。虽然在某些模式下可能存在小问题,但总体上大大节省了学习和操作时间,提高了工作效率。
78 2
OS Copilot-操作系统智能助手-Linux新手小白的福音
|
3天前
|
弹性计算 运维 Ubuntu
os-copilot在Alibaba Cloud Linux镜像下的安装与功能测试
我顺利使用了OS Copilot的 -t -f 功能,我的疑惑是在换行的时候就直接进行提问了,每次只能写一个问题,没法连续换行更有逻辑的输入问题。 我认为 -t 管道 功能有用 ,能解决环境问题的连续性操作。 我认为 -f 管道 功能有用 ,可以单独创建可连续性提问的task问题。 我认为 | 对文件直接理解在新的服务器理解有很大的帮助。 此外,我还有建议 可以在非 co 的环境下也能进行连续性的提问。
41 7
|
4天前
|
存储 运维 安全
深入解析操作系统控制台:阿里云Alibaba Cloud Linux(Alinux)的运维利器
本文将详细介绍阿里云的Alibaba Cloud Linux操作系统控制台的功能和优势。
25 5
|
5天前
|
安全 大数据 Linux
云上体验最佳的服务器操作系统 - Alibaba Cloud Linux | 飞天技术沙龙-CentOS 迁移替换专场
本次方案的主题是云上体验最佳的服务器操作系统 - Alibaba Cloud Linux ,从 Alibaba Cloud Linux 的产生背景、产品优势以及云上用户使用它享受的技术红利等方面详细进行了介绍。同时,通过国内某社交平台、某快递企业、某手机客户大数据业务 3 大案例,成功助力客户实现弹性扩容能力提升、性能提升、降本增效。 1. 背景介绍 2. 产品介绍 3. 案例分享
|
2月前
|
NoSQL Linux PHP
如何在不同操作系统上安装 Redis 服务器,包括 Linux 和 Windows 的具体步骤
本文介绍了如何在不同操作系统上安装 Redis 服务器,包括 Linux 和 Windows 的具体步骤。接着,对比了两种常用的 PHP Redis 客户端扩展:PhpRedis 和 Predis,详细说明了它们的安装方法及优缺点。最后,提供了使用 PhpRedis 和 Predis 在 PHP 中连接 Redis 服务器及进行字符串、列表、集合和哈希等数据类型的基本操作示例。
98 4
|
2月前
|
人工智能 安全 Linux
|
3月前
|
Unix 物联网 大数据
操作系统的演化与比较:从Unix到Linux
本文将探讨操作系统的历史发展,重点关注Unix和Linux两个主要的操作系统分支。通过分析它们的起源、设计哲学、技术特点以及在现代计算中的影响,我们可以更好地理解操作系统在计算机科学中的核心地位及其未来发展趋势。