30天自制操作系统第二天
30天自制操作系统实验日志2
学号 | 201708010402 | 姓名 | 徐冰娜 | 专业年级班级 | 智能1701 |
---|---|---|---|---|---|
实验日期 | 2019.9.23 | 实验项目 | 第2天:汇编语言学习与Makefile入门 |
30天自制操作系统第二天
一、实验主要内容
1. 内容1:汇编指令以及寄存器基本知识
汇编指令
①MOV
指令写法:MOV target,source
功能描述:将源操作数source的值复制到target中去,source值不变
注释:1)当source是[]这种写法,表示传送该地址的数据
2)target和source不能同时为内存数、段寄存器
3) target和source必须类型匹配,位数相同
②ADD(加法)
写法:ADD reg/mem reg/mem/imm
作用:将后面的操作数加到前面的操作数中
注释:两个操作数必须类型匹配,并且不能同时是内存操作数
③CMP(比较)
写法:CMP left, right
作用:right-left
注释:这里并不将结果存入left代表的寄存器中,而仅仅是执行相减的运算,达到依据运算结果去影响EFLAG标志位的效果
④ORG
写法:ORG address
作用:ORG伪指令来实现规定程序的起始地址。如果不用ORG规定则汇编得到的目标程序将从0000H开始。
⑤HLT指令(暂停)
作用:使程序停止运行,处理器进入暂停状态,不执行任何操作,不影响标志。当复位(外语:RESET)线上有复位信号、CPU响应非屏蔽中断、CPU响应可屏蔽中断3种情况之一时,CPU脱离暂停状态,执行HLT的下一条指令。
寄存器基本知识
计算机内部有 8 个 16 位的通用寄存器,也就是CPU内部的数据单元,分别是AX、BX、CX、DX、SP、BP、SI、DI。这些寄存器主要用于在计算过程中暂存数据。
这些寄存器比较灵活,其中 AX、BX、CX、DX 可以分成两个 8位的寄存器来使用,分别 是 AH、AL、BH、BL、CH、CL、DH、DL,其中 H 就是High(高位),L 就是 Low(低位)的意思。当寄存器前面加个E,表示寄存器扩展为32位。
段寄存器:
2. 内容2:操作系统汇编代码解析
make指令:
注释:%为参数表示符,%[1-9]表示参数,参数是指在运行批处理文件时在文件名后加的以空格(或者Tab)分隔的字符串。变量可以从%0到%9,%0表示批处理命令本身,其它参数字符串用%1到%9顺序表示。
3. 内容3:通过磁盘映像管理工具制作系统
步骤:①制作启动区:将启动区部分的512字节写成汇编语言,文件命名为ipl.nas→利用笔者写的编译器nask生成.bin文件
②利用磁盘映像管理工具生成最终的映像文件:先读入一个空白的磁盘映像文件,然后在开头写入ipl.bin的内容,最后将结果输出名为helloos.img的磁盘映像文件。
从ipl.bin的第一个字节开始,从imgout的第一个字节拷贝512个字节。要将bin文件变为img文件多是格式还有兼容性问题(猜测)。
4. 内容4:Makefile语言的学习
注意事项:
①Makefile文件不带扩展名;
②在Makefile中的命令,必须要以[Tab]键开始,不能以空格来代替;
③#表示注释,注意加注释时,不要直接加在变量定义后边,因为这是Makefile会将空格也计算在变量内;
④:后面是制作:前的文件要检查:后的文件是否准备好;
⑤“\”是续行符号,表示这一行太长写不下,跳转到下一行接着写;
⑥执行时直接make+命令。
二、遇到的问题及解决方法
1.描述问题1:wbinimg command error.
解决方法:导致该问题的原因是:
解决方法为:删除空格。(一直以为语法和c差不多,这个空格这里错误找了很久)
2.描述问题2:在helloos5文件夹中运行make run后makeipl.bin读取错误
解决方法:导致该问题的原因是我想看看Makefile文件中标注准备文件是不是必要的
在make run时,make先会执行make img试图找到helloos.img文件,但是生成该文件时要求ipl.bin文件先准备好,如果不在helloo.img:后标注ipl.bin的话系统就不会去主动寻找其生成的方法,自然就会报错。解决方法就是标注其需要的文件。
3.描述问题3:无法从makefile中执行copy命令(这个是我舍友遇到的问题)
解决方法:导致该问题的原因可能是:(找了很久找到的答案,但是我无法去验证它)
解决方法为将copy指令换成cp或者xcopy指令。
注释:copy不能在有子目录存在的文件中拷贝文件的同时重命名此文件名(但是我不是很清楚是在哪种环境下会发生这种状况),而xcopy能,不过会出现提示,当然也可以加参数而不使它提示。
三、程序设计创新点
1、描述创新点1:将命令设为.PHONY目标,这样可以避免与同名文件冲突。
因为phony目标并非是由其它文件生成的实际文件,make
会跳过隐含规则搜索,这样无需担心实际文件存在与否。
假如我这个文件夹里面有个文件命名为clean,我在执行make clean时,就会出现:
而将其设为PHONY目标时,就不会出现这种状况了。
2、描述创新点2:在makefile文件中设置变量、合并指令以精简代码
四、实验心得体会
经过了“两天”,从一开始底层的二进制代码的操作系统到汇编语言,再到启动区与启动区后部分分开,然后又学习了批处理文件Makefile文件的制作方法,不用每一次都输入一遍各种命令,一切都在循序渐进的进行着,猜想下次该运用更高级的语言如c语言来进一步完善或者制作我们的系统。