30天自制操作系统——第一天到第二天

第一天

光盘地址用的这个:30天自制操作系统光盘 - 夕雨714 - 博客园 (cnblogs.com)

Bz162下载地址:Bz - c.mos (vcraft.jp)

效果图

启动方式:D:\文档\学习科目\计算机基础\操作系统\操作系统实验\30dayMakeOS\1_day\tolset\helloos0 目录下打开!cons_nt.bat cmd中输入run

后面发现版本更换太快了,加个名字没啥用

2C 逗号,20 空格,0A 换行

OS made by BUPT LanYi

4F 53 20 6D 61 64 65 20 62 79 20 42 55 50 54 20 4C 61 6E 59 69 0A

共22组

在这里插入图片描述

经过简化,可以在helloos2中的helloos.nas文本中更改

再用一下命令生成img文件,再run

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

效果图跟上图一样

目前helloos2中为os


第二天

helloos.nas

; hello-os
; TAB=4

		ORG		0x7c00			; 装载地址,也就是程序的开头,引导扇区被读取的地址,IBM规定的

		JMP		entry			; 跳转
		DB		0x90
		DB		"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				; 僷乕僥傿僔儑儞傪巊偭偰側偄偺偱偙偙偼昁偢0
		DD		2880			; 偙偺僪儔僀僽戝偒偝傪傕偆堦搙彂偔
		DB		0,0,0x29		; 傛偔傢偐傜側偄偗偳偙偺抣偵偟偰偍偔偲偄偄傜偟偄
		DD		0xffffffff		; 偨傇傫儃儕儏乕儉僔儕傾儖斣崋
		DB		"HELLO-OS   "	; 僨傿僗僋偺柤慜乮11僶僀僩乯
		DB		"FAT12   "		; 僼僅乕儅僢僩偺柤慜乮8僶僀僩乯
		RESB	18				; 偲傝偁偊偢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			; SI加一
		CMP		AL,0
		JE		fin
		MOV		AH,0x0e			; 显示一个文字
		MOV		BX,15			; 指定字符颜色
		INT		0x10			; 软件中断指令,调用显卡BIOS,使用16号函数
		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

; 埲壓偼僽乕僩僙僋僞埲奜偺晹暘偺婰弎

		DB		0xf0, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00
		RESB	4600
		DB		0xf0, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00
		RESB	1469432

bios网页:(AT) BIOS - os-wiki (osask.jp)

内存分布图(AT)memorymap - os-wiki (osask.jp)

nask:汇编编译器的一种

文件更改:ipl.nas用来作为启动区

asm
makeimg
run

在这里插入图片描述


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
	copy 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 : # 删除掉中间文件
	-del ipl.bin
	-del ipl.lst

src_only : # 调用clean命令的同时删除img
	../z_tools/make.exe clean
	-del helloos.img


第三天

IPL: initial program loader 启动区,启动程序装载器

BIOS的0x13函数

  • AH = 0x02; (読み込み時)
  • AH = 0x03; (書き込み時)
  • AH = 0x04; (ベリファイ時)
  • AH = 0x0c; (シーク時)
  • AL = 処理するセクタ数; (連続したセクタを処理できる)
  • CH = シリンダ番号 & 0xff;
  • CL = セクタ番号(bit0-5) | (シリンダ番号 & 0x300) >> 2;
  • DH = ヘッド番号;
  • DL = ドライブ番号;
  • ES:BX = バッファアドレス; (ベリファイ時、シーク時にはこれは参照しない)
  • 返回值,即进位标志:
  • FLAGS.CF == 0 : エラーなし、AH == 0
  • FLAGS.CF == 1 : エラーあり、AHにエラーコード(リセットファンクションと同じ)
; harib00b/ipl.nas与昨天不同的部分

		MOV		AX,0x0820
		MOV		ES,AX
		MOV		CH,0			; 柱面0
		MOV		DH,0			; 磁头0
		MOV		CL,2			; 扇区2

		MOV		AH,0x02			; AH=0x02 : 读盘
		MOV		AL,1			; 1个山区
		MOV		BX,0
		MOV		DL,0x00			; 驱动器号
		INT		0x13			; 调用BIOS19号函数
		JC		error			; 进位标志如果是1的话,就跳转
		

与光盘不同,软盘磁盘两面都能记录数据

软式磁盘驱动器则称FDD,软盘片是覆盖磁性涂料的塑料片,用来储存数据文件,磁盘片的容量有5.25”的1.2MB,3.5”的1.44MB。

以3.5”的磁盘片为例,其容量的计算如下:
80(磁道)x18(扇区)x512 bytes(扇区的大小)x2(双面) = 1440 x1024 bytes = 1440 KB = 1.44MB
3.5英寸软盘片,其上、下两面各被划分为80个磁道,每个磁道被划分为18个扇区,每个扇区的存储容量固定为512字节。

段寄存器:

不管要指定内存的什么地址都必须同时指定段寄存器,默认为段寄存器DS,故DS必须预先指定为0,否则地址会加上这个数的16倍

make run
没啥好说的


; 03_day/harib00b
entry:
		MOV		AX,0			; 儗僕僗僞弶婜壔
		MOV		SS,AX
		MOV		SP,0x7c00
		MOV		DS,AX

; 僨傿僗僋傪撉傓

		MOV		AX,0x0820
		MOV		ES,AX
		MOV		CH,0			; 僔儕儞僟0
		MOV		DH,0			; 僿僢僪0
		MOV		CL,2			; 僙僋僞2

		MOV		SI,0			; 记录失败次数的寄存器
retry:
		MOV		AH,0x02			; AH=0x02 : 僨傿僗僋撉傒崬傒
		MOV		AL,1			; 1僙僋僞
		MOV		BX,0
		MOV		DL,0x00			; A僪儔僀僽
		INT		0x13			; 僨傿僗僋BIOS屇傃弌偟
		JNC		fin				; 没出错的话跳转到fin
		ADD		SI,1			; 往SI加1
		CMP		SI,5			; 比较SI和5
		JAE		error			; SI >= 5 跳转error
		MOV		AH,0x00
		MOV		DL,0x00			; A僪儔僀僽
		INT		0x13			; 重置驱动器
		JMP		retry

到目前还挺简单的,但是得补编译原理、数据库作业去了,感觉第三天内容好像挺多

欢迎关注B站账号,会发一些深度强化学习的学习资料
B站账号:哔哩哔哩 无名-易
Gitee账号:gitee账号
GitHub账号:GitHub

  • 7
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
操作系统的定义:是一组控制和管理计算机软硬件资源,为用户提供便捷使用计算机的程序的集合。 基本功能:1.进程管理 2.存储管理 3.文件管理 4.设备管理 5.作业管理 基本组成: 1、驱动程序 最底层bai的、直接控制和监视各类硬件的部分,它du们的职zhi责是隐藏硬件的具体细节,并向dao其他部分提供一个抽象的、通用的接口。 2、内核 操作系统之最内核部分,通常运行在最高特权级,负责提供基础性、结构性的功能。 3、支承库(亦作“接口库”) 是一系列特殊的程序库,它们职责在于把系统所提供的基本服务包装成应用程序所能够使用的编程接口(API),是最靠近应用程序的部分。例如,GNU C运行期库就属于此类,它把各种操作系统的内部编程接口包装成ANSI C和POSIX编程接口的形式。 4、外围 所谓外围,是指操作系统中除以上三类以外的所有其他部分,通常是用于提供特定高级服务的部件。例如,在微内核结构中,大部分系统服务,以及UNIX/Linux中各种守护进程都通常被划归此列。 操作系统的分类:1.批处理系统 2.分时操作系统 3.实时操作系统 4.分布式操作系统 5.网络操作系统 6.嵌入式操作系统 操作系统的特点: 1、并发性: 是在计算机bai系统中同时存在多个程序,宏观上看,du这些程序是同时向前推进的。 在单CPU上,这些并发执行的程序是交替在CPU上运行的。 程序并发性体现在两个方面: 用户程序与用户程序之间的并发执行。 用户程序与操作系统程序之间的并发。 2、共享性: 资源共享是操作系统程序和多个用户程序共用系统中的资源。 3、 随机性: 随机性指:操作系统的运行是在一个随机的环境中,一个设备可能在任何时间向处理机发出中断请求,系统无法知道运行着的程序会在什么时候做什么事情。 4、虚拟 (virtual)是指通过技术将一个物理实体变成若干个逻辑上的对应物。在操作系统中虚拟的实现主要是通过分时的使用方法。显然,如果n是某一个物理设备所对应的虚拟逻辑设备数,则虚拟设备的速度必然是物理设备速度的1/n。 5、异步性:不确定性。同一程序和数据的多次运行可能得到不同的结果;程序的运行时间、运行顺序也具有不确定性;外部输入的请求、运行故障发生的时间难以预测。这些都是不确定性的表现。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值