MyOs-day1

软件准备

bz-二进制编辑器或notepad ++(32位) 安装插件HexEditor也可综合使用

bz缺点在于再次打开img时不能显示全,所以修改时有困难两者配合使用最佳

tolset工具集在30天自制操作系统光盘中可以找到

 

过程

1.在tolset文件夹中创建名叫helloos0的文件夹

2.将tolset目录下的名为z_new_w的文件夹中的!cons_9x.bat和!cons_nt.bat文件复制粘贴到helloos0中

3.运行bz写系统helloos.img

4.将helloos.img复制到helloos0中

5.创建run.bat文件并编辑

6.创建install.bat文件并编辑

源文件

helloos.img

run.bat

install.bat

手敲源文件helloos.img

除了图中的几个地方,其余全部为0,直到168000这个地址为止,也就是1,474,560 字节



根据电脑系统选择!cons_nt.bat还是!cons_9x.bat

输入run运行即可看到hello world

这样便不依靠任何已有的操作系统,而利用二进制、十六进制写出了自己的系统雏形,对于小白还是有一个小小的成就感的

这样的系统虽然装机之后可以显示hello world 但是却没有任何功能,接下来再慢慢尝试

了解cpu

cpu最早时为了处理电信号,将电信号的开关与0 1 对应起来之后二进制数和电信号可以互相转换。虽然cpu依然只能处理电信号,但是却变成了二进制计算机。我们能用cpu处理的并不仅仅只有数据,我们还可以用电信号向cpu发出指令。我们所编写的程序最终都要转换成机器语言,机器语言就是以电信号形式发送个cpu的。

体验二进制编辑器编写汇编程序

利用原作者写的nask编辑器进行编(比较节省时间),如果一点点写应该有18万行,所以选择原作者的编译器编辑。

过程(前面的helloos.img可以删除掉)

1.利用notepad++创建一个名叫helloos.nas的文件,写入源代码

2.创建一个名叫asm.bat的文件并编辑

3.运行!con_之后,输入asm会自动生成一个helloos.img文件

4.再输入run便从虚拟机打开了helloos.img文件

源代码

asm.bat

 helloos.nas


下面是运行效果,和之前的一样


加工润色

经过一番修改程序变成了22行,我们继续对他进行修改(之前的文件夹可以删掉),创建helloos2.nas文件,代码变成了40+行

源代码

helloos2.nas

需要注意的地方

helloos2中的   ;    是命令,是个注释命令,相当c语言中的  //

DB指令的新用法,它可以写字符串,写字符串的时候汇编语言会自动的查找字符串中的每一个字符所对应的编码,然后把他们一个个的排列起来,也就是说当我们想要变更输出信息的时候不用再查字符编码表了

DW指令  data word

DD指令  data double-word

在计算机汇编语言中,word指16位(两个字节)。double-word是32位(4个字节)

RESDB 0x1fe-$中的美元符号是一个变量,可以告诉我们这一行现在的字节数,在这个程序里面,我们已经在前面输出了132字节,所以这里的$就是132.因此nask先用0x1f减去132,得出378,再连续输入378个字节的0x00。

我们必须保证软盘的第510字节(即第0x1fe字节)开始的地方是55 AA 。如果使用$,汇编语言会自动计算需要输出多少个00,我们就可以轻松修改输出信息了

专业术语

TAB=4…………..设定编辑器的TAB键的宽度为4,使源程序更容易读

FAT12格式……..用windows或MS-DOS格式化出来的软盘的格式,该格式兼容性好,可在windows上使用,剩余空间可以保存其他文件

启动区……………软盘的第一个扇区称为启动区。计算机读写软盘时候并不是一个一个字节的读写,而是以512字节为一个单位进行读写,因此软盘的512字节就称为一个扇区,例如一张软盘有1440kb,也就是1474560字节,除以512得到2880,这就是说一张软盘有2880个扇区。而计算机首先从最初的一个扇区开始读软盘,然后区检查这个扇区最后两个字节的内容。如果者最后两个字节不是55 AA,计算就就会认为这张盘上没有所需启动程序,就会报不能启动的错位(55 AA是设计者定的)。如果计算机确认了第一个扇区的最后两个字节正好是55 AA,那它就认为这个扇区的开头是启动程序,并开始执行这个程序。

IPL…………………启动程序加载器。启动区只有512字节,实际操作系统没有这么小,所以几乎所有的操作系统都是把加载操作系统本身的程序放在启动区里。而hello-os没有加载程序的功能,所有HELLOIPL不太贴切,但是必须起一个8字节的名字,长度不够用空格补全

boot…………….启动

其他文章