一、实验主要内容
- 内容1:尝试使用二进制编辑器,试着在屏幕上输出HELLO WORLD。
重点:如何看懂二进制编辑器的地址格式、输入的十六进制如何来的?
首先左边前两个0不用管,真正的地址由左数第三个0开始加上后面的四位数构成一个地址,上面的数字标号表示地址单元号。
那么这些十六进制都是怎么来的呢?根据ASCLL码表对应的十六进制得到的,举个例子,比如说E的ASCLL值为69,化为十六进制是45,因此往二进制编辑器输入45就会得到字母E,如图:
此代码的作用是命名启动的第一个扇区为HELLOIPL,扇区命名可以是任意字符串。
- 内容2:尝试使用汇编语言输出HELLO WORLD,同时输出其它一些更有趣的图案。
重点内容:理解每一条指令的意思以及它的作用、如何使用自带的汇编代码编辑器。
首先看到我们需要的文件:
.bat文件是windows批量处理文件,通俗的讲就是存储着命令的文件,这两个文件的作用是在当前目录下调用cmd窗口,两个文件对应着不同的windows版本,我们点击第二个即可。Helloos.img是存储我们的汇编代码的文件,install.bat是将文件拷贝的命令,最后的run就是执行可执行文件的命令了,后来作者还封装了一个编译汇编文件的bat文件,当写完一个汇编程序后保存,然后点击这个bat文件即可对汇编文件重新编译,最后可以选择run.bat或!Con文件运行可执行文件,就可以看到屏幕上输出了图案或字符串。
下面来分析一下关键指令的意思:
- DB指令:往内存(文件)写入1个字节的指令,该指令不区分大小写;
- DW指令:往内存写入大小为2个字的指令,也就是4个字节,同样不区分大小写;
- RESB指令:空出指定的地址,可用于输出0x00。
二、遇到的问题及解决方法
- !con文件无法启动
解决方法:导致该问题的原因是cmd路径问题,解决方法为:(1).右键开打任意一个!cons文件点击编辑;(2).将此路径:C:\Windows\System32/cmd.exe复制到编辑窗口保存即可。
- run.bat文件可以运行,但找不到指定路径。
解决方法:导致该问题的原因是:拷贝img文件的路径出错,解决方法为:1.右键编辑run.bat,将指令里面的/改为\即可。
三、程序设计创新点
1、在二进制编辑器中将小写的hello world 替换为大写的HELLO WoRLD。
如图:
蓝底即为关键代码,得到这些数字很简单,将HELLOWORLD对应的ACSLL值化为16进制即可。
成功输出HELLO,WORLD。
- 在汇编代码中输出心型图案。
首先用记事本打开图中的文件:
该文件是汇编文件,存放着汇编代码。打开后看到汇编指令,找到DB “hello world”这条指令,你可以进行修改成任意字符串内容。但我们来玩点高逼格的,首先你得理解DB 0x0是什么意思,0x0a是换行符对应的十六进制,0x20是空格的ASCLL值对应的十六进制,心形对应的十六进制是0x03,其它没用到就没查了。这个QUEM的特性会将你写入文件的东西输出到屏幕上,因此你要输出什么字符用DB即可。我很好奇怎么才能输出汉字,但很遗憾的是QEMU这个平台不支持中文显示,因为无法输出汉字。
汇编代码过长,贴出运行截图:
本来想向屏幕输出LOVE,但是没那么大耐心了,就将就了