从零开始实现balloon操作系统(0x02) 加载setup模块

qemu guest agent windows 安装 记录 windows 版本下进行 qemu guest agent 软件安装 当前使用版本为 windows 2012, 其他版本同理 (已验证 2008 与 win7 版本) 解决 qemu guest agent 启动 1053 报错 作用 1. 安装 qemu guest agent 可以用于对 libvirtd 下的 instance 进行管理 2. 可以用于收集 windows 的内存信息 阅读详情

距离上一次发操作系统文章已经度过了好几个月,这几个月里我在忙于一个解释器项目,现在项目已经完全进入维护阶段,所以就有了空余时间继续啃操作系统。先看看解释器最终做出来的效果:
在这里插入图片描述

好了题外话到此为止。0x01中我们实现了一个最小操作系统,使用0x10中断输出了一个句子。当时那篇文章开篇先把内存分布讲了一通(我现在看都觉得昏),可能有些劝退,这次开篇我先把优化的代码贴这,我们接下来基于此进行修改。

# ballon system bootsect.s
# copyright @ValKmjolnir
# 2020

.code16
.global bootstart

.equ BOOTSEG, 0x07c0 # begin from 0x07c0:0x0000->0x07c00
.equ INITSEG, 0x9000 # jump to 0x9000:0x0000->0x90000 then bootsect 0x90000~0x901ff
.equ SETUPSEG,0x9020 # beginning address of setup.s
.equ SYSSEG,  0x1000 # beginning address of system
.equ SYSEND,  0x8000 # system ends at 0x70000=448kb

ljmp $BOOTSEG,$bootstart

bootstart:
	mov $BOOTSEG,%ax
	mov %ax,%ds
	mov $INITSEG,%ax
	mov %ax,%es
	xor %di,%di
	xor %si,%si
	mov $0x100,%cx
	rep
	movsw
	ljmp $INITSEG,$stackset
	# copy operation use rep movsw 256(cx) times to move 512(256*2) bytes from ds:di to es:si
	# copy bootsect from 0x07c00 to 0x90000 and jump to 0x90000+stackset
	# ljmp $INITSEG,$stackset -> cs=INITSEG ip=stackset
stackset:
	mov %cs,%ax     # ax=INITSEG
	mov %ax,%ds     # ds=ax
	mov %ax,%es     # es=ax
	mov %ax,%ss     # ss=ax
	mov $0xff00,%sp # sp=0xff00

start:
	mov $0x03,%ah   # read cursor position
	xor %bh,%bh     # set page 0
	int $0x10       # BIOS video service

	mov $INITSEG,%ax
	mov %ax,%es     # es:bp points to the string

	mov $sysmsg,%bp # set string address
	mov $0x1301,%ax # write string,move cursor
	mov $0x0007,%bx # page 0,black background/white characters
	mov $28,%cx     # length of string
	int $0x10       # BIOS video service

die:
	hlt
	jmp die         # infinite loop

sysmsg:
	.ascii "Starting Balloon System..."
	.byte 13,10

.=510
signature:
	.word 0xaa55

部分同学认为intel的看起来比at&t的舒服……很尴尬的是我没有学,但是网上有两种风格的转换规则,可以对照进行转换。

setup模块在linux 0.11中用于将system模块(这个我们会在0x03中导入)整体上移,覆盖到0地址处,首次加载idt,gdt,并打开a20,激活保护模式。在Makefile中,我们给setup模块定了4*512字节的空间来自由发挥。

All: Image

JMAG23.1安装四步闭环:环境筑基、依赖锚定、服务注册与许可绑定 JMAG是一款面向电机与电磁设备的高精度有限元仿真软件,其稳定运行依赖严格的系统环境配置。理解其底层原理需从Windows平台工程软件共性切入:它并非普通应用,而是深度耦合VC运行库、特定JRE版本、Windows服务机制与许可证校验流程的技术栈。技术价值体现在求解可靠性、多核并行效率与商业授权合规性;典型应用场景包括新能源汽车驱动电机设计、工业变压器电磁场优化及高校电磁课题仿真验证。实践中,90%的启动失败源于Java环境错配(如JRE 11.0.18缺失)或License Manager服务未正确注册— 阅读详情

相关推荐

BallonsTranslator安装指南:基于uv的Python本地化工作流搭建

BallonsTranslator并非普通翻译工具,而是面向视觉小说本地化的专业文本提取与注入引擎。其核心原理依赖Python生态构建的命令行工作流,强调环境隔离、ABI兼容与可复现性。技术价值在于打通日文/韩文游戏脚本的提取、翻译、回填全链路,避免字符错位、变量丢失等本地化常见故障。典型应用场景包括吉里吉里(.xp3)、NScripter(.dat)等引擎游戏的汉化工程。本文聚焦Windows平台下以uv替代pip的高效环境搭建,解决ModuleNotFoundError、TLS 1.3握手失败、家庭版D

562

Apalis iMX8QM 串口链路调试进展总结

本文记录ApalisiMX8QM平台从刷机到串口通信贯通的调试过程。系统基于Toradex Linux 7.8.0,成功实现X21(UART2)RS232双向通信,收发验证通过。关键结论:设备映射错误是初期失败主因,应以/dev/apalis*符号链接为准;所有测试依赖系统原生工具,未安装额外软件。当前板载网口未配置静态地址,后续将推进PPC接入、协议解析、图形化显示及网络落地。

coldmood77的博客 4

A股量化实战:用Python回测动量因子策略(附聚宽完整代码)

本文详细介绍了如何在A股市场使用Python和聚宽平台,实战回测一个动量因子量化交易策略。从环境搭建、数据获取到完整的策略代码实现与回测分析,手把手教你验证“强者恒强”的投资逻辑,并提供参数优化与实战避坑指南,助力量化新手迈出第一步。

weixin_29264201的博客 971

详解Numpy中的transpose方法

最近在学Numpy碰到了关于数组转置和换轴的概念,尤其是对tanspose方法有些疑惑,尤其是多维,查了不少资料,终于搞懂了。 Numpy数组的轴(axis) 所谓的**轴(axis)**可以理解为数组的维度。 具体而言,二维数组就是有两个维度,如果从空间上看,它就是一个平面,由x轴和y轴构成,而与此相对应的,该二维数组就有两个轴,x轴对应0轴,y轴对应1轴。 同理,三维数组有三个维度,空间上...

BlankGrid的博客 938

保姆级教程:在Ubuntu 20.04上从源码编译Apollo自动驾驶平台(含GPU环境配置)

本文提供了一份详细的Ubuntu 20.04上从源码编译Apollo自动驾驶平台的保姆级教程,包括GPU环境配置、Docker部署和编译构建等关键步骤。通过实战经验和避坑指南,帮助开发者高效完成Apollo平台的编译和验证,适用于自动驾驶技术研究和应用开发。

weixin_30876945的博客 409

别再手动更新Excel了!用Jira看板管理你的个人项目(附保姆级配置流程)

本文详细介绍了如何利用Jira看板替代Excel进行个人项目管理,提供从注册到配置的保姆级教程。通过极简看板模式、自动化规则和数据分析功能,帮助用户实现任务可视化、协作高效化和提醒自动化,大幅提升个人工作效率。特别适合需要管理复杂个人项目的用户。

weixin_42699679的博客 229

从win系统远程使用服务器中的nsight system、nsight compute

本文介绍了如何在Windows系统中远程使用服务器上的Nsight System和Nsight Compute工具。主要内容包括:1)双系统同步安装相同版本的Nsight工具,配置环境变量;2)命令行生成profile文件或直接运行分析;3)Windows远程连接服务器的配置方法;4)解决权限问题的具体方案,如修改文件夹权限或调整NVIDIA驱动配置。文章提供了详细的安装步骤和常见问题解决方案,适用于需要进行GPU性能分析和调试的开发人员。

Justinyh的博客 401

微信小程序 - 强力解决wx.getLocation定位不准的问题,如何修正微信小程序wx.getLocation获取用户位置信息不准确解决办法(高精度定位还是不够精准,定位不准有偏差,彻底消除误差)

如何解决getLocation定位偏差的问题?微信小程序API—wx.getLocation定位不准的问题,微信小程序wx.getLocation获取用户位置信息不准确解决办法,解决微信小程序wx.getLocation定位不准的问题,定位不准确,实际位置偏差大,相差几公里,微信小程序wx.getLocation获取用户位置信息不准确解决办法,关于微信小程序获取准确定位的方法及解决定位不准确的问题,偏差太多好几百米,wx.getLocation 返回定位精度不准问题,如何消除这个误差,开启高精度定位依旧有误

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

STM32(HAL库)驱动OLED

通过STM32F103C8T6单片机采用HAL库方式对0.96寸OLED(IIC通讯)屏幕进行驱动。

weixin_44597885的博客 8802

匹配博弈双边选择算法

刚学图论匹配方面的一些知识,记录下来。

ymengm的博客 2435

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

上一篇: C语言可变参数及其原理
下一篇: elastic.zzhrecieve.top redis攻击
ValKmjolnir
博客等级 码龄9年 11粉丝 14原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值