2012自己以一种悲观者的论调就这样告别,回首这一年,RY有自己的收获和快乐,也有辛酸和愤懑,给自己打个分,大致73分吧。
这一年,自己经历了大二到大三的过渡,在思想上逐渐走向成熟,在技术上慢慢的对自己有所要求,提升自己,但对于智商和情商都不高的我来说,让自己处在保研和考研的边缘,也让自己经常建立起的自信突然在未来的压力下和对自己的怀疑中,丧失而变的自卑。
新的一年,暂且不论这些纠结的话题,希望自己可以不放弃自己,不管新的一年要遇到多少坎坷和辛苦,自己都会坚持和勇敢的走下去,倒不是像苦行僧一样的活着,而是找到自己的节奏。祝愿自己在新的一年学业进步,逐渐达到自己心中所设定的目标,并且,要自信,要自信。
当然也祝愿每个努力的人可以实现自己的梦想,成为自己梦想的主人。
多余的话就说这么多吧,现在进入正题。
《30天自制操作系统》的确是一本好书,最近一个月考试实验较多,忙着复习了,只看了有几章,但却感觉受益匪浅,自己觉得这是一本妙趣横生,把枯燥的计算机原理描述的如有趣的双尾猫一样引人入胜的不可多得的好书籍,抛弃民族情结,笔者着实佩服这位日本的作者,人才啊~
今天不多品,就品品入门的第1天吧(第0天主要为介绍,少操作,这里就略过了)。
所谓先熟悉熟悉,也就是没什么高深的知识,权当娱乐了。
第1天开始作者就给读者来了个下马威,也让读者认识到计算机的神奇。作者用如天书般的二进制代码,完成了一个输出简单语句的简单操作系统:
是,看不懂吧,木有头目吧?这就对了…要的就是这个效果。
不过,话说你觉得完全没有道理的东西,它果真就运行了,不过话说这里建议大家用作者提供的虚拟机安装体验就好,首先软盘现在完全绝迹,其次实在要想真机体验,那留着后面笔者用U盘解决吧,敬请期待后续博客哈,做个广告…
是不是很神奇咩…好吧,我听到你说这有个毛神奇的…
行了,接下来就来动手做自己的OS了(如果可以称之为OS的话),以下就是详细步骤了,第1天比较简单,大家跟着动手做做就ok(待续):
P.S 元旦班级组织吃饭了,明个儿再写吧,对了…后天还有考试,哎,再说吧,555…
20天之后接上这篇吧,前天刚放假,该考完的都考完了,成绩该出的也都出了,这学期除了伤心了两周,至今还不知道为什么考那么低的编译原理,出来的科目都是90+了,感觉很不错,可是也就两门考试课,想来编译原理费尽周折想知道为什么那么低,尼玛一个个大眼瞪小眼,又是白眼又是正常流程不让看卷子,说什么专家组审阅,申请半天,最后弄半天也没个回复,我真的只是很无奈的想大喊一句,fuck U!
哎,这么看重分数,就是因为自己处在保研的边缘,想尽量多弄点分,也只能怪自己前两年吊儿郎当,为时已晚了。好了,闲话就扯到这,继续我们的自制OS之旅吧。
上次我们只是把作者的实例运行了一遍,现在我们自己动手完成:
我们自己新建一个helloos.img,用Ultra Edit(上文有所提及)打开,自己手动添加代码,不过这里行数太多(拜托哦,一共有18万行…),而且全是二进制代码,很容易出错,也没什么技术含量,笔者建议直接将作者文件copy过来,进行相关代码改变,从而来检查代码含义(其实这里偏重于体验,具体含义后文都会逐渐解析):
上图代码所示为正确显示,而以下代码为我改过之后:
可以看到,原来的Hello World被自己改成了很多随意的字符,但是缓冲区结束在 000001f0h倒数第二行55处,这里不能进行修改,否则操作系统运行便出现错误,我们必须保证软盘的第510字节(即第0x1fe字节)开始的地方是55 AA。为什么呢?作者是这样写的:“如果这最后2个字节不是55 AA,计算机会认为这张盘上没有所需的启动程序,就会报一个不能启动的错误。(也许有人会问为什么一定是55 AA呢?那是当初的设计者随便定的,笔者也没法解释)。如果计算机确认了第一个扇区的最后两个字节正
好是55 AA,那它就认为这个扇区的开头是启动程序,并开始执行这个程序。”
好了,面对着不知道是什么含义的代码,我们先看执行的结果:
恩恩,感觉很可怕的样子,这里需要指出的是,执行的方法和以上一样,只需把作者的qemu复制过来,将自己写好的hellos.img放在同一目录,把批处理文件run.bat执行一遍就OK了。
恩恩,懂了咩?
我们再跟着作者的思路,用汇编写相同的镜像文件,这里我们就可以清楚地知道这一串二进制代码到底是含义了。
起初的汇编代码还是很多行没有优化的,超长啊,用的是作者自己开发的“NASM”汇编器,牛人…:
这么长,就不抄了,淡腾啊…行了,直接看看作者书上的:
行了,自己编写简单一点的吧:
改变批处理文件相应的路径之后,其实就是用nask.exe将img转为nas,我的asm.bat命令式:z_tools\nask.exe helloos.nas helloos.img可以得到与上相同的结果:
另两个类似,书上有详细说明,包括汇编代码的各个含义讲的比较清楚,读者自己可以看,特别要注意单字(DB)和双字(DW)等的区别,不然数字节的时候会数错,另外,字符串不包含‘\0‘,这里需要注意了,第一天就这样了。加油!