30天自制操作系统 第3天日志

一、实验主要内容

1、 内容1:指令以及名词解释

INT 0x13指调用BIOS的0x13号函数(具体什么函数查找网页如下)
AH=0x02;(读盘)
AH=0x03;(写盘)
AH=0x04;(校验)
AH=0x0c;(寻道)
CH、CL、DH、DL分别表示柱面号、扇区号、磁头号、驱动器号。
JC:如果进位标志是1的话,就跳转
JNC:进位标志是0的话跳转
JAE:大于或等于时跳转
JBE:小于或等于时跳转
JB:如果小于的话。就跳转
EQU:(equal)相当于C语言的#define命令,用来声明常数
VRAM:(video RAM)显卡内存,就是用来显示画面的内存
goto:相当于JMP指令

2、 内容2:软盘读取数据及试错

1张软盘有80个柱面,2个磁头,18个扇区,一个扇区有512个字节
所以一张软盘的容量是:80218*512=1474560 Byte=1440 kb
IPL启动区,位于C0-H0-S1(柱面0,磁头0,扇区1)
要读下一个扇区,只需给CL加1,给ES加上0x20就行
CL是扇区号,ES指定读入地址;0x20是十六进制下512除以16的结果
然后再不断读取下一个柱面,扇区,磁头
试错:当出现错误,会重新读,5次还不行就放弃;每次出错的时候,就调用BIOS的0x13号函数,即系统复位,重置驱动器,复位软盘状态,再读一次。

3、 内容3:着手开发操作系统

编写HLT编译输出,并将文件保存在映像里
(1) 使用make install指令,将磁盘映像文件写入磁盘
(2) 在Windows里打开那个磁盘,把haribote.sys保存到磁盘上
(3) 使用工具将磁盘备份为磁盘映像
一般向一个空软盘保存文件时:
(1) 文件名会写在0x002600以后的地方
(2) 文件的内容会写在0x004200以后的地方

4、内容4:从启动区执行操作系统

因为已经将操作系统的内容保存到了.sys,文件,接下来只要找到它的位置,然后启动区在执行的时候,跳转到那个位置就可以了。所以要设置段寄存器,所以就在操作系统的文件中加了ORG 0xc200。

5、 内容5:确定操作系统的执行情况

在这里插入图片描述
在这里插入图片描述
make run
在这里插入图片描述

6、内容6:32位模式前期准备

CPU选择32位模式的原因:
16位模式使用像EAX,ECX等寄存器会很麻烦
16位和32位模式的机器语言无法相互转换
CPU的自我保护功能在16位下不能用,但32位下可以用
我们将画面的像素数,颜色数,以及从BIOS取得的键盘信息都保存起来

7、内容7:导入C语言

bootpack.c变成机器语言的步骤:
第一步,使用ccl.exe从bootpack.c生成bootpack.gas
第二步,使用gas2nask.exe从bootpack.gas生成bootpack.nas
第三步,使用nask.exe从bootpack.nas生成bootpack.obj
第四步,使用obi2bim.exe从bootpack.obj生成bootpack.bim
最后,使用bim2hrb.exe从bootpack.bim生成bootpack.hrb
再使用copy指令将asmhead.bin与bootpack.hrb结合起来,就成了haribote.sys
为了能做成完整的机器语言文件,必须将必要的目标文件全部链接上,就是obj2bim

8、 内容8:实现HLT

①naskfunc.nas是用汇编写的函数,还要与bootpack.obj链接,它也需要编译成目标文件。
②在nask目标文件的模式下,必须设定文件名信息,然后再写明下面程序的函数名。“_”需加载函数名前面,否则就不能很好地与C语言函数链接。需要链接的函数名,都要用GLOBAL指令声明。

二、遇到的问题及解决方法

1、描述问题1

1、 为什么0x80000x81ff区域是留给启动区的,但启动区明明是在0x7c000x7dff?
解决方法:当 BIOS读完启动扇区以后,会跳转到0x7C00启动,占用0x7C00-0x7DFF这一段(512字节),而一般bootloader还需要一个栈空间或者读磁盘的交换空间,一般是放到0x7E00-0x7FFF这512字节里,所以有些操作系统的镜像起点是0x8000。然后启动区确实会拷贝一份映射到0x8000位置上。但是BIOS里读取启动扇区都是加载到0x7C00上的。

2、描述问题2

如下图所示的代码显示只添加了0x020,为什么说是下移动了512个地址。
在这里插入图片描述
解决方法:ES等段地址在表示实际内存地址时要乘以16。从0x820到0x840表示的实际地址是0x8200到0x8400,所跨区间是21616=512。

三、程序设计创新点

1、描述创新点1

改写c语言,改变不同地址的值,显示出条纹图案
在这里插入图片描述
运行结果:
在这里插入图片描述

2、描述创新点2

改写c语言,使VRAM全部写入15,画面变白
在这里插入图片描述
在这里插入图片描述
30天自制操作系统1~15天日志:https://download.csdn.net/download/weixin_43979304/15320819?spm=1001.2014.3001.5503

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

SIR怀特

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值