- 课程要求学习第1天到第16天的内容,看了之后感觉还不错,想全部看完书的内容,这样对操作系统也有一个比较清晰的认识,坚持更新!
附带书的封面:
准备工作:
- BZ.exe二进制编辑器(网上直接下载就OK了)
- 需要作者提供的虚拟光盘(模拟器启动):已经有人在博客上传了
- notepad++:一个代码编辑器(界面很好看)
- tolset_h:运行环境,需要把作者的工程复制到这个目录下面才可以运行
- 《30天自制操作系统》书本
- 一张软盘(没有也可以)
准备工作完成,开始第1天的学习!
- 打开BZ.exe编辑器(二进制编辑器Binary Editor)输入保存
成功打开的界面如下(护眼模式)
输入:在键盘上直接输入EB4E904845......输入两个字母就会自动插入一个空格,输入不同的字母或者数字时会在右侧显示对应的字符,输入的为16进制的ASCII码,右侧显示的是对应字符。从000090开始后面全都是00,一直输到168000这个地址正好是1474560字节。
保存:输入完毕后,从菜单上选择文件”File”->”Save As”取个名字“helloos.img”,保存。打开时先启动BZ.exe ,从菜单中选择”File”->”Open”,选择目标文件,打开,要想能编辑文件要在菜单里选择编辑”Edit”->”Read Only”(只读),两个都去掉再重新打开,就可以进入编辑状态。
注意在地址0001F0和001400附近有些地方不全是00,要根据书本上提示做修改。
(一)准备工作
保存.img文件之后,可以写入软盘再用其来启动电脑,也可以不用软盘。这里用的是模拟器方法。在启动之前要做一些准备工作,打开附带光盘文件,找到名为tolset文件夹,打开之后在里面新建一个文件夹命名为helloos0,把之前保存的映像文件helloos.img复制到这个文件夹里,再到tolset文件夹中找到z_new_w子文件夹打开,把里面的!cons_9x.bat和!cons_nt.bat这两个文件复制粘贴到helloos0文件夹里。
接着还要再helloos0新建一个TXT文件,先命名为run.txt 打开在里面输入
Copy helloos.img .. \z_tools\qemu\fdimage0.bin
.. \z_tools\make.exe -C .. \z_tools\qemu
保存之后更改文件名为run.bat(后缀改成bat),弹出窗口选是,按照同样步骤创建install.bat,输入内容如下
.. \z_tools\ imgtol.com w a:helloos.img
(二)运行程序
在helloos0文件夹中双击!cons_9x.bat或者!cons_nt.bat,二者总有一个能运行,我的电脑是!cons_nt.bat文件,出现命令行窗口,输入run指令,按回车键,就会显示hello,world
(三)修改显示
在hello world的.img文件中修改显示,找到hello的第一个字符h对应的位置,从这个地方开始修改,可以在左边直接按照16进制对应的ASCII码修改也可以在右边点击h改成自己想要的字符,我这里改的是**字符,显示结果如下。
(四)汇编程序
在作者附录光盘的project\01_day\helloos1文件中的helloos.nas文件是作者的用nask写出来的用到DB指令还有RESB指令源程序,在没有优化之前代码过长,不粘贴!在保存为helloos.nas文件之后需要用!cons命令窗口输入指令:>..\z_tools\nask.exe helloos.nas helloos.img 生成映像文件helloos.img。优化之后的内容如下图,保存为helloos.nas(在附录光盘中已经做好在helloos1文件夹)。我们只需要将helloos1文件夹复制到tolset文件夹中,用!cons打开命令行窗口输入asm(作者做了一个可以批量处理文件的asm.bat),就可以生成helloos.img文件,再输入run运行该程序输出内容不变。
(五)加工润色
附带光盘中的helloos2文件夹包含的helloos中的源代码有DB指令的新用法,可以直接用来写字符串。“;”命令是注释。同样复制文件夹到tolset中可以显示同样结果!若要显示不同的信息,可以在显示部分做修改。
附加部分指令用法
DB:“data byte”的缩写,往文件里直接写入1个字节的指令。
RESB:“reserve byte”的略写,空出字节,比如RESB 10就是空出10个字节的意思。
DW:“data word”的缩写,word指的是16位的意思(2个字节),与db指令类似功能。
DD:“data double-word”的缩写,double-word 表32位(4字节)。
$符号:在本程序里前面输出了132个字节,这里的$就是132的意思,用0x1fe-132得出 378,连续输出378个0x00。如果前面输入的字符改变,$可以自动计算出需要输入几个0。