栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

30天OS,320*200屏幕,显示字符串,程序改编。

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

30天OS,320*200屏幕,显示字符串,程序改编。

  显示字符串的程序,《30天自制操作系统》的作者川合秀实先生在第5章的第六节所完成的一个程序。

  我试着将作者的程序,改编了一下,使其可以在流行的编译器与虚拟机上运行着。

  所谓的流行的编译器,指的是GNU AS编译器与GCC编译器。

  其中,GNU AS编译器是可以编译AT&T汇编语言的,而GCC是可以编译C语言的。

  GNU AS与GCC都是GNU项目,两者应该可以算作是无缝对接了吧。

  我当初之所以要来学习GNU AS汇编,也是为了能够比较方便地去阅读 Linux 内核源代码。

  在这里,我将自己改编的代码,传到了CSDN里面。下面就是代码包的下载链接。

代码包链接

  欢迎大家来下载代码包。

  在改编这个代码的时候,我其实是耗费了一点力气的。首先呢,我是需要将作者所用的类似于nasm的语法,改编为AT&T汇编语法。

  这样改编了以后,有的地方,它还是不能够运行的。这是因为,作者的许多的代码,其实原本就只是适用于他自己编写的编译器,而我们用流行的编译器去编译代码的时候,是会出错的。为此,我还需要构思与规划代码,想着如何来改编代码。

  有这么几个地方,算是较大的修改的。

  第一,原作者的nas后缀的文件,我将其改成了gas后缀。原作者的nask字样,我将其改成了gas字样。

  第二,原作者是将正式内核的执行代码,加载到了0x280000的高地址。而我的改编版代码,则是先将内核搬运到0x10000开始的地方,随后又搬运到了0x0000开始的地方。

  第三,原作者的代码里面,没有head.s文件,这个文件,是我自己加上去的。里面的代码,也全是我参考着Linux 0.12内核,写成的。

  第四,修改了原书的GDT表。在原书里面,GDT表有三项,第二项为数据段,第三项为代码段。而在我的代码里面,第二项为代码段,第三项为数据段。并且呢,在段描述符的设置上,我主要是采用了Linux 0.12内核的处理办法,然后呢,修改了一下Linux 0.12内核的段限长,使得代码段和数据段的段限长,最终都和作者的设置保持了一致,为4G的长度。

  第五,原书里面,作者将显卡的参数,保存在了0x0ff0开始的一段内存空间中。而在我的代码里面,我是将显卡的相关参数保存在了0x90ff0开始的内存中。也就是,我的代码,相比作者原来的代码,它是将地址值加了0x90000。

  第六,原书并没有make_font.c程序,也并没有hankaku.h头文件。我为了让自己改编的代码能够显示字符串,自行编写了make_font.c源文件,这个源文件编译以后,用来读取hankaku.txt文档,然后输出hankaku.h头文件。因此,我的代码文件,在bootpack.c里面,

有着#include "hankaku.h"

的代码。而作者本人的程序里面,不是这样的代码,而是另外的模样。

  大体上,在改编这个代码的时候,我算是学习了好多。我觉得,Linux世界,可谓是门道很多啊。我觉得,学习Linux系统,学习Linux内核,学习操作系统的知识,都不太容易吧。

  我觉得,操作系统知识的学习,这是一个比较耗费心神的东西。

  改编这些个代码的时候,真的是挺累的。

  改编完成以后,喜悦感不是很大,更多地,还是疲累。

  接下来,我大概会不定期地写作CSDN博客。大家若是喜欢我的文章的话,欢迎来点赞和关注啊。

 

 

 

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/767822.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号