自制x86玩具操作系统 week1

2019-05-01 | OSDev | #操作系统 #DIY

DAY 0x00

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

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

DAY 0x01

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

文件描述

汇编

镜像文件格式

DAY 0x02

汇编

寄存器名 全称 含义
AX accumulator 累加寄存器
CX counter 计数寄存器
DX data 数据寄存器
BX base 基址寄存器(例如用于指向数组起始位置)
SP stack pointer 栈指针寄存器
BP base pointer 基址指针寄存器(栈帧的基地址)
SI source index 源变址寄存器
DI destination index 目的变址寄存器
寄存器名 全称 含义
ES extra segment 附加段寄存器
CS code segment 代码段寄存器
SS stack segment (栈指针寄存器的)段寄存器
DS data 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处写入代码

参考