30天自制操作系统day3
一、实验主要内容
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