《30天自制操作系统》第六天

分割编译主要围绕这两张图:

然后是Makefile的内容:

OBJS_BOOTPACK = bootpack.obj naskfunc.obj hankaku.obj graphic.obj dsctbl.obj

TOOLPATH = ../z_tools/
INCPATH  = ../z_tools/haribote/

MAKE     = $(TOOLPATH)make.exe -r
NASK     = $(TOOLPATH)nask.exe
CC1      = $(TOOLPATH)cc1.exe -I$(INCPATH) -Os -Wall -quiet
GAS2NASK = $(TOOLPATH)gas2nask.exe -a
OBJ2BIM  = $(TOOLPATH)obj2bim.exe
MAKEFONT = $(TOOLPATH)makefont.exe
BIN2OBJ  = $(TOOLPATH)bin2obj.exe
BIM2HRB  = $(TOOLPATH)bim2hrb.exe
RULEFILE = $(TOOLPATH)haribote/haribote.rul
EDIMG    = $(TOOLPATH)edimg.exe
IMGTOL   = $(TOOLPATH)imgtol.com
COPY     = copy
DEL      = del

default :
    $(MAKE) img

ipl10.bin : ipl10.nas Makefile
    $(NASK) ipl10.nas ipl10.bin ipl10.lst

asmhead.bin : asmhead.nas Makefile
    $(NASK) asmhead.nas asmhead.bin asmhead.lst

hankaku.bin : hankaku.txt Makefile
    $(MAKEFONT) hankaku.txt hankaku.bin

hankaku.obj : hankaku.bin Makefile
    $(BIN2OBJ) hankaku.bin hankaku.obj _hankaku

bootpack.bim : $(OBJS_BOOTPACK) Makefile
    $(OBJ2BIM) @$(RULEFILE) out:bootpack.bim stack:3136k map:bootpack.map         $(OBJS_BOOTPACK)
# 3MB+64KB=3136KB

bootpack.hrb : bootpack.bim Makefile
    $(BIM2HRB) bootpack.bim bootpack.hrb 0

haribote.sys : asmhead.bin bootpack.hrb Makefile
    copy /B asmhead.bin+bootpack.hrb haribote.sys

haribote.img : ipl10.bin haribote.sys Makefile
    $(EDIMG)   imgin:../z_tools/fdimg0at.tek         wbinimg src:ipl10.bin len:512 from:0 to:0         copy from:haribote.sys to:@:         imgout:haribote.img

%.gas : %.c Makefile
    $(CC1) -o $*.gas $*.c

%.nas : %.gas Makefile
    $(GAS2NASK) $*.gas $*.nas

%.obj : %.nas Makefile
    $(NASK) $*.nas $*.obj $*.lst

img :
    $(MAKE) haribote.img

run :
    $(MAKE) img
    $(COPY) haribote.img ..\z_tools\qemu\fdimage0.bin
    $(MAKE) -C ../z_tools/qemu

install :
    $(MAKE) img
    $(IMGTOL) w a: haribote.img

clean :
    -$(DEL) *.bin
    -$(DEL) *.lst
    -$(DEL) *.obj
    -$(DEL) bootpack.map
    -$(DEL) bootpack.bim
    -$(DEL) bootpack.hrb
    -$(DEL) haribote.sys

src_only :
    $(MAKE) clean
    -$(DEL) haribote.img

关于gdtr的加载的代码:

_load_gdtr:        ; void load_gdtr(int limit, int addr);
        MOV        AX,[ESP+4]        ; limit
        MOV        [ESP+6],AX
        LGDT    [ESP+6]
        RET

书中这样说:

“这个函数用来指定的段上限和地址值赋值给名为GDTR的48位寄存器。这是一个很特别的48位寄存器,并不能用我们常用的MOV指令来赋值。给它赋值的时候,唯一的方法就是指定一个内存地址,从指定的地址读取6个字节(也就是48位),然后赋值给GDTR寄存器。完成这一任务的指令,就是LGDT。

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

在最初执行这个函数的时候,DWORD[ESP+4]里存放的是段上限,DWORD[ESP+8]里存放的是地址。具体到实际的数值,就是0x0000ffff和0x00270000 。把它们按字节写出来的话,就成了[FF FF 00 00 00 00 27 00](要注意低位存放在内存地址小的字节里)。为了执行LGDT,笔者希望把它们排列成[FF FF 00 00 27 00]的样子,所以就先用"MOV AX,[ESP+4]"读取最初的0xfffff,然后再写到[ESP+6]里。这样,结果就成了[FF FF 00 00 27 00],如果从[ESP + 6]开始读6字节的话,正好是我们想要的结果。“

如果你不了解保护模式下的寻址原理的话,是读不懂这些文字的,http://www.techbulo.com/708.html读这篇文章后再对照这段文字,就可以理解了。

时间: 2024-10-07 11:06:45

《30天自制操作系统》第六天的相关文章

第二个Sprint冲刺第六天

第二个Sprint冲刺第六天

iOS开发——完整项目实战OC篇&百思不得姐第六天

百思不得姐第六天 上午 一:使用Xib加载View 一般我们直接在分类里面,因为Xib加载的代码都是一样 二:键盘的两个常见属性 inoutAccessoryView inputView 三:切换系统和自定义键盘的简单使用方式,是不是很变态 根据使用的键盘判断类型并且切换 四:使用动画的方式,其实就是设置切换的时间就可以了 五:特殊需求,直接总定义并且添加View(不使用inoutAccessoryView) 使用通知实现工具条跟着键盘的移动:(上移键盘的高度) 1:改变Y值,上下改变Y值->使

第一次冲刺第六天

团队第一次冲刺第六天(2015/5/11) 完成任务: 部分附加小功能已经基本实现. 计划任务: 完成晃动实现亮屏锁屏. 遇到问题: 不过分功能有时可以用,有时不反映.软件不强壮

团队作业8----第二次项目冲刺(Beta阶段) 第六天

BETA阶段冲刺第六天 1.小会议ing 2.每个人的工作 (1)昨天已完成的工作 重复部分可以用红色字体显示 (2) 今天计划完成的工作 (3) 工作中遇到的困难: 尤少辉:在测试的时候,当队友提出对查重部分显示红色这方面的bug时,起初没有想到是其中的一个空格键没有处理好,由于这块部分的代码是我写的,发现自己当时有些马虎了,但是今天及时发现,这也说明代码复审的重要性. 洪世豪:今天测试一切顺利,并没有遇到太大的问题 王杰:对于重复部分显示红色这块方面测试,在重复的开头第一句话无法显示红色,经

团队项目冲刺第六天

团队项目冲刺第六天个人工作总结如下: 1.昨天干了什么? 昨天实现了软件的用户注册功能,但是数据库的设计需要后期进行优化设计. 2.今天准备干些什么? 今天准备将已经做好的界面或者部分功能进行整合,从整体上对软件的设计进行修改完善. 3.遇到什么难题? 界面之间的跳转出现问题,并且有些界面的设计xu要进行修改,比如最开始运行的界面需要设置为全屏,将theme设置为了全屏,但是样式没有发生变化,xml文件中也进行了配置,目前还不知道错误在哪..

十五天精通WCF——第六天 你必须要了解的3种通信模式

wcf已经说到第六天了,居然还没有说到这玩意有几种通信模式,惭愧惭愧,不过很简单啦,单向,请求-响应,双工模式,其中的第二种“请求-响应“ 模式,这个大家不用动脑子都清楚,这一篇我大概来分析下. 一:“请求-响应“模式   如果你看了我上一篇的博文,你应该非常清楚这种类似“本地调用”的方式,wcf同样也分为“同步”和“异步”两种,不过不管是异步还是同步,最终都逃 不过是“请求-响应”这个事实,对吧. 1: 同步方式 这种方式我想没什么好说的,前面几篇我已经说的非常清楚了,具体使用方法可以参考我的

天津出差系列(六)----第六天

早上七点多前台打印不了导检单,浏览器左下角报(isvip未定义),原因可能是vip默认为null.但是这个原因也不可能,因为我进去编辑选择vip后保存,再次打印导检单还是不行. 但是等到下午我把原来的程序(也就是上午打印不了的程序)替换过去,再次打印就可以了(同样的人). (这个原因不明,现在导检单又可以打印了) 在科室录入页面模板配置成了阴性,但是选择后还是阳性打钩. 原因是当模板为小数的时候,后台过程完数字后还有一个小数点,导致的.(已解决) 科室录入页面放射科弃检问题.(已解决) 团体确认

【每日Scrum】第六天(4.27) TD学生助手Sprint2站立会议

站立会议 组员 昨天 今天 困难 签到 刘铸辉 (组长) 今天和楠哥做了课程事件和日历表操作的例子,并尝试做时间表和日历表的数据库设计 Y 刘静 今天开始编辑自己项目中的日历管理 编辑程序,能够在日历界面,随便点击某一天,能够添加这一天的时间,具体到小时定时 还行不太难 Y 解凤娇 今天查看网络上关于软件测试的文档以及说明 开始进行功能测试. 繁琐,bug不少正在努力修正 Y 王洪叶 查找铁道大学周边的服装广场和同学比较常去的一些购物广场,并通过调查,得到各个地点的具体位置和详细信息. 通过看视

安卓第六天笔记--ListView

安卓第六天笔记--ListView 1.AdapteView AdapteView 继承ViewGroup它的本质是容器 AdapterView派生了3个子类: AbsListView AbsSpinner AdapterViewAnimation 这3个类是抽象类 实际使用中采用的是它们的子类 2.Adpate结构 3.使用ArrayAdapter完成ListView显示 ListView使用的是ListAdapter类型的适配器 由于只显示文字,所有使用ArrayAdapter ArrayA

第六天,尝试给图片文字加入链接

1 <head> 2 <meta http-equiv="Content-Type" content="text/html;charset=UTF-8" /> 3 <title>第六天</title> 4 <script type="text/javascript"> 5 window.alert("欢迎来到该玩网页") 6 </script> 7 <