30天自制操作系统day01-从计算机结构到汇编程序

30天自制操作系统-day01

从计算机结构到汇编程序

进入智能专业的第一个实验,开始写博客来记录一些知识总结和注意点吧。下面的内容主要是按照教材的板块来划分,每一个标题下面总结了该部分的一些知识点的梳理,希望能对看到的人有点点帮助,也给自己一个记录的地方吧。

先动手操作

二进制编辑器(BZ)
用来对二进制数进行直接编辑的软件。打开BZ后直接输入二进制代码即可。以下为几种基本操作:
“00”的多数输入:选中一部分“00”,edit-copy,进行复制粘贴完成。
保存文件:file-save as,推荐保存为.img格式。完成软盘映像文件的制作。
打开文件:file-open。(如果要编辑打开的文件,则选择edit-read only,进入编辑模式)。
向磁盘写入映像文件的准备-tolset
tolset包含了一些后期开发中需要用到的工具,具体使用如下:
1、在tolset文件夹下创建新的操作文件夹,命名清晰(如示例helloos0)。
2、将之前保存的映像文件(.img)放入该文件夹下,并将tolset下的z_new_w的子文件夹中的!cons_9x.bat和!cons_run.bat两个文件复制到刚刚新建的文件夹中。
3、该文件夹下创建文本文件,并将后缀改为.bat,并编辑输入以下内容:
Copy helloos.img …\z_tools\qemu\fdimage0.bin
…\z_tools\make.exe -C …/z_tools/qemu
同样的步骤创建install.bat,并输入:
…\z_tools\imgtol.com w a: helloos.img
测试操作系统软件的PC模拟器-QEMU
电脑没有安装软驱,且购买软盘不方便,所以采用QEMU这一PC模拟器来运行写好的类似操作系统的这个软件,具体操作如下:
QEMU的打开运行:打开事先复制入文件夹的!cons_9x.bat或!cons_run.bat文件,输入run指令即可。

究竟做了什么

这一部分主要对开发操作系统的原理进行了几方面的解释,具体内容如下:
CPU到底能做什么
CPU,即*处理单元。只能与其他电路进行电信号交换,且对于电信号,只能理解ON和OFF两种状态,无法理解一些具象的事物,比如经常用到的文字、声音等。因此CPU只是负责执行电信号对应的指令,并对电信号进行输出。
二进制数0和1
0和1可以分别代表电信号中的OFF和ON,可以通过将文字等内容编码后转化为二进制,就能转化为CPU可以处理的电信号。软盘的原理也是如此,将0和1转化为磁极的N极和S极,因此只用0和1这样的二进制数字就可以写出映像文件。
映像文件里面为什么不全是0和1
编写时因为二进制表示位数过长,所以改用每四位转换为一个十六进制数的方式,缩短了代码的长度,降低了编写难度。计算机业界普遍使用十六进制数。

初次体验汇编程序

这一部分内容主要实践了如何完成一个汇编程序的编写,以下是编写过程中的一些注意问题及指令解读:
汇编程序的书写及保存
在编译器中书写完成的汇编代码呈现如下:
30天自制操作系统day01-从计算机结构到汇编程序
观察可以发现,汇编代码和之前书写的二进制代码的内容一致,但汇编代码前面有前缀0x-,二进制代码只有单纯的数字(数字前面加上0x就变成十六进制数,不加0x是十进制数)。但这种方法编写的程序长度太长,耗时且占用空间大。这就需要加入指令的使用来简化代码。
汇编代码中的指令(部分)
DB指令:define byte的缩写,往文件里直接写入1字节的指令。
RESB指令:reserve byte的缩写,RESB 10这一指令的含义是:从现在的地址开始空出10个字节,且nask(编译器)会自动在空出的部分填充上0x00,这就极大的节省了输入大量0x00的时间。

润色加工

这一部分主要是将之前繁琐的代码进行润色和调整,使其可读性增强,更加清晰,教材中给出的示例代码如下:
30天自制操作系统day01-从计算机结构到汇编程序
30天自制操作系统day01-从计算机结构到汇编程序
这一部分是标准FAT12格式软盘专用的一段代码。
30天自制操作系统day01-从计算机结构到汇编程序
这一部分是程序的主体部分。
30天自制操作系统day01-从计算机结构到汇编程序
以下给出几种指令的解释:
 DW:define word,16位
 DD:define double-word,32位
 (dollar符号):代表一个变量,表示这一行现在的字节数。例如程序中的语句:
RESB 0x1fe-$
因为在这一行之前已经输出了132个字节,因此这里的dollar符号代表132,所以该指令是在计算从此处到0x1fe处有多少字节,用RESB指令结合nask功能全部填充为0x00,实现了从当前位置到指定位置0x00的填充。
采用dollar变量表示而不直接用数字表示的原因是,$是变量,可以表示任意位置之前的输出字节数目,因此可以进行任何位置上的该操作,只需一行相同的代码即可实现,比具体数字效率更高。

创新设计

尝试修改二进制代码中显示出来的文字部分内容,以达到修改程序运行后显示内容个性化的目的,具体操作及截图如下:
 修改二进制代码:
通过查找ASCII码表,对照出想要修改文字的十六进制码,写入映像文件中,如下:
30天自制操作系统day01-从计算机结构到汇编程序
 修改后运行测试结果如下:
30天自制操作系统day01-从计算机结构到汇编程序
30天自制操作系统day01-从计算机结构到汇编程序
如图所示,修改成功。

第一次开始写CSDN记录学习生活,希望以后可以在这里记下自己更多的学习经历,也希望这里可以记录自己的一次次进步和成长,所以就加油吧!