30天自制操作系统 pdf_30天自制操作系统-正式进入系统

元旦快到了,不出意外这应该是19年最后一篇了,提前祝大家新年快乐。

看着每篇逐渐递减的阅读量,作者很难受啊。

v2-731dc9f010562985d55b9cc10e9b517a_b.jpg

可能是由于前面比较简单,后面开始深入,很多看热闹的就不看了,也可能是第一篇是录制的视频大家都有兴趣看,后面是纯文字就不想看了,如果有人在按照我的思路一点点实现,告诉我一下我会很有成就感的。

上篇文章介绍了用汇编读取磁盘内容,这边开始正式编写我们的系统,并结合上篇的内容,把他加载起来。

完成这些主要有三个工作,首先在IPL中正确跳转到系统所在内存,其实实现基本系统并加载到对应内存,最后就是把这两部分连接起来,形成完整的系统镜像。

IPL中实现跳转

很简单,就是把之前读取磁盘成功后打印成功的消息,现在直接跳转到系统所在内存就好。

next最后的JMP succeed改为JMP load_os

load_os:
	JMP		0xc200 

0xc200是我们后面指定的系统所在内存,可能会有些奇怪,因为直接JMP 0xc200省去load_os也可以,但是考虑到后面会有些信息要通过load_os传递,所以单独写了这么个块。

初版系统

最初的系统,我们简单点,直接黑屏,只有短短几行。

新开个文件,FirstOS.nsm

ORG 0xc200

show_nothing:
    MOV AL,0x13
    MOV AH,0x00
    INT 0x10

final:
    HLT
    RET

这个写完你就可以告诉别人你写过系统了。开始指定程序被加载到内存的位置,和前文对应,中间是调用0x10中断控制光标,在AH=0x00, AL=0x13, 时间,屏幕显示一片漆黑。最后是让系统交出cpu控制权,至此系统功能结束,就是执行了一个让屏幕一片漆黑的中断。

连接引导与系统

最后就是把汇编出的系统与引导连接到一起,把两个文件连起来,我这里直接用了作者提供的工具,工具能在这里获得(VictorYXL/MyOSRefine)

echo off
if not exist obj (
    mkdir obj
)
nasm IPL.nsm -o objIPL.bin
nasm FirstOS.nsm -o objFirstOS.bin
toolsedimg.exe imgin:toolsfdimg0at.tek wbinimg src:objIPL.bin len:512 from:0 to:0 copy from:objFirstOS.bin to:@: imgout:MyOS.img

edimg就是把这两个文件分别填到fdimg0at.tek这里,工具是开源的我也放在了一起,有兴趣的可以自己看一看。

下一篇文章准备介绍引入C开始编写。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值