《Orange's 一个操作系统的实现》
----于渊《Orange's 一个操作系统的实现》
很早以前就晓得这本书了,当时还真没有打算仔细看的,随着后来了解的东西逐渐多起来后,我感觉上层的应用程序也好,还是更高级的的高级语言也好,都是按照格式来编程,根本不知道为什么,各种各样的调用(鄙人愚钝),当然也没有说高级语言不好,只是自己不喜欢在不明白为什么的情况下进行‘瞎’编程,当时在刚上大学前,我就了解到了c语言和汇编(只是了解),知道汇编是多么神奇的语言(不是夸大汇编的重要性),但是很难学,当时我就觉得就算以后课程不开,我也要自己学,于是头脑一热买了汇编和c的书,在入大学后,基本就是一个劲的学c,再到后面学c++的时候,我就开始自学汇编了,买的是王爽的书(网上推荐的),学了接近一半左右吧,然后就暂时没有看了,偶然的机会就去搞了搞算法,其实鄙人觉得算法真的是很重要(其实是数学重要),也搞了一段时间,但是由于自己的不才,基本学的很差,再加上自学真的很痛苦,也大二上快要结束的时候,我也仔细思考了一下到底以后该如何走,在学算法的过程的中,真的学到了很多,虽然现在能力有限,但是我觉得那种思维方式也好,还是那份坚持也好都是值得肯定的,在那学期快结束的时候,自己又拿起了汇编那本书,慢慢啃起来,网上也找了一些视频看,在刚放寒假的时候基本也就看完了,其中的程序自己也实践过,通过对汇编的学习,我发觉我对底层其实更感兴趣一些,对于一些问题我总是喜欢知道为什么,我也看了默写高级语言写的东西,身边也有很多东西学其它东西,也听他们说刚开始的照着视频里面的东西做,但是很多自己都不知道为什么,最好东西做出来的,但是自己却都不是很清楚,知其然不知其所以然(当然也不是说学高级的东西不好,这只是自己感觉而已),时间过得太快了,由于自身原因,一直搞算法也是不太可行的,所以在寒假想了想到底该怎么办,最后决定还是搞算法吧,当然现在的重心不是搞算法了,我先把这学期很多重要的课程学好,比如操作系统,计算机组成原理之类的,我也知道这种课程很重要,所以对自己定的目标不是应付考试就行了,而是真正的学到东西,深入的研究,寒假也把操作系统的课程简单的过了一遍,加上有汇编基础(再深入研究汇编)所以才有今天这篇文章的标题,其实我开始打算学完后在记录的,但是我想学习这个不是简单的几天,有可能会花费很多时间,所以最后打算边学边记录,同时也激励自己嘛,尽管有可能最后不能完成任务,但是我还是会去做,重在学习的过程。目前先把基础打好再说,如果上面言辞有冒犯各位的还请原谅。
今天开始第一课:
说明:我试验环境linux+bochs(搭建环境也费了点神,哎)
Linux汇编和windows有点不一样,书上用的是nasm编译器,和masm相识但是也有差别,最好参考一下nasm手册,这样避免走弯路,可以到我上传的博客资源进行下载
十分钟完成的操作系统----实质是一个引导扇区
在最开始看的时候还是慢困难的,在完成汇编课程设计后其实就简单了很多,有兴趣的可以看看我课程设计中的相关资料,或者了解一下操作系统的启动过程,这样头脑要清晰很多
下面的代码中的ClearScreen函数是我自己加的,方便观察结果
org 07c00h ; 告诉编译器程序加载到7c00处
mov ax, cs
mov ds, ax
mov es, ax
call ClearScreen
call DispStr ; 调用显示字符串例程
jmp $ ; 无限循环
DispStr:
mov ax, BootMessage
mov bp, ax ; ES:BP = 串地址
mov cx, 16 ; CX = 串长度
mov ax, 01301h ; AH = 13, AL = 01h
mov bx, 000ch ; 页号为0(BH = 0) 黑底红字(BL = 0Ch,高亮)
mov dl, 0
int 10h ; 10h 号中断
ret
ClearScreen: ;清屏函数
push ax
push es
push di
push cx
mov ax,0b800h ;显存地址
mov es,ax
mov di,0 ;显存偏移地址
mov cx,2000
cls: mov byte [es:di],' ' ;往显示器输入空字符
add di,2
loop cls
pop cx
pop di
pop es
pop ax
ret
BootMessage db "Hello, OS world!"
times 510-($-$$) db 0 ; 填充剩下的空间,使生成的二进制代码恰好为512字节
dw 0xaa55 ; 结束标志
把这段代码用NASM编译一下:
准备一个软盘(可以用网上工具制作),连接到虚拟机linux种然后在linux下可以这样把程序写入软盘:
进入bochs:
按6开始,然后按c如果一切顺利就会出现下面这个画面:
关于配置环境书上讲得其实很详细了,慢慢调试,坚持!!