操作系统实验--30天自制操作系统第2天实验日志

一、实验主要内容

1、内容1:文本编译器notepad++下载。书上的网址已经失效,在网上另外找到的编译器,(不过注释仍旧是日文的我也看不懂,这里建议还是看书上的注释比较好):
用他来打开一个nas文件,如helloos5中的ipl.nas看一下:
在这里插入图片描述

2、内容2:学习相关知识。本次实验的主要核心内容是学习部分汇编指令,helloos.nas中的程序核心部分如下:
在这里插入图片描述

其中entry,putloop,fin,msg用于指定jmp指令的跳转目的地址(其本质上就是一个标记不占地址空间,实际上是它下面第一个指令的地址)
其中的新指令:
ORG指令:后面添加程序开始的地址,如ORG 0x7c00表示程序从0x7c00地址处开始执行。
JMP指令:相当于C语言的goto语句,跳转指令,后面的参数为要跳转的地址。
MOV指令:赋值,”MOV AX,0” 相当于” AX=0; ”,前面可以指定指定数据大小,但要求源数据和目的数据必须位数相同。
INT指令:软件中断指令,BIOS程序在电脑出厂时组装在主板上的ROM里,里面写入了操作系统开发人员经常用到的程序(各种函数的集合)。INT就是用来调用这些函数的指令,INT后面跟数字,不同的数字可以调用不同的函数,教材中用的是0x13号中断其他中断的用法可见https://blog.csdn.net/ludylu/article/details/6593707。
HLT指令:停止指令,让CPU进入待机状态,任一操作都可以唤醒CPU。
其中每个标号下代码的只要意义:
entry:主要程序开始的地方,用于进行寄存器的初始化,可以在此处进行添加修改代码但不建议
putloop:运行代码部分,此处代码作用是调用msg地址处的数据并调用显卡将其显示出来,配合其中的跳转指令构成一个循环将msg中的数据全部显示出来(0为止),若要修改代码在此处或新建立一个标号比较合适
fin:程序用于让CPU待机的代码,处于无限循环当中,一般不会修改这里的代码
msg:显示字符的信息,这里相当于C语音中要输出的字符串当中的内容,这里不能进行运行程序的代码修改,只能用于显示部分的修改,在此处添加的指令程序会认为是显示字符的ASCLL码进行显示,如果不是显示字符就可能出现乱码或无法显示。
3、内容3:先制作启动区。
把helloos.nas的后半部分(从msg部分后面的DB语句)删掉,保留512个字节(这里要注意512个字节中的最后两个字节必须是0x55,0xaa),把文件名改成ipl.nas,然后保存。运行!cons_nt.bat后输入asm指令生成以下文件(ipl.bin,ipl.lst),
在这里插入图片描述

再用makeimg.bat(在命令行输入makeimg 运行,由ipl.bin生成helloos.img)文件生成helloos.img文件然后输入run运行,显示如下可以发现系统运行情况不变。
在这里插入图片描述

4、内容4,makefile入门。
建立makefile文件方法:可以先用记事本输入内容,保存之后再把.txt后缀名去掉,就变成了makefile不带拓展名文件,根据教材输入以下内容。
在这里插入图片描述

内容解释:
ipl.bin : ipl.nas Makefile——表示制作ipl.bin之前先检查ipl.nas和Makefile文件是否存在,如果有这两个文件就执行下面一行的命令,下面的命令中格式为路径+可执行文件+参数(…表示当前文件的上一目录,不写完整路径默认是从当前目录开始)。
下一个的命令(helloos.img)同理,\是续行符号。
需要从tolset的z_new_w文件夹中复制make.bat过来制作make.exe。
make.bat内容如下:
在这里插入图片描述

这里命令格式与makefile中的一致,这里作用为对make.exe文件进行参数的初始化(这里的9个参数与helloos5中makefile文件中的9条命令语句之间没有数量的关系)。
用!cons_nt打开一个命令行窗口,输入“make -r ipl.bin”启动make.exe(这里-r选择参数表示禁用内置隐含规则这里不加,经测试没有影响,其他参数的含义可以在下面的链接中查看https://blog.csdn.net/manjianchao/article/details/54344855),它首先会读取Makefile文件,寻找制作ipl.bin的方法,make.exe找到制作方法之后先前提的文件是否准备好,然后去执行其中的命令生成ipl.bin和ipl.lst
在这里插入图片描述

然后我们再输入“make -r helloos.img”启动make.exe按照指令执行生成helloos.img文件。
如果删除helloos.img和ipl.bin之后直接输入“make -r helloos.img”命令,make也会生成helloos.img文件,其中会先去Makefile寻找ipl.bin的生成方法,生成ipl.bin后再生成helloos.img。
在这里插入图片描述

在不删除文件和不更改文件的情况下,输入命令“make -r helloos.img”执行时,系统就不会执行。
在这里插入图片描述

但在文件生成过程中的文件有一处被删除或修改,择系统会重新再次运行(必须是对后面文件有影响的才行,这里删除ipl.lst则不会重新运行,如果删除源文件无论有没有中间文件ipl.bin 都会报错,因为系统会检测生成文件过程中的所有文件从而发现源文件不存在,从而重新运行但源文件没有生成方法所以会报错,)
更该数据后:
在这里插入图片描述

删除源文件后:
在这里插入图片描述

在Makefile文件里加入新指令
img :
…/z_tools/make.exe -r helloos.img
…/z_tools/make.exe -r helloos.img——是调用指定路径下的make.exe应用程序,然后执行make -r helloos.img命令,就相当于在命令窗口里输入的“make -r helloos.img”。
这样修改之后,就需要输入“make img”就可直接生成helloos.img了,此时可以删掉makeimg.bat,再加入下面这些:
在这里插入图片描述

这些都是将windows批处理命令加入到makefile中的结果QQ以上都是教材中的命令,QQ及以下是自己添加的命令。

二、遇到的问题及解决方法

1、描述问题1:使用makefile文件打开其他应用时显示请求的操作需要提升。
在这里插入图片描述

解决办法:
原因:cmd的操作权限不足
解决方案:1,将可执行文件放入除C盘以外的地方
2,运行cmd时使用管理员身份运行

2、描述问题2:教材上查看BIOS函数的网站无法打开
解决方案:使用其他的网站https://blog.csdn.net/ludylu/article/details/6593707

3、描述问题3:修改汇编指令后报错
在这里插入图片描述在这里插入图片描述

解决方法:
原因:汇编指令中MOV不支持直接转移常数到DS寄存器
解决方案:使用AX寄存器间接赋值
在这里插入图片描述

三、程序设计创新点

1,描述创新点1:使用makefile打开其他应用
找到想要打开的应用(如果不是.exe文件而是快捷方式),右键查看属性
在这里插入图片描述

在目标一栏处就是可执行文件的路径,记录下来在makefile 文件中添加如下:

在这里插入图片描述

然后在命令行中输入make QQ就可以打开QQ应用了
在这里插入图片描述

如果可执行文件在C盘中,解决方法见上面“遇到的问题”
2,描述创新点2:简单修改启动程序
这里添加了一个标号用于进行循环输出,同时在初始化部分添加一个寄存器的初始化
在这里插入图片描述
在这里插入图片描述

实验心得体会:

在本次实验中,这次的实验内容比较少,这次尝试了一下使用不同的BIOS函数,进行一个输入的操作,这里的汇编其实是参考了上学期第一次计算机系统课程实验的实验内容,但不知道为什么这里的操作系统好像并没有命令行?,反正就是无法输入使用0x21中断也不行,这里还有很多关于磁盘操作的相关函数,但是比较复杂还是以后在说吧(主要还是汇编太麻烦了我也不太会),这次实验中还使用了makefile启动了其他应用,这里也是成功理解了一下命令行的运行规则吧(虽然这个好像大家都知道)。

おすすめ

転載: blog.csdn.net/qq_49327751/article/details/120606241