30天自制操作系统day2
一、实验主要内容
1、 内容1:文本编译器的下载
下载的文本编译器为Notepad++
这里附上下载网址:https://notepad-plus-plus.org/repository/7.x/7.6.4/npp.7.6.4.Installer.x64.exe
对其进行安装即可
2、 内容2:汇编指令及寄存器的介绍
ORG指令:把程序装载到内存中的指定地址
JMP指令:跳转指令,相当于C语言中的goto语句
MOV指令:赋值
ADD指令:加法指令,将两个操作数相加
INT指令:中断指令,用来调用该地址对应的中断函数
HLT指令:是让CPU停止动作的指令,不是彻底的停止,而是让CPU进入待机状态
16位寄存器
AX:accumulator,累加寄存器
CX:counter,计数寄存器
DX:data,数据寄存器
BX:base,基址寄存器
SP:stack pointer,栈指针寄存器
BP:base pointer,基址指针寄存器
SI:source index,源变址寄存器
DI:destination,目的变址寄存器
16位段寄存器
3、 内容3:制作启动区
把helloos.nas的后半部截掉,文件名也改为ipl.nas
改造asm.bat,将输出文件名改成ipl.bin和ipl.lst
making.bat:先读入空白磁盘映像文件,在开头写入ipl.bin,输出helloos.img文件
双击!cons,在命令行窗口输入asm->makimg->run
4、 内容4:Makefile入门
#表示注释
\是续行符号,表示这一行太长写不下,跳转到下一行继续写
格式规则:即指定多个目标并能够根据每个目标名构造对应的依赖名的规则。
格式规则的语法格式:
targets… :
[tab]commands
target:生成的目标文件,必写;
prerequisites:前置条件,,生成目标文件时,会先检查源文件是否准备好了,若准备好了Make工具就执行下一行(即命令行);
[tab]:tab键,每个命令行必须以tab键为首,"前置条件"和"命令"都是可选的,但是两者之中必须至少存在一个。
命令窗口输入make -r ipl.bin
make -r helloos.img即可生成相应文件
删除上面两个文件,再次输入make -r hellos.img即可生成上述的两个文件,它会去Makefile里寻找ipl.bin,然后生成它。
不删除上面文件,再次输入make -r helloos.img会发现输出(’helloos.img’ is up to date)
将ipl.nas输出改为How are you?,再次输入make -r helloos.img,重新生成输出文件
说明make.exe不仅仅判断输入文件的存在,还判断文件的更新日期,并据此决定是否要重新生成输出文件
5、 内容5:增添的命令
make clean:删除掉最终成果(这里指helloos.img)以外的所有中间生成文件
make src-only:把源程序以外的文件全部删除干净
make(不带参数):默认执行make img命令
二、遇到的问题及解决方法
1、描述问题1
系统找不到指定路径
解决方法:需要将helloos文件复制到tolset文件夹下才行,因为要调用其中的nask.exe,生成ipl.bin和ipl.lst文件。其他的makeimg以及run都是一样的,要调用tolset中的文件
2、描述问题2
makeing不是内部或外部指令,也不是可运行的程序或批处理文件
解决方法:导致该问题的原因是makeimg的指令输错了,第一次输入making,第二次输入making,后来才发现是makeimg。
三、程序设计创新点
1、 描述创新点1
将命令设为.clearlove目标,这样可以避免与同名文件冲突。
因为clearlove目标并非是由其它文件生成的实际文件,make
会跳过隐含规则搜索,这样无需担心实际文件存在与否。
假如我这个文件夹里面有个文件命名为clean,我在执行make clean时,就会出现:
而将其设为clearlove目标时,就不会出现这种状况了。
2、 描述创新点2
在MakeFile文件中设置变量,合并指令以精简代码。
30天自制操作系统1~15天日志:https://download.csdn.net/download/weixin_43979304/15320819?spm=1001.2014.3001.5503