30天自制操作系统第二天

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

学号201708010402姓名徐冰娜专业年级班级智能1701
实验日期2019.9.23实验项目第2天:汇编语言学习与Makefile入门

一、实验主要内容


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读取错误

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-xorTBSEo-1577782808871)(media/db5800893b1c1d0ef6a47e4bbb87a810.png)]

解决方法:导致该问题的原因是我想看看Makefile文件中标注准备文件是不是必要的

在这里插入图片描述

在这里插入图片描述

在make run时,make先会执行make img试图找到helloos.img文件,但是生成该文件时要求ipl.bin文件先准备好,如果不在helloo.img:后标注ipl.bin的话系统就不会去主动寻找其生成的方法,自然就会报错。解决方法就是标注其需要的文件。

在这里插入图片描述

3.描述问题3:无法从makefile中执行copy命令(这个是我舍友遇到的问题)

在这里插入图片描述

解决方法:导致该问题的原因可能是:(找了很久找到的答案,但是我无法去验证它)

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-c92Hy5c7-1577782808876)(media/dd9300698460415080cd03dded908caf.png)]

解决方法为将copy指令换成cp或者xcopy指令。

注释:copy不能在有子目录存在的文件中拷贝文件的同时重命名此文件名(但是我不是很清楚是在哪种环境下会发生这种状况),而xcopy能,不过会出现提示,当然也可以加参数而不使它提示。

三、程序设计创新点


1、描述创新点1:将命令设为.PHONY目标,这样可以避免与同名文件冲突。

在这里插入图片描述

因为phony目标并非是由其它文件生成的实际文件,make
会跳过隐含规则搜索,这样无需担心实际文件存在与否。

假如我这个文件夹里面有个文件命名为clean,我在执行make clean时,就会出现:

在这里插入图片描述

而将其设为PHONY目标时,就不会出现这种状况了。

2、描述创新点2:在makefile文件中设置变量、合并指令以精简代码

在这里插入图片描述

四、实验心得体会

经过了“两天”,从一开始底层的二进制代码的操作系统到汇编语言,再到启动区与启动区后部分分开,然后又学习了批处理文件Makefile文件的制作方法,不用每一次都输入一遍各种命令,一切都在循序渐进的进行着,猜想下次该运用更高级的语言如c语言来进一步完善或者制作我们的系统。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值