30天自制操作系统:第二天

2024-05-31 17:48

本文主要是介绍30天自制操作系统:第二天,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

30天自制操作系统:第二天

1.将扇区加载到指定内存中。

在第一天的基础上进行代码的加工,第二天给程序中加入将引导扇区读入指定内存地址:0x7c00处,并使用软中断显示字符。

出现了一个问题,发现0扇区内出现莫名其妙的数据,经过分析,是编译器自己写入的启动数据。

优化后的代码为:

; hello-os
; TAB=4ORG		0x7c00			; このプログラムがどこに読み込まれるのかJMP		entry
entry:MOV		AX,0			; 初始化寄存器MOV		SS,AXMOV		SP,0x7c00MOV		DS,AXMOV		ES,AXMOV		SI,msg
putloop:MOV		AL,[SI]ADD		SI,1			CMP		AL,0JE		finMOV		AH,0x0e			; ?示一个文字MOV		BX,15			; 指定字符?色,不知道???色没?, 有知道的大?告?我下。INT		0x10			; ?用??bios,可以理解??用了一个接口。JMP		putloop
fin:HLT						; ?cpu停止防止cpu空?,等待指令,只要外部?生?化,比如按下??,移?鼠?,cpu就会醒?来???行。JMP		fin				; 死循?。msg:DB		0x0a, 0x0a		; 改行を2DB		"hello, uos1"DB		0x0a			; 改行DB		0RESB	0x7dfe-$		DB		0x55, 0xaa; 以下はブートセクタ以外の部分の記述DB		0xf0, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00RESB	4600DB		0xf0, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00RESB	1469432

经过下面命令编译后,生成helloos.img打开后如图所示,出现了一些代码中未实现的数据。

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

在这里插入图片描述
后来经过屏蔽代码,显示如图,证明是编译器写入的初始数据。
在这里插入图片描述
在这里插入图片描述
费了好长时间再调这个问题,请大佬们不要鄙视。

为什么是0x7c00处呢,这是bios规定的。0x00007c00-0x00007dff为启动区内容的装载地址

执行结果如图:
在这里插入图片描述

2.完善工程架构

去掉helloos.nas中55aa后边占字符的所有代码,只留下引导扇区内容。

; hello-os
; TAB=4ORG		0x7c00			; このプログラムがどこに読み込まれるのか; 以下は標準的なFAT12フォーマットフロッピーディスクのための記述JMP		entryDB		0x90DB		"HELLOIPL"		; ブートセクタの名前を自由に書いてよい(8バイト)DW		512				; 1セクタの大きさ(512にしなければいけない)DB		1				; クラスタの大きさ(1セクタにしなければいけない)DW		1				; FATがどこから始まるか(普通は1セクタ目からにする)DB		2				; FATの個数(2にしなければいけない)DW		224				; ルートディレクトリ領域の大きさ(普通は224エントリにする)DW		2880			; このドライブの大きさ(2880セクタにしなければいけない)DB		0xf0			; メディアのタイプ(0xf0にしなければいけない)DW		9				; FAT領域の長さ(9セクタにしなければいけない)DW		18				; 1トラックにいくつのセクタがあるか(18にしなければいけない)DW		2				; ヘッドの数(2にしなければいけない)DD		0				; パーティションを使ってないのでここは必ず0DD		2880			; このドライブ大きさをもう一度書くDB		0,0,0x29		; よくわからないけどこの値にしておくといいらしいDD		0xffffffff		; たぶんボリュームシリアル番号DB		"HELLO-OS   "	; ディスクの名前(11バイト)DB		"FAT12   "		; フォーマットの名前(8バイト)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に1を足すCMP		AL,0JE		finMOV		AH,0x0e			; 一文字表示ファンクションMOV		BX,15			; カラーコードINT		0x10			; ビデオBIOS呼び出しJMP		putloop
fin:HLT						; 何かあるまでCPUを停止させるJMP		fin				; 無限ループmsg:DB		0x0a, 0x0a		; 改行を2つDB		"hello, uos  "DB		0x0a			; 改行DB		0RESB	0x7dfe-$		; 0x7dfeまでを0x00で埋める命令DB		0x55, 0xaa

将文件名改为ipl.nas,因为要将程序逐渐修改成一个ipl(Initial program loader)

加入makefile文件,和makefile的执行批处理文件。

Makefile: 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: 这是批处理文件的编写规则,和linux下的shell类似,不讲了,自己学习。

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

使用make run编译代码,生成ipl.bin二进制文件,并生成空img,然后将ipl.bin写入空img中,最后运行。

其实只用ipl.bin放入qemu中启动也是可以的。ipl.bin只是一个启动扇区。

结果如下图所示:在这里插入图片描述
遗留问题:jmp开始直接跳过那段代码,为啥还不能删除?

实验证明可以删除,只是会影响他自己写的这个程序生成img文件而已。不影响。

在这里插入图片描述

这篇关于30天自制操作系统:第二天的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1018621

相关文章

shell脚本自动删除30天以前的文件(最新推荐)

《shell脚本自动删除30天以前的文件(最新推荐)》该文章介绍了如何使用Shell脚本自动删除指定目录下30天以前的文件,并通过crontab设置定时任务,此外,还提供了如何使用Shell脚本删除E... 目录shell脚本自动删除30天以前的文件linux按照日期定时删除elasticsearch索引s

TP-Link PDDNS服将于务6月30日正式停运:用户需转向第三方DDNS服务

《TP-LinkPDDNS服将于务6月30日正式停运:用户需转向第三方DDNS服务》近期,路由器制造巨头普联(TP-Link)在用户群体中引发了一系列重要变动,上个月,公司发出了一则通知,明确要求所... 路由器厂商普联(TP-Link)上个月发布公告要求所有用户必须完成实名认证后才能继续使用普联提供的 D

高效管理你的Linux系统: Debian操作系统常用命令指南

《高效管理你的Linux系统:Debian操作系统常用命令指南》在Debian操作系统中,了解和掌握常用命令对于提高工作效率和系统管理至关重要,本文将详细介绍Debian的常用命令,帮助读者更好地使... Debian是一个流行的linux发行版,它以其稳定性、强大的软件包管理和丰富的社区资源而闻名。在使用

龙蜥操作系统Anolis OS-23.x安装配置图解教程(保姆级)

《龙蜥操作系统AnolisOS-23.x安装配置图解教程(保姆级)》:本文主要介绍了安装和配置AnolisOS23.2系统,包括分区、软件选择、设置root密码、网络配置、主机名设置和禁用SELinux的步骤,详细内容请阅读本文,希望能对你有所帮助... ‌AnolisOS‌是由阿里云推出的开源操作系统,旨

五大特性引领创新! 深度操作系统 deepin 25 Preview预览版发布

《五大特性引领创新!深度操作系统deepin25Preview预览版发布》今日,深度操作系统正式推出deepin25Preview版本,该版本集成了五大核心特性:磐石系统、全新DDE、Tr... 深度操作系统今日发布了 deepin 25 Preview,新版本囊括五大特性:磐石系统、全新 DDE、Tree

mysql-8.0.30压缩包版安装和配置MySQL环境过程

《mysql-8.0.30压缩包版安装和配置MySQL环境过程》该文章介绍了如何在Windows系统中下载、安装和配置MySQL数据库,包括下载地址、解压文件、创建和配置my.ini文件、设置环境变量... 目录压缩包安装配置下载配置环境变量下载和初始化总结压缩包安装配置下载下载地址:https://d

30常用 Maven 命令

Maven 是一个强大的项目管理和构建工具,它广泛用于 Java 项目的依赖管理、构建流程和插件集成。Maven 的命令行工具提供了大量的命令来帮助开发人员管理项目的生命周期、依赖和插件。以下是 常用 Maven 命令的使用场景及其详细解释。 1. mvn clean 使用场景:清理项目的生成目录,通常用于删除项目中自动生成的文件(如 target/ 目录)。共性规律:清理操作

2024网安周今日开幕,亚信安全亮相30城

2024年国家网络安全宣传周今天在广州拉开帷幕。今年网安周继续以“网络安全为人民,网络安全靠人民”为主题。2024年国家网络安全宣传周涵盖了1场开幕式、1场高峰论坛、5个重要活动、15场分论坛/座谈会/闭门会、6个主题日活动和网络安全“六进”活动。亚信安全出席2024年国家网络安全宣传周开幕式和主论坛,并将通过线下宣讲、创意科普、成果展示等多种形式,让广大民众看得懂、记得住安全知识,同时还

Linux操作系统 初识

在认识操作系统之前,我们首先来了解一下计算机的发展: 计算机的发展 世界上第一台计算机名叫埃尼阿克,诞生在1945年2月14日,用于军事用途。 后来因为计算机的优势和潜力巨大,计算机开始飞速发展,并产生了一个当时一直有效的定律:摩尔定律--当价格不变时,集成电路上可容纳的元器件的数目,约每隔18-24个月便会增加一倍,性能也将提升一倍。 那么相应的,计算机就会变得越来越快,越来越小型化。

Java基础回顾系列-第二天-面向对象编程

面向对象编程 Java类核心开发结构面向对象封装继承多态 抽象类abstract接口interface抽象类与接口的区别深入分析类与对象内存分析 继承extends重写(Override)与重载(Overload)重写(Override)重载(Overload)重写与重载之间的区别总结 this关键字static关键字static变量static方法static代码块 代码块String类特