操作系统实验第一天:从计算机结构到汇编程序入门

一、实验主要内容

内容1:二进制编辑器(Binary Editor)安装。打开书上给的网页,在网页中点击Download按钮对软件进行下载解压,点击Bz.exe,打开应用程序,界面如下:
在这里插入图片描述

然后只需要在键盘上键入0~F,便会在上面产生一个又一个的字节,并且字节之间会自动插入空格。在保存并重命名为helloos0.img之后,重新打开时,会发现不能对文本进行编辑,那么此时只需要在edit选项中将read only的对勾取消即可。此时可以再次输入。

内容二:tolset文件夹的准备工作。
掌握了软件的使用方法,从书上可知,要输入几乎上百万的字节,由于费时过多,我们直接使用书上给出的代码helloos.img即可,如下图 :
在这里插入图片描述

可以看到,文本部分就是从hello处开始的,所以只需要将对应字母的十六进制ASII码找到并键入,就可以实现输出自己想要的文本,在这里我便将原先的hello,world!改成了hello,wangtao!,把这个映像文件重命名为helloos0.img
打开压缩包中的tolset文件夹并复制到任意一个硬盘中,在这里我复制到了E盘。打开已复制到E盘中的tolset文件夹,在文件夹中新建一个文件夹并重命名为helloos0,将之前的映像文件helloos0.img复制到这个文件夹,同时将tolset文件夹中名为z_new_w文件夹中的!cons_9x.bat和!Cons_nt.bat这两个文件复制到helloos0文件夹。再按照书上创建run.bat,install.bat文件即可,不过要把书上的指令中的 helloos改为helloos0。

内容三:运行程序。在用!cons_nt.bat打开的命令行窗口中输入run指令即可。最后结果如下:

在这里插入图片描述
在这里插入图片描述

可以看到输出了自己想要输出的句子。

内容四:汇编程序。在这一部分是通过在笔者自己开发的nask汇编语言编辑器上写指令,然后通过命令行生成对应的映像文件。在压缩包的hellooos1文件夹中打开nas文件观看,部分内容如下:

那么在这个编辑器中,DB指令代表往文件里写入一个字节,大小写均可;RESB指令就是空出后面所跟数字个自揭出来,并在空出来的地址上自动填入0x00,这样省得我们自己去写几十万行程序。
作者为了节省我们的工作,做了一个批处理文件asm.bat,这样在命令行窗口只需要输入asm即可。运行情况如下:
在这里插入图片描述

在这里是对照着ASII表把hello,world修改成了Today is a good day,因为字节比原来多了,所以添加的空字节从原来的368变成了366.

内容五:加工润色之后的汇编语言。由于之前的代码不容易看出在做什么,所以用下面这种程序润色一下:
在这里插入图片描述

可以看到,现在多了蛮多指令,左图这些指令是标准FAT12格式软盘专用的代码,即在设置一些扇区的数目、磁盘种类、根目录大小等等。从右图可以看到,我们可以直接用DB指令写字符串进去,在这里将hello,world修改为I adore you ,在命令行窗口像之前那样输入asm,然后run即可。如下:
在这里插入图片描述

实验内容总结如上。

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

1、描述问题1:在做helloos0的部分的时候,把压缩包中的映像文件直接调用过来之后,把名字修改成了helloos0,然后那时候指令还是按照书上那样子写的,最后导致找不到文件,没有办法输出想要的文字。像下图这样:
在这里插入图片描述

解决方法:将指令中涉及到helloos的部分都改为helloos0或者将helloos文件依旧修改为原来的名字helloos即可。因为指令和文件名不匹配,所以找不到。

2、描述问题2:关于asm指令,其实这里的批处理文件asm.bat和我们在helloos0部分涉及到的run.bat,install.bat文件是一样的,所以当时又是将映像文件的名字修改为了helloos1.img,而asm.bat的内容其实如下:
在这里插入图片描述

所以又产生了系统找不到指定文件的问题。
解决方法:将光盘映像文件的名字修改为helloos.img或者将asm指令中的helloos修改为helloos1。

3、描述问题3:在helloos1的部分由于我修改了字节去产生自己想要产生的文字,在修改的过程中按下了backspace,但是没有注意是否对后面的字节产生了影响,导致光盘映像文件其实是不够168000个字节的,并且中间很多位置的字节都前移了一位,导致最后没有运行成功。
解决方法:重新在原来的二进制文件上进行修改,此时注意不要按下清除键,只需要跟着修改即可,这样不会影响后面的字节位置。

三、程序设计创新点

1、描述创新点1:
首先就是在源二进制文本部分找出真正是被输出的部分,并且查询字母对应ASII码的十六进制,然后编写出自己想要输出的句子并进行尝试,比如在helloos1部分输出的是Today is a good day,那么除了修改字节之外,还要注意添加的空字节个数也要随之进行修改。修改如下:
在这里插入图片描述

输出结果:
在这里插入图片描述

三个helloos版本都用各自的方式对输出结果进行了修改
Os1:hello,wangtao!(二进制编辑器中修改)
Os2:Today is a good day!(记事本中进行修改)
Os3: I adore you!(记事本中通过DB指令,所以直接修改字符串即可)

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值