操作系统实验日志
|
实验日期 |
2018/9/19 |
实验项目 |
第1天:熟悉二进制编辑器和汇编器 |
||
一、实验主要内容
1、熟悉二进制编辑器
(1)重点总结:
①下载安装二进制编辑器:http://www.vcraft.jp/soft/bz.html
②创建文件并编辑保存:一般打开该软件后直接编辑再另存(Save As)即可,在已经打开某个文件,而再想创建新的文件时,再选择File->New即可,如下图:
③运行:创建install.bat和run.bat,右击选择编辑(下图文框中“day1”为映像文件.img的文件名),保存退出后双击!cons_nt.bat(或!cons_9x.bat),如下:
(2)关键代码及注释:
+0~+F左边为地址区,+0~+F为机器可识别的16进制,+0~+F右边为其对应ASCII码所表示的字符。16进制的“00”表示空指令。
ASCII码表如下:
2、熟悉汇编器
(1)重点总结:
①创建.nas文件并编辑保存
创建的文件(前两个.bat文件直接copy之前的即可),用记事本打开day1.nas文件进行编辑,如下:
②打开!cons_nt.bat,将汇编文件.nas转化成映像文件.img,并运行
a、直接在!cons_nt.bat程序中使用命令行转化,并运行,结果如图:
b、利用“封装”文件进行转化:
首先创建asm.bat文件并编辑(以后每次修改对应的,nas和.img之前文件名即可)如下:
然后在!cons_nt.bat程序中使用简单的命令行asm转化(同时会在该文件夹下产生day1.img映像文件),并运行,结果如图:
(2)关键代码及注释:除注释内容之外的所有字符都必须为英文字符
最初版:
DB:即“define byte”,在文件里以1个字节的形式写入指令
RESB 16:即“reserve byte”,从当前地址开始空出16个字节,汇编器nask会在空出的16个字节处自动补成0x00,数字16是可更改的
注释版:
“;”:类似C++中的“//”和“/* */”表示该符号后面的内容为注释内容
DB:后面可直接写字符串但需用双引号括起来,汇编器会自动查找对应的编码
RESB 0x1fe-$:$在这里表示目前已写的字节数,由于在第510(0x1fe)字节处必须填写55 AA,所以用这种方法可以快速地在信息显示部分之后地区域到第510字节之间的区域填充0x00(不需要我们自己计算到底需要填充多少个0x00)
二、遇到的问题及解决方法
问题1:在二进制编辑器里重新打开之前保存的文件时,无法更改里面的内容
原因分析:在创建文件时,对文件的权限设置的为“Read Only”,所以在编辑保存并退出后,再次打开该文件时就无法再对文件进行修改了(因为只能读的权限)
解决方案:(在***的帮助下)
在创建二进制映像文件之前或在打开二进制编辑器之后,先从菜单选择“编辑”(Edit)->“只读”(Read Only)(若Read Only的前面没有“✔”那么就不需要修改)即可,而对于之前已经创建的只读文件,只能删除重新创建编辑了。
如下图所示:
结果:再次打开之前的文件时,可以更改文件里的内容了。
问题二:打开!cons_9x.bat和!cons_nt.bat时都是闪退,即都无法打开,且用管理员身份打开时无法直接进入该文件所在位置,
原因分析:最初从网上查找,得到的原因是win10的权限改了很多,bat文件是Windows平台上的一种可执行脚本,全称为Windows BATCH,在Windows上,可执行脚本就是BATCH文件,也叫批处理文件,这是从DOS时代遗留下来的名字,意思就是把很多命令放到一起来执行。它的扩展名是*.bat,从 10240 到 10586 都有一个 bug,就是,启动文件夹内,执行的 bat文件第一行,会自己出现乱码,不可使用。
解决方案:
在“此电脑”处右击鼠标,在出现的界面中选择“属性”,如下图:
然后在出现的界面中选择“高级系统设置”,在出现的界面中选择“高级”后接着点击“环境变量”,然后找到系统变量中“Path”路径进行编辑,编辑结束之后,点击确定,当前界面关闭之后,再点击确定完成最终的修改,如下:
结果:
再次打开.bat文件时,发现不再出现闪退现象,且是在当前文件夹中运行cmd,并且得到之前写的二进制映像文件的运行结果“hello,world”,如下:
三、程序设计创新点
1、利用汇编器,用汇编代码编写图案
(1)关键代码:
①首先画出图形:由于有的字符无法用ASCII码表示出来,所以用其他的ASCII字符来代替了:
要绘制的原图: 为了方便写代码设计的表格:
用到的ASCII码(\n表示换行,空 表示空字符)如下:
|
字符 |
/ |
\ |
\n |
< |
> |
_ |
- |
Z |
, |
` |
| |
Y |
空 |
|
十进制 |
47 |
92 |
10 |
60 |
62 |
95 |
45 |
90 |
44 |
96 |
124 |
89 |
32 |
|
16进制 |
2f |
5c |
0a |
3c |
3e |
5f |
2d |
5a |
2c |
60 |
7c |
59 |
20 |
|
字符 |
♢ |
↑ |
O |
^ |
7 |
r |
( |
) |
|
|
|
|
|
|
十进制 |
4 |
24 |
111 |
94 |
55 |
114 |
40 |
41 |
|
|
|
|
|
|
16进制 |
04 |
18 |
6f |
5e |
37 |
72 |
28 |
29 |
|
|
|
|
|
②关键代码:
结果:
四、实验心得体会
本次实验主要是熟悉编程环境——二进制编辑器和汇编器,通过仿照本实验教材的作者给出的代码,体验了汇编程序的编写过程,了解到了一些基本的汇编指令代表的意思,比如DB表示在文件里以1个字节的格式写入指令,RESB n表示从当前地址开始空出n个字节,$不再是我们之前学的用来表示立即数而是用来比表示当前已写的字节数。