从零开始创造自己的操作系统(1):引导扇区

Bentley ORD(openroads designer) 二次开发(BIM)第七节 在ORD SDK中调用MicroStation SDK 从课程刚开始的时候我们就通过学习,了解了ORD的开发是基于MicroStation的,ORD SDK的接口发布的时候也对MicroStation SDK也做了一次发布。这一章将以我们对ORD SDK知识的了解为基础,使用ORD SDK的接口读取道路几何信息、计算桩号,然后再使用MicroStation SDK 读取地形数据和计算投影点的位置,并创建一组方柱形状的Soild。计算方柱底部坐标要经过两大步骤,通过路线的桩号及偏移距离去定位方柱的平面位置,通过方柱的平面位置计算数字地面模型上的投影点的坐标。 阅读详情

原理

启动的时候,CPU肯定要从内存读数据。但是这个时候内存还是空的。所以需要一个硬件读进内存。这就是BIOS(或UEFI,但是本次不用)。BIOS内置了大量函数(中断)方便我们启动。那么BIOS具体怎么读呢?以软盘为例,BIOS先将第一个扇区读进内存,然后CPU执行第一个扇区的代码。(一个扇区是512字节)。这个扇区就是所谓的引导扇区。

由于一个扇区是512字节,所以我们的引导扇区不能超过宝贵的512字节。这一步是最难的,而且必须用汇编写

实战

直接上代码:

; haribote-ipl
; TAB=4

CYLS	EQU		20				; どこまで読み込むか

		ORG		0x7c00			; このプログラムがどこに読み込まれるのか

; 以下は標準的なFAT12フォーマットフロッピーディスクのための記述

		JMP		entry
		DB		0x90
		DB		"HARIBOTE"		; ブートセクタの名前を自由に書いてよい(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		"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		AX,0
		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		"load error"
		DB		0x0a			; 改行
		DB		0

		RESB	0x7dfe-$		; 0x7dfeまでを0x00で埋める命令
        DB     0x55,0xAA

这是《30天自制操作系统》的引导扇区代码,作者引用一下(打个广告)。日语注释很难看懂,且听作者细细道来~

;是注释,类似#或//

CYLS其实是一个伪指令,代表读取的柱面数

ORG代表程序装载的地址

JMP是跳转,就是jump的缩写

DB、DW、DD、RESB都是伪指令,是填充数据的意思

MOV是move的缩写,意思是移动寄存器

INT是中断

JNC是jump if not carry的缩写

ADD是加的意思

CMP是比较

HLT是停机

怎么样,是不是云里雾里,下一篇博客详细讲讲这些指令

LVGL 9Text Area 控件 (lv_textarea) 使用指南 是一个可编辑的文本输入控件,通常用于在用户界面中输入和编辑多行或单行文本。该控件支持文本插入、删除、光标控制、文本选择、密码输入等功能。它的文本内容可以通过键盘、API 或事件进行修改,还可以设置最大文本长度、占位符文本和密码模式等。是一个强大且灵活的文本输入控件,适用于多种用户输入场景,支持文本插入、删除、光标控制、密码输入等功能。通过 LittlevGL 提供的丰富 API,开发者可以自定义文本区域的外观和行为,实现复杂的文本输入需求。 阅读详情

相关推荐

测试工程师玩转DeepSeek之Prompt

掌握这些提示词技巧,测试工程师可提升与DeepSeek的协作效率至少3倍。建议结合具体项目上下文进行二次优化,并建立团队内部的提示词知识共享库。✅ “为电商支付接口生成包含幂等性验证的测试用例,覆盖网络中断重试场景”❌ “帮我写测试用例”

weixin_44872675的博客 2262

操作系统引导扇区

一  主引导扇区是计算机开机后访问硬盘时所必须要读取的首个扇区,它在硬盘上的三维地址为{(柱面,磁头,扇区)|(0,0,1)}。主引导扇区主要由三部分组成:主引导记录 MBR(Master Boot Record或者Main Boot Record)、硬盘分区表 DPT(Disk Partition Table)和结束标志字三大部

jake1010的专栏 5266

AI视频生成本地搭建图文详细过程

在自己的电脑上搭建一个AI,主要用于通过自己输入的关键字来自动生成视频文案,把视频文案自动生成视频,再自动给视频配音配字幕。

张小三的博客 4693

操作系统课程简介与引导扇区

该课程只学比较基础的操作系统知识: 即单核CPU,以及内存管理文件系统等最基本的知识,而暂不涉及网络管理等更高级的知识。 课程目标:能够设计,修改操作系统相关模块,掌控操作系统,保证完成八个大作业。(因为要自己动手实践,所以,比较难。老师原话:很难。) 看了斯坦福的操作系统目标,都不好意思说自己学过操作系统了。世界计算机最牛逼的学府卡内基梅隆的要求是给一个板子,自己通过数据手册来...

Dezeming的博客 8037

用 Joule 点燃 ABAP 开发者的舞台感:SAP BTP 上的 ABAP AI 能力实战解读

摘要:SAP推出的Joule for developers和ABAP AI功能为开发者提供了智能辅助工具,旨在优化ABAP开发流程。主要功能包括上下文感知的代码预测补全、代码解释、单元测试生成和开发问题实时解答。这些能力特别适合应对Cloud环境下ABAP开发的复杂约束,如Clean Core原则和受限语法范围。通过减少重复劳动和提升代码理解效率,该工具帮助开发者将注意力集中在业务逻辑而非技术细节上。随着企业加速向S/4HANA迁移,这些AI功能将在遗留代码改造和云适配中发挥更大作用,建议团队将其纳入工程体

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 298

Oracle EBS AP 应付模块核心实现逻辑(极简骨架 + 分层拆解 + 业务流转 + 分录 + 核心表)

Oracle EBS AP应付模块采用四层逻辑架构:1)主数据层统一管控供应商基础信息;2)发票负债层通过三单匹配校验生成应付账款;3)付款核销层实现负债冲减;4)SLA层自动生成财务凭证。核心流程包括发票验证(匹配PO/收货单)、付款核销(全额/部分冲账)、会计分录自动生成(通过SLA引擎)。模块严格遵循"无匹配不负债、无验证不入账"原则,与采购、库存等模块深度集成,实现从供应商创建到付款核销的完整业务闭环,确保应付账款准确性和审计追溯能力。

金牌架构师 440

【浅析操作系统主引导扇区】

【浅析操作系统主引导扇区】

qq_51931826的博客 801

uniapp - 实现PDA扫码枪RFID批量扫描读取示例代码,uni-app APP识别RFID(射频识别)结合硬件设备进行扫描,uniApp调用RFID读写通用方案适配各种设备+完整实例源码教程!

uni-app PDA 读取RFID,基于uniapp开发PDA扫码枪APP:实现RFID批量扫描读取功能,UniApp中的RFID实现,手持机 RFID插件(uni-app集成手持设备rfid插件),uniapp自动识别RFID,uni-app调RFID模块,uni-app RFID识别插件,uniapp读取rfid,uniapp手持设备扫描rfid,uniapp超高频rfid识别,rfid标签识别,uniapp调用RFID读写,uniapp rfid扫码枪,uniapp中如何使用rfid插件,打包上线后

🏆 前端领域优质创作者 1万+

操作系统1——引导扇区的理解

在操作系统这个方面,我记得自己经常听到主引导记录这个名词,但是对于它的理解并不深,只知道它在系统加载的时候很重要。现在我想自己写一个操作系统,但是想到第一步该怎么做呢?书上说是用汇编写引导程序。那么这个引导程序是什么呢?它正是我们经常所说的主引导记录,或者说,它存储在引导扇区上,即我们所说的boot sector。 我们知道,当计算机电源被打开的时候,他会先进行加电自检,然后寻找启动盘,如果计算

Yelbosh的专栏 5202

【云原生技术】SonarQube 生态中PMD插件和P3C插件详细介绍

4. 在项目中如何选择 / 组合 1. 小团队、对《阿里规约》认同度高 → 直接启用 **P3C**,配合 SonarJava 基本够用。 2. 追求全面 Bug/安全检测 + 额外编码规范 → **SonarJava + PMD**(必要时加 P3C 少量规则)。 3. 大型多团队,希望“一本规约”统一风格 → **P3C 为主**,再补充 SonarJava/PMD 的 Bug 与安全规则。 4. 通过 Quality Gate 控制:将 **Blocker/Critical** Bug

weixin_46453070的博客 1366

Halcon那些事:Halcon非常核心的1个概念reduce_domain算子的理解和1个详细的使用示例

Reduce是减少的意思。并不是真的去裁剪图像,而是定义一个“感兴趣的区域(Region of Interest, ROI)”。后续的图像处理算子将只在这个定义的区域内有效,区域外的像素将被忽略。在一张白纸(完整图像)上放一张镂空的纸板(Domain)。我们后续的绘画(图像处理操作)只会透过镂空的部分影响到下面的白纸。镂空纸板之外的部分保持不变,也不会被处理。关键步骤:使用ReduceDomain,将图像的域限制为ROI区域,图像在原来图像基础上存在图像区域。

十多年IT经验,专注机器视觉,智能制造半导体行业 577

操作系统主引导扇区代码是如何被加载到内存的?

操作系统主引导扇区mbr的引导代码是怎么加载到内存的?为什么需要org 0x7c00h?

天地会珠海分舵 1431

化工设备应力分析软件:STAAD.Pro二次开发_(24).非线性分析技术

在STAAD.Pro 中,可以通过命令。

kkchenjj的博客 661

从零开始创造自己的操作系统(3)广阔天地

本文介绍了如何将汇编代码转换为可执行的引导扇区程序。首先解释了汇编语言的作用和汇编器(如NASM)的功能,提供了NASM和QEMU虚拟机的下载链接。接着详细说明了使用NASM编译汇编代码和通过QEMU运行程序的方法。文章还讲解了BIOS中断INT 0x13的功能参数,包括读盘、写盘等操作,并解释了软盘的结构(柱面、磁头、扇区)和内存寻址方式(段寄存器ES:BX)。最后提到下期将继续讲解相关内容。

PythonKingdomcit的博客 315

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

从零开始创造自己的操作系统(2):汇编入门

书接上回。

PythonKingdomcit的博客 206

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

计算机操作系统手册,轻松的开发一个操作系统(指导手册)

轻松的开发一个操作系统(指导手册)标签: 翻译家 编程 操作系统chapter 1前言我们都使用过操作系统,又或者写过某个系统上运行着的程序;但操作系统到底是来做什么的?我所看到的工作多少是硬件完成的又有多少是软件完成的?电脑实际上是如何运作的?我已故的老师,一位曾活跃在兰开斯特大学的Doug教授曾在我因陷入恼人的程序问题而苦不堪言时提醒过我,以前他还没能开始任何研究的时候,他用scratch写了...

weixin_42315616的博客 991

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

小白也能懂:用AI制作第一个操作系统的完整指南

我写了一个简单的汇编程序,它会在屏幕上显示"Hello World",然后进入无限循环。通过分步实践和AI工具的帮助,任何人都能体验到创造操作系统的乐趣。虽然完整的操作系统非常复杂,但我们可以从最基础的部分开始,比如引导加载和简单的输入输出。最近,我尝试用AI工具制作了自己的第一个简易操作系统,整个过程既有趣又充满挑战。它内置的AI辅助功能可以帮助理解复杂概念,而且不需要复杂的配置就能开始编程。特别是对于操作系统这种需要特定环境的项目,平台的虚拟机支持让测试变得非常简单。在开发过程中,我遇到了不少问题。

NightshadeRaven21的博客 1038

如何5分钟上手操作系统开发?gh_mirrors/os/os-tutorial-cn入门指南:无需深厚理论,Google就是你的导师

操作系统开发听起来高深莫测?其实新手也能快速入门!gh_mirrors/os/os-tutorial-cn项目提供了从零开始编写操作系统的中文教程,无需深厚理论基础,跟着步骤操作,5分钟就能跑通第一个引导程序。本指南将带你快速搭建开发环境,完成第一个"Hello OS"程序,让你轻松踏入操作系统开发的大门🚀 ## 📋 5分钟准备:开发环境搭建 ### 核心工具清单 操作系统开发需要以下工具

gitblog_00374的博客 293

告别GRUB!gh_mirrors/os/os-tutorial-cn教程:从零编写启动代码,打造属于你的迷你操作系统

你是否曾经好奇计算机启动时究竟发生了什么?想要摆脱GRUB等现成引导程序的束缚,亲手打造一个从开机到运行的完整流程?gh_mirrors/os/os-tutorial-cn项目提供了从零开始编写操作系统的中文教程,让你通过实践掌握操作系统的核心原理,从零编写启动代码,打造属于自己的迷你操作系统。 ## 🚀 为什么要学习从零编写操作系统? 学习操作系统开发不仅能深入理解计算机底层工作原理,还能

gitblog_00647的博客 234

书籍-川合秀实《30天自制操作系统》

《30天自制操作系统》是一本革命性的操作系统教材,它打破了传统操作系统教材重理论轻实践的局限,通过30天的渐进式学习计划,引导读者从零开始构建一个功能完整的操作系统。这本书不仅教授操作系统的理论知识,更重要的是让读者通过实际编程来深入理解操作系统的内部机制。 该书采用"边做边学"的教学理念,每一天都有明确的学习目标和实践任务,从最基本的引导扇区开始,逐步构建起一个具有文件系统、内存管理、多任务处理等功能的完整操作系统。

d3y1`5 81_09 1145

uCore操作系统动手实践指南:从零构建自己的操作系统内核

你是否曾经想过亲手打造一个操作系统?现在,通过uCore操作系统实验,你可以实现这个梦想!这个源自清华大学的教学项目,通过8个精心设计的实验模块,让你在动手实践中深入理解操作系统原理。无论你是计算机专业学生,还是对系统底层感兴趣的开发者,uCore都能带你从零开始,一步步构建功能完整的操作系统内核。 ## 挑战一:如何快速搭建实验环境? **问题场景**:初次接触系统编程,面对复杂的开发环境配

gitblog_00087的博客 782

AI Agent自主性极限测试:从零编写操作系统的挑战与启示

AI Agent作为人工智能领域的重要分支,其核心原理在于通过大语言模型理解任务、规划步骤并调用工具执行。这项技术的价值在于将自然语言指令转化为自动化工作流,显著提升代码生成、环境配置和流程编排的效率。在软件开发、自动化测试等应用场景中,AI Agent能够处理模式化任务,成为开发者的高效助手。本文聚焦于AI Agent在无监督条件下的自主性极限,通过一场让AI尝试从零编写操作系统的实验,揭示了其在面对复杂系统设计时的能力边界。实验表明,尽管AI在信息检索和模板代码生成方面表现出色,但在需要深度系统思维和创

chuannaoxuan4674的博客 423

从零构建操作系统内核:开源项目os1的架构解析与实践指南

操作系统内核是计算机系统的核心软件,负责管理硬件资源、提供基础服务。其基本原理包括进程调度、内存管理和文件系统等核心机制,通过抽象层实现对CPU、内存和I/O设备的统一管控。在技术价值上,深入理解内核有助于开发者突破应用层限制,掌握系统级编程与性能优化能力。应用场景广泛,从嵌入式设备到数据中心服务器都依赖高效稳定的内核。本文聚焦开源项目nokodo-labs/os1,剖析其引导流程、进程管理和内存分配等关键实现,为学习者提供从理论到实践的完整路径。通过分析项目中的物理内存管理和进程控制块设计,帮助开发者构建

weixin_33716154的博客 429

王爽汇编实验十七:512字节引导扇区原理与实操

引导扇区是x86实模式下操作系统启动的起点,其核心在于BIOS将磁盘首扇区加载至物理地址0x7C00并跳转执行。理解这一过程需掌握物理地址计算、段寄存器重置、ORG伪指令作用及中断向量表结构等底层机制。引导扇区程序必须严格满足512字节限制,并以0xAA55签名结尾,否则无法被BIOS识别。技术价值体现在对CPU启动流程、内存布局与硬件交互的贯通认知,广泛应用于嵌入式引导开发、固件分析和操作系统课程实践。本文聚焦王爽《汇编语言》实验十七,基于MASM 5.0工具链,深入解析从代码编写、段地址设置到屏幕输出的

weixin_34212762的博客 315

从零构建操作系统内核:实习生实践平台 intern-os 深度解析

操作系统是计算机系统的核心,它管理硬件资源并为应用程序提供运行环境。其基本原理包括进程管理、内存管理、文件系统和设备驱动等核心子系统。理解操作系统原理对于开发高性能软件、进行系统级调试和优化至关重要,尤其在云计算、嵌入式系统和基础软件领域。通过动手实践实现操作系统核心模块,开发者能够深入理解计算机底层工作机制,将理论知识转化为工程能力。本文以开源项目 intern-os 为例,剖析如何通过渐进式、模块化的设计,实现从引导加载、内存管理到多任务调度的完整流程,为学习者提供从概念到代码的实践路径,其中进程管理和

weixin_33719619的博客 399

30天自制操作系统:从零到一构建属于你的计算机世界

你是否曾好奇,当按下电源键后,计算机内部究竟发生了什么魔法?操作系统这个看似遥不可及的"黑匣子",其实完全可以从零开始亲手打造。《30天自制操作系统》项目为你提供了一个绝佳的机会——用30天时间,从512字节的引导程序开始,逐步构建一个功能完整的操作系统。 想象一下,你不再只是操作系统的使用者,而是成为它的创造者。这不仅仅是学习编程,更是一次深入计算机核心的探险之旅。通过这个项目,你将亲手实现引

gitblog_00640的博客 86
上一篇: 树霉派5踩坑记录:I2c屏幕接线
下一篇: 从零开始创造自己的操作系统(2):汇编入门
PythonKingdomcit
博客等级 码龄2年 21粉丝 11原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值