《30天自制操作系统》 day6 小结

分割编译与中断处理

1. 分割源文件

分割文件的优劣:

(1)按照处理内容进行分类,如果分的好的话,将来进行修改时,容易找到地方。 (5)源文件数量增加。
(2)如果Makefile写的好,只需要编译修改过的文件,就可以提高make的速度。 (6)分类分得不好的话,修改时不容易找到地方。
(3)单个源文件都不长,多个小文件比大文件好处理。
(4)看起来很酷。

Bootpack.c的分割:

6-1-1

Makefile根据bootpack.c的分割后应增加的功能:

6-1-2

2/3. 整理Makefile/头文件

make.exe会首先寻找普通的生成规则如果没有找到,就尝试用一般规则。普通生成规则要优于一般规则。
将c文件里重复的声明添加到.h头文件中,然后在其余.c文件中增加#include “bootpack.h”表示告诉编译器,这里要替换成指定的内容,然后进行编译。

头文件名用(”“)表示该头文件与源文件位于同一个文件夹里,而尖括号(<>)则表示该头文件位于编译器所提供的文件夹里。

4. 意犹未尽

6-4-1
这个函数用来将指定的段上限(limit)和地址赋值给名为GDTR的48位寄存器。给GDTR赋值唯一的办法是指定一个内存地址,从指定的地址读取6个字节(48位),然后赋值给GDTR寄存器,完成这一任务的就是LGDT。

该寄存器的低16位(即内存的最初2个字节)是段上限,它等于“GDT的有效字节数-1”。今后我们还会偶尔用到上限这个词,意思都是表示量的大小,一般为“字节数-1”剩下的高32位(即剩余的4个字节),代表GDT的开始地址。

DWORD[ESP+4]里存放段上限(0x0000ffff),DWORD[ESP+8]里存放地址(0x00270000)。若是按字节写出来就成了FF FF 00 00 00 27 00 00
6-4-2

为了执行LGDT,作者希望把它们排列成[FF FF 00 27 00 00]的样子。所以就先”MOV AX, [ESP+4]”读取最初的0xffff,然后再写到[ESP+6]里。结果就成了[FF FF FF FF 00 27 00 00],如果从[ESP+6]开启读6个字节的话正好是想要的结果,即如下图:

6-4-3

naskfunc.nas的_load_idtr对IDTR的设置与GDTR类似。

另外GDT,LDT,GDTR,LDTR 的详解可以在这里看到:

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值