30天自制操作系统第3天harib00g

2023-10-27

30天自制操作系统

第3天进入32位模式并导入 C 语言

确认操作系统的执行情况

harib00g
准备材料(windows环境)
开始实验
  1. 在tolset文件夹下创建子文件侠harib00g;

  2. 打开记事本,输入以下代码并另存为 !cons_nt.bat文件(windows 批处理),存放在harib00g文件夹中;

cmd.exe

ps:当然也可以直接使用 win + r 快捷键也可以,不过最好还是创建一个比较好。因为以后打开时不需要再麻烦了。
3. 打vc code,输入以下代码并保存为 haribote.nas,存放在harib00g文件夹中。

; haribote-os
; TAB=4

		ORG		0xc200			; 这个程序将要被装载到内存的什么地方呢?

		MOV		AL,0x13			; VGA显卡,302x200x8位彩色
		MOV		AH,0x00
		INT		0x10
fin:
		HLT
		JMP		fin
  1. 打开 VC code 创建 ipl10.nas 文件,输入以下代码,也存放的harib00g中;
; haribote-ipl
; TAB=4

CYLS	EQU		10				; 要读取到什么程度

		ORG		0x7c00			; 启动装载程序

; 以下记述用于标准FAT12格式软盘

		JMP		entry
		DB		0x90
		DB		"HARIBOTE"		; 磁盘名称(可以是任意字符串)
		DW		512				; 每个扇区的大小(必须是512)
		DB		1				; 簇的大小(必须为一个扇区)
		DW		1				; FAT12的起始位置(一般从第一个扇区开始
		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		"HARIBOTEOS "	; 磁盘的名称(11字节)
		DB		"FAT12   "		; 磁盘格式名称(8字节)
		RESB	18				; 先空出18字节

; 程序主体

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
readloop:
		MOV		SI,0			; 记录失败次数的寄存器
retry:
		MOV		AH,0x02			; AH=0x02 : 读入磁盘
		MOV		AL,1			; 1 个扇区
		MOV		BX,0
		MOV		DL,0x00			; A 驱动器
		INT		0x13			; 调用磁盘BIOS
		JNC		next			; 没出错时跳转到next
		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
next:
		MOV		AX,ES			; 把内存地址后移0x200
		ADD		AX,0x0020
		MOV		ES,AX			; 因为没有 ADD ES,0x020 指令,所以这里稍微绕个弯
		ADD		CL,1			; CL 加 1
		CMP		CL,18			; 比较 CL 与 18
		JBE		readloop		; 如果 CL <= 18,则跳转至readloop 
		MOV		CL,1
		ADD		DH,1
		CMP		DH,2
		JB		readloop		; 如果 DH < 2, 则跳转到readloop
		MOV		DH,0
		ADD		CH,1
		CMP		CH,CYLS
		JB		readloop		; 如果 CH < CYLS,则跳转至readloop

; 因为看完了实行haribote.sys

		MOV		[0x0ff0],CH		; IPL读到什么地方结束
		JMP		0xc200

error:
		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		; 换行两次
		DB		"load error"
		DB		0x0a			; 换行
		DB		0

		RESB	0x7dfe-$		; 重复0x00一直到0x7dfe

		DB		0x55, 0xaa

  1. 打开记事本,输入以下代码,另存为 make.bat, 同样放到harib00g中;
..\z_tools\make.exe %1 %2 %3 %4 %5 %6 %7 %8 %9
  1. 创建 Makefile,并输入以下代码并存放到harib00g中;
TOOLPATH = ../z_tools/
MAKE     = $(TOOLPATH)make.exe -r
NASK     = $(TOOLPATH)nask.exe
EDIMG    = $(TOOLPATH)edimg.exe
IMGTOL   = $(TOOLPATH)imgtol.com
COPY     = copy
DEL      = del

# 默认

default :
	$(MAKE) img

# 文件生成规则

ipl10.bin : ipl10.nas Makefile
	$(NASK) ipl10.nas ipl10.bin ipl10.lst

haribote.sys : haribote.nas Makefile
	$(NASK) haribote.nas haribote.sys haribote.lst

haribote.img : ipl10.bin haribote.sys Makefile
	$(EDIMG)   imgin:../z_tools/fdimg0at.tek \
		wbinimg src:ipl10.bin len:512 from:0 to:0 \
		copy from:haribote.sys to:@: \
		imgout:haribote.img

# 命令

img :
	$(MAKE) haribote.img

run :
	$(MAKE) img
	$(COPY) haribote.img ..\z_tools\qemu\fdimage0.bin
	$(MAKE) -C ../z_tools/qemu

install :
	$(MAKE) img
	$(IMGTOL) w a: haribote.img

clean :
	-$(DEL) ipl10.bin
	-$(DEL) ipl10.lst
	-$(DEL) haribote.sys
	-$(DEL) haribote.lst

src_only :
	$(MAKE) clean
	-$(DEL) haribote.img

编译及运行
  1. 双击 !cons_nt.bat,并在打开的命令行中输入 make run
    在这里插入图片描述
  2. VMware中运行结果,如下图
    在这里插入图片描述
    ps: 结果就是这样,因为本次实验的目的是确认操作系统的执行情况,光标没有了且输出了全黑屏,不过以后会有更精彩了。敬请期待!
    好的今天到这里harib00g就张结束了,请大家多多支持!!!
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

30天自制操作系统第3天harib00g 的相关文章

  • MyBatis总结(3)---映射文件的元素配置

    MyBatis 1 简介 映射文件是MyBatis框架中十分重要的文件 可以说 MyBatis框架的强大之处就体现在映射文件的编写上 映射文件的命名一般是实体类名 Mapper xml 例 Student类对应的映射文件是StudentMa
  • 删除PostgreSQL数据库中的所有表

    1 使用navicat建立连接 代码中的配置 jdbc driverClassName org postgresql Driver jdbc url jdbc postgresql localhost 5432 postgres jdbc
  • Python程序运行出现TypeError: run() missing 1 required positional argument: ‘test’

    TypeError run missing 1 required positional argument test 文章目录 源代码 错误类型 解决办法 源代码 import unittest from app import BASE DI
  • 积木画-蓝桥杯(dp)

    试题 G 积木画 问题描述 小明最近迷上了积木画 有这么两种类型的积木 分别为 I 型 大小为 2 个单位面积 和 L 型 大小为 3 个单位面积 同时 小明有一块面积大小为 2 N 的画布 画布由 2 N 个 1 1 区域构成 小明需要用
  • CSS布局-解决flex布局下多行元素既可以均匀对齐最后一行也可以从左到右排列

    首先 你有没有遇到过这种情况 你既想让它均匀分布 还想让最后一行从左向右排列 此时你的代码应该是这样的 box display flex justify content space evenly flex wrap wrap box inf
  • 在工作中学习,在学习中工作

    2011年八月第二周 时间还是和以前一样过的那么快 一周的时间转眼就过去了 这一周 对工作中所需的知识点进行了两天的培训 其余的时间都是Flex及其开源框架Caringorm的学习 因为之前没有接触过Flex 所以现在的学习是一种 即学式
  • 自定义注解注入属性值(基于类构造方法)

    本文将举例说明如何通过构造方法来处理注解 实现属性注入 自定义注解Name 实现超类 定义注解处理方法 子类使用注解 自定义注解Name 定义一个注解 Name Name注解可以接收一个String类型的属性 并且可以使用在类或者属性上 T
  • 机器学习——入门

    机器学习算法分类 监督学习 目标值是类别 gt 分类问题 k 近邻算法 贝叶斯分类 决策树与随机森林 逻辑回归 目标值是连续型的数据 gt 回归问题 线性回归 岭回归 无监督学习 没有目标值 gt 无监督学习 聚类k means 机器学习开
  • AD7124-4 精度

    AD7124芯片 是属于AD公司的较新产品 高达24位的精度 确实让人眼馋 究竟如何呢 寄存器配置顺序 1 AD上电后 先关闭SPI片选 2 使能开启单片机的 SPI 3 复位设备及所有内部寄存器 发送64位的1 也就是8个0xFF 4 读
  • C语言--weak的作用

    weak 顾名思义是 弱 的意思 在汇编中 在函数名称后面加 WEAK 来表示 而在 C语言中 在函数名称前面加上 weak 修饰符来表示 这样的函数我们称为 弱函数 被 WEAK 或 weak 声明的函数 我们可以在自己的文件中重新定义一

随机推荐

  • 获取当年、当月的开始结束日期

    import java time LocalDate import java time LocalDateTime import java time LocalTime import java time temporal TemporalA
  • QT 如何用多线程实现数据处理和界面显示刷新速度够快

    Qt 支持多线程编程 因此可以通过创建多个线程来实现数据处理和界面显示刷新的高效实现 一种常用的做法是 在一个线程中处理数据 另一个线程负责界面显示的更新 数据处理线程可以通过信号和槽的机制来通知界面显示线程更新界面 这种方法的好处是 数据
  • AI安全初探——利用深度学习检测DNS隐蔽通道

    AI安全初探 利用深度学习检测DNS隐蔽通道 目录 AI安全初探 利用深度学习检测DNS隐蔽通道 1 DNS 隐蔽通道简介 2 算法前的准备工作 数据采集 3 利用深度学习进行DNS隐蔽通道检测 4 验证XShell的检测效果 5 结语 1
  • 了解关于Hadoop的12个事实

    原文 http os 51cto com art 201206 345249 htm 了解关于Hadoop的12个事实 本文中 分析师给出了关于Hadoop的12点事实 帮助您认识一个真实的Apache Hadoop生态系统 作者 茶一峰
  • uni-app,解决方案, 已存在待跳转页面,请不要连续多次跳转页面问题

    问题的解决思路 设置全局变量flag 以及封装跳转函数 设置定时器不允许几秒钟重复跳转 1 如果采用 uni navigateTo 跳转 jumpFlag function path 跳转开关 if getApp globalData is
  • Arduino基础项目篇-基于Arduino的智能小车

    从这篇开始 后续会陆陆续续写一些自己入门单片机以来做过的一些项目教程 y由于不是现在做的 所以我可能没有调试的照片啥之类的 而且做的东西大多都拆了 我刚入门Arudino时 做的第一个项目 就是Arduino智能小车 做出来的小车具有红外避
  • 华大单片机KEIL报错_WEAK的解决方案

    1 Keil编译无法识别 WEAK时的问题清单如下 在使用Keil编译有时出现无法识别 WEAK的问题 截图如下 提示的错误信息如下 mcu common interrupts hc32l13x c 72 error 77 D this d
  • ACL技术-------访问控制列表

    1 ACL原理 设备根据事先设置好的报文匹配规则对经过该设备的流量进行匹配 然后对报文执行预先设定的处理动作 2 ACL功能 1 访问控制 在流量流入或者流出的接口上匹配流量 动作 允许 permit 拒绝 deny 2 抓取流量 3 AC
  • Error in py_run_file_impl(file, local, convert) : ModuleNotFoundError: No module named ‘igraph‘

    在HPC平台上跑我的R语言代码 结果一直报错说 Error in py run file impl file local convert ModuleNotFoundError No module named igraph 我就知道是我R语
  • 单片机--USART

    目录 1 通信的基础知识 2 USART 3 串口通信协议 4 相关寄存器 串口控制寄存器 波特率寄存器 中断和状态寄存器 编辑 数据发送寄存器 数据接收寄存器 5 USART功能框图 6 串口发送实验 实验要求 1 观察实物 2 分析原理
  • 路由与路由表简介

    路由的概念 从字面上来说 路由 就是路径选择的意思 路由是指网络设备通过网络将信息正确传输到指定目的地的方式 而路由器正是这样的 网络设备 它可以根据目标网络选择 最优 的路径来决定下一跳跳向哪个路由器 但是什么是最优的路径 最优并不意味着
  • Go语言网络编程(socket编程)TCP粘包

    1 TCP粘包 服务端代码如下 socket stick server main go func process conn net Conn defer conn Close reader bufio NewReader conn var
  • 12306登录验证码识别

    最近在研究12306验证码识别 前期的12306查询验证码识别已经上线了 详见http download csdn net download ghost man 10160932的博客 里面的12306查询验证码已经上线了 可以去体验一下
  • linux服务器前后端部署遇到的问题以及解决办法

    nginx部署前端 将静态资源打包上传到自己指定的目录 nginx 配置 到这里 前端就部署完成了 当时访问的时候发现只能加载html页面 所有的js css 图片等等全部404 原因是没有指定静态资源的绝对路径 因为我用的宝塔面板的ngi
  • 如何添加Burp Suite添加https证书

    Burp Suite是一款强大的安全测试工具 可以用来设置代理 抓取http数据包 如果添加了https证书 就可以抓取https数据包 一 前期准备 联网的电脑一台 Burp Suite软件 firefox浏览器 并安装proxy swi
  • 第1195期机器学习日报(2017-12-26)

    机器学习日报 2017 12 26 Moments in Time IBM MIT联合提出最新百万规模视频动作理解数据集 ChatbotsChina 2017深度学习框架大事记 wx SWATS 自动由Adam切换为SGD而实现更好的泛化性
  • HTML与计算机代码

    目录 计算机代码 HTML 计算机代码格式 HTML 键盘格式 实例 HTML 样本格式 实例 HTML 代码格式 实例 实例 实例 HTML 变量格式化 实例 HTML 计算机代码元素 一个完整的实例 计算机代码 var person f
  • 2023年第十四届蓝桥杯单片机开放与设计省赛微析与经验分享

    前言 2023年4月8日 就在昨天 本人刚参与了第十四届蓝桥杯单片机开放与设计省赛 整体做下来 且不谈客观题 今年的程序题 个人感觉有点像大杂烩 题量大 细节多 而且有些要求定义不够清晰 所以本人这次做的不够完美 并且因为时间问题有些小功能
  • 教妹学Java(七):究竟什么是JVM?

    大家好 我是沉默王二 一个和黄家驹一样身高 和刘德华一样颜值的程序员 本篇文章通过我和三妹对话的形式来谈一谈 究竟什么是 JVM 教妹学 Java 没见过这么有趣的标题吧 语不惊人死不休 没错 本篇文章的标题就是这么酷炫 接受不了的同学就别
  • 30天自制操作系统第3天harib00g

    30天自制操作系统 第3天进入32位模式并导入 C 语言 确认操作系统的执行情况 harib00g 准备材料 windows环境 VMware Workstation Visual Studio Code 程序和源代码 https pan