首页 > 其他分享 >30天自制操作系统day1&day2

30天自制操作系统day1&day2

时间:2025-01-21 17:20:39浏览次数:1  
标签:img .. DB 30 day2 MOV ipl day1 tools

day1:

  二进制编辑器bz:https://www.vcraft.jp/soft/bz.html
  初识机器语言和汇编语言,并分别用其实现了软盘映像文件(完全用作者的复制粘贴)。

  二进制编辑器中输入内容如下:
  只有图中部分有非0内容,其余部分均为0,最末行首地址是001440。



  保存为helloos.img,即为一个极简的二进制的软盘映像文件。

  没有软盘可以用作者提供的模拟器。
  创建run.bat,内容:
copy helloos.img ..\z_tools\qemu\fdimage0.bin ..\z_tools\make.exe -C ../z_tools/qemu
  打开cmd进入helloos.img所在目录,运行run.bat

day2:

2.1作者推荐文本编辑器

  TeraPad:
  NotePad++:http://notepad-plus-plus.org/

2.2相关指令介绍

  helloos.nas节选

点击查看代码
; hello-os:
; TAB=4
 ORG 0x7c00 ; 指明程序的装载
地址
; 以下的记述用于标准FAT12格式的软盘
 JMP entry
 DB 0x90---(中略)---
; 程序核心
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 ; 给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 ; 换行2次
 DB "hello, world"
 DB 0x0a ; 换行
 DB 0

  MOV WORD [678],123:表示将123用16位二进制数表示,若机器按字节编址,则存入以678为首地址的相邻两个存储单元。
  HLT:CPU停止动作,处于休眠状态,外部发生变化之后CPU就会继续执行程序。
  ORG:指定把程序装载入内存的具体地址,使用ORG指令时要注意,不是所有的内存地址都可以使用,有一部分是BIOS程序和中断向量表,ORG的目的操作数不能在这些部分的范围内。内存中无法使用的部分具体取决于我们电脑的出厂设置。
  内存:CPU的存储能力很差,内存看作CPU的外部存储器。

2.3制作启动区

  启动区仅需要最初的512字节,故只保留helloos.nas最初的512字节,并将其文件名改为ipl.nas
  ipl.nas内容如下:

点击查看代码
; hello-os
; TAB=4

		ORG		0x7c00			; 程序载入内存的地址

; 以下是标准FAT12格式软盘的记述

		JMP		entry
		DB		0x90
		DB		"HELLOIPL"		; 引导扇区的名称,可更改(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				; 一个磁道有多少个扇区(必须是18)
		DW		2				; 头数(是磁盘头吗?)(必须为2)
		DD		0				; 因为没有使用分区,所以这里一定是0
		DD		2880			; 再写一次这个驱动器的大小
		DB		0,0,0x29		; 价格(?
		DD		0xffffffff		; 卷序列号
		DB		"HELLO-OS   "	; 磁盘名(共11字节)
		DB		"FAT12   "		; 磁盘格式是FAT12(共8字节)
		RESB	18				; 连续18个字节的0

; 程序主体

entry:
		MOV		AX,0			; 通用寄存器AX初始化
		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, world"
		DB		0x0a			; 换行
		DB		0

		RESB	0x7dfe-$		; 从当前地址到地址0x7dfe用0x00填充

		DB		0x55, 0xaa
  FAT12文件系统:每个FAT项占12bit。
  FAT:文件记录表,记录每个文件的各个数据块存放在磁盘的哪个位置。
  簇:文件系统用来组织和管理磁盘空间的基本分配单位。一个群集由若干连续的扇区组成。
  卷序列号:为每个卷提供一个唯一的标识符,使得操作系统能够区分不同的存储设备和分区。

2.4makefile入门

  首先新建一个文本文件,并输入以下内容:

点击查看代码
#文件生成规则
ipl.bin : ipl.nas Makefile                      #目标:依赖
 ../z_tools/nask.exe ipl.nas ipl.bin ipl.lst    #需要执行的命令
helloos.img : ipl.bin Makefile                  #最终生成的镜像文件名为helloos.img,依赖是ipl.bin和Makefile
 ../z_tools/edimg.exe                           #使用工具edimg.exe,加载fdimg0at.tek文件作为基础镜像
imgin:../z_tools/fdimg0at.tek \                 #将ipl.bin文件的前512个字节读入fdimg0at.tek中,写入fggimg0at.tek时从字符偏移量0开始,即文件开头开始写
 wbinimg src:ipl.bin len:512 from:0 to:0 
imgout:helloos.img                              #将得到的镜像文件保存为helloos.img
  然后修改文件名为makefile或Makefile(大小写敏感)(另注:mekefile文件名一般就是这两个)
  makefile文件相当于将需要的gcc指令集成到一个脚本中。   每个mekefile规则一般由三部分组成:
  目标:本规则最后得到的文件。
  依赖:实现目标需要的前提文件或目标。Makefile的执行过程不是基于语句顺序的,而是基于依赖链的顺序的。
  命令:实现目标需要执行的一系列命令,通过这一系列命令,可以使依赖形成目标。
  作者给出的完整makefile如下,:
点击查看代码

# 默认动作

default :
	../z_tools/make.exe img

# 镜像文件生成

ipl.bin : ipl.nas Makefile
	../z_tools/nask.exe ipl.nas ipl.bin ipl.lst

helloos.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.bin

img :
	../z_tools/make.exe -r helloos.img

run :
	../z_tools/make.exe img
	cp helloos.img ..\z_tools\qemu\fdimage0.bin
	../z_tools/make.exe -C ../z_tools/qemu

install :
	../z_tools/make.exe img
	../z_tools/imgtol.com w a: helloos.img

#删除掉最终成果以外的所有中间生成文件
clean :
	-rm -f ipl.bin
	-rm -f ipl.lst

src_only :
	../z_tools/make.exe clean
	-rm -f helloos.img

标签:img,..,DB,30,day2,MOV,ipl,day1,tools
From: https://www.cnblogs.com/abcdsxz/p/18683880

相关文章

  • SQL Server 2005部署备份任务.120308
    环境:SQLServer2005任务:1,每日凌晨1点给本地sqlserver做本地完整备份,且只保留7天的本地备份;2,每日凌晨5点将本地的备份打包上传到存储服务器。思路:1,sqlserver2005不支持SQLServer2000的sqlmaint命令,所以,需要通过数据库维护计划进行备份,而不能一步成型的写bat脚本;2,备份地址......
  • 30天开发操作系统 第 16 天 -- 多任务 v2.0
    前言大家好!昨天我们已经实践了很多关于多任务的内容,不过今天我们还得继续讲多任务。可“老是讲多任务都听腻了啊!”,但多任务真的非常重要(当然,如果你不想做一个多任务的操作系统那就不重要啦)。从咱们制作的操作系统角度来说,希望大家能够在充分做好多任务机制的基础上,再......
  • Java从零到1的开始-Day13
    一、String1.String介绍1.概述:String类代表字符串2.特点: a.Java程序中的所有字符串字面值(如"abc")都作为此类的实例(对象)实现  凡是带双引号的都是String的对象  Strings="abc"   String是数据类型,是一个字符串类型   s:对象名  ......
  • 每日学习30分轻松掌握CursorAI:Cursor AI使用技巧总结
    CursorAI使用技巧总结一、学习回顾与最佳实践总结1.快捷键使用总结表类别快捷键功能描述代码生成Ctrl+K通过自然语言生成代码代码补全Tab接受代码建议代码重构Ctrl+R重命名变量/函数AI对话Ctrl+L打开AI对话窗口代码导航Ctrl+P快速文件切换终端操作Ctrl+`打开......
  • 2025春秋杯DAY2DAY3部分wp
    2025春秋杯DAY2DAY3部分wpDAY2WEBeasy_ser源码如下<?php//error_reporting(0);functionPassWAF1($data){$BlackList=array("eval","system","popen","exec","assert","phpinfo","shell_exec......
  • 最新版Edge浏览器加载ActiveX控件技术——alWebPlugin中间件V2.0.30_alpha-春节版发布
     allWebPlugin简介   allWebPlugin中间件是一款为用户提供安全、可靠、便捷的浏览器插件服务的中间件产品,致力于将浏览器插件重新应用到所有浏览器。它将现有ActiveX控件直接嵌入浏览器,实现插件加载、界面显示、接口调用、事件回调等。支持Chrome、Firefox、Edge、360......
  • 2025.1.18——1300
    2025.1.18——1300A1300Thereare\(n\)citieslocatedonthenumberline,the\(i\)-thcityisinthepoint\(a_i\).Thecoordinatesofthecitiesaregiveninascendingorder,so\(a_1<a_2<\dots<a_n\).Thedistancebetweentwoci......
  • 前端开发day1
    day1目的:开发一个平台(网站) -前端开发:HTML、CSS、JavaScript -Web框架:接收请求并处理 -MySQL数据库:存储数据地方快速上手: 基于FlaskWeb框架让你快速搭建一个网站出来。 深入学习: 基于Django框架(主要)1,快速开发网站pipinstallflaskfromflaskimportFlaskap......
  • H30: 撞球(选作)
    (......
  • 神器登场,30 + 超实用功能合为一体,这款软件简直神了!
    点击蓝字关注我作者|风雨软件前言今天,为大家隆重介绍一款功能强大的综合工具,它涵盖PDF转换、Word转换、Excel表格处理、OCR识别等30余项实用功能。从此,无需再四处搜罗整理其他软件,对于广大打工人来说,这无疑是一款神器!千峰办公助手  办公综合工具千峰办公......