自制x86玩具操作系统 week1

2019-05-01 (更新于2021-10-10) / OSDev / #操作系统 #DIY

DAY 0x00

先装个翻译插件,装了半天找了个勉强能用的 然后考虑用git来做版本控制,方便和原版进行比较找出自己的修改,然后发现文字编码问题,于是乎捣鼓了个工具来批量转换文件编码(一大堆时间栽进去了)。

第0天用16进制编辑器编辑出一个image文件

DAY 0x01

这张软盘共有1440KB大小,最高地址为0x168000-1

文件描述

汇编

镜像文件格式

DAY 0x02

汇编

寄存器名全称含义
AXaccumulator累加寄存器
CXcounter计数寄存器
DXdata数据寄存器
BXbase基址寄存器(例如用于指向数组起始位置)
SPstack pointer栈指针寄存器
BPbase pointer基址指针寄存器(栈帧的基地址)
SIsource index源变址寄存器
DIdestination index目的变址寄存器
寄存器名全称含义
ESextra segment附加段寄存器
CScode segment代码段寄存器
SSstack segment(栈指针寄存器的)段寄存器
DSdata segment数据段寄存器
FS--
GS--

##未完待续

先睡觉了,天气冷,折腾一天了。

DAY 0x02 续

上网搜了一下,发现原来的info地址已经变成了http://oswiki.osask.jp/但是依然不能用,最后在google快照里面找到了踪迹http://webcache.googleusercontent.com/search?q=cache:后面接网页url即可

http://webcache.googleusercontent.com/search?q=cache:http://oswiki.osask.jp/?(AT)memorymap

helloos4中只取了helloos.nas的前半部分作为ipl.nas

汇编

Makefile

目标: 依赖文件
	命令... \

启动时,首先执行BIOS,然后BIOS加载软盘的启动区,并在一些列操作之后跳转到启动区起始处的第一条JMP指令。 启动区内容的装载地址为 0x00007c00-0x00007dff,这不是操作系统规定的,也不是img镜像文件中指定的,镜像文件得遵循这一规定,这一过程由BIOS进行 day1和day2的最终镜像文件没有区别,在helloos2中作者故意将程序区不以汇编代码形式展示,是因为其中要用到标签的地址,而这个地址要结合ORG指令计算得出,到helloos3时才加入ORG指令 参考FAT12启动区的定义,软盘的信息描述在0x62处截止,作者填充了18个字节的内容,然后在偏移量为0x50处写入代码

参考