接管裸机的控制权
操作系统实验报告
实验题目
搭建和应用实验环境
接管裸机的控制权
实验目的
安装虚拟机软件 VMware,生成多个虚拟软盘,将其中一个用 DOS 格式化为 DOS 引导盘
学会使用虚拟机软件创建裸机模拟 IMB-PC 环境,同时生成一个大小为 1.44MB 软盘。学习使用汇编语言写一个程序,利用 WinHex 工具和 NASM 将程序转换成二进制数据存入生成的软盘第一个扇区中,并使用首扇区作为引导程序使裸机在开机的时候运行。
实验要求
生成一个基本配置的虚拟机 XXXPC 和多个 1.44MB 容量的虚拟软盘,将其中一个虚拟软盘用 DOS 格式化为 DOS 引导盘,用 WinHex 工具将其中一个虚拟软盘的首扇区填满你的个人信息。
设计 IBM PC 的一个引导扇区程序,程序功能是:用字符从屏幕左边某行位置 45 度角下斜射出,保持一个可观察的适当速度直线运动,碰到屏幕的边后产生反射,改变方向运动,如此类推,不断运动;在此基础上,增加你的个性扩展,如同时控制两个运动的轨迹,或炫酷动态变色,个性画面,如此等等,自由不限。还要在屏幕某个区域特别的方式显示你的学号姓名等个人信息。将这个程序的机器码放进放进虚拟软盘的首扇区,并用此软盘引导你的 XXXPC,直到成功。
实验方案
- 实验运行环境:Windows10
- 虚拟机软件:VMware Function
- 汇编语言:NASM
- 文本编辑器:VScode
- 软盘操作工具:WinHex
安装主要工具:
在 VMware 官网下载虚拟机的体验版安装包,再在网上找到破解的密钥输入永久破解。接着按照要求安装并创建一个无操作系统的裸机,如下图所示:
Figure 1: 安装 VMware 虚拟机
Figure 2: 创建无操作系统裸机 Figure 3: 创建无操作系统裸机
DOS 格式化建立虚拟软盘:
在网上下载 DOS 操作系统镜像文件,进入 DOS 的 BIOS 界面进行设置并格式化建立的软盘,使得只有首扇区留下 DOS 的引导程序,再用这个软盘启动上一步建立的裸机,DOS 操作系统界面和格式化后的软盘打开裸机后的画面如下图:
Figure 4: DOS 操作系统启动界面
Figure 5: 格式化后的 DOS 引导盘启动裸机
之后利用 Winhex 工具将其中一个软盘 personalInfor 的首扇区 512 个字节填满个人信息。每个字节放我的学号的一位,刚好放满 512 字节,如下图:
Figure 6: WinHex 填个人资料
导入程序指令:
我们需要将自己编写的汇编指令转换为二进制后放在软盘的首扇区,但裸机启动的时候,会自动调用首扇区中的内容,然后我们需要利用指令 org 7c00 让裸机将代码存入内存 7c00 中,这样可以确保不影响前面内存中存放的重要内容。
设计程序:
展示学生信息:
利用 bios 提供的中断 int10 的 13h 号功能,实现在显示器上输出字符串。bx 可以设置显示姓名序号的前景色背景色等属性,代码如下图:
Figure 7: 显示学生信息
编写弹球程序:已知裸机的屏幕大小为 25*80,当我们把值传到 B800 开始内存(显存),值所对应的的 ASCII 码就会显示在屏幕上,每个字符占两个字节,一个是 ASCII 码一个是属性,利用这个我们可以实现弹球的显示。我们将四个方向定义为常数 1 到 4。同时为小球设置一个初始点,并默认开始时候向右上方移动。小球每移动一格,利用类似 switch case,判断是否需要改变移动方向,并用 jmp 指令跳转到 show 函数在屏幕上显示,每次显示一个字符之后,就让字符显示的属性值加一个数,使得弹珠呈现动态变化。举例子如下:
Figure 8: 类 switch case 语句 Figure 9: 右上移动示例
使用 NASM 编译程序:
打开 nasm,并输入指令 nasm+ 文件名.asm,编译完后在同一个目录下会生成一个同名的二进制文件,如图:
Figure 10: nasm 编译 Figure 11: 生成 bin 文件
使用 winHex 修改软盘:使用 WinHex 打开刚刚生成的 test 二进制文件和软盘 flp 文件,将 test 的内容替换到 WinHex 的第一个扇区(512Byte)中。注意:程序的大小不能超多 512B,否则会出错,替换后软盘的大小也不能改变。如图:
Figure 12: 软盘替换后内容
用软盘启动裸机:
Figure 13: 生成二进制文件内容
将软盘的第一个扇区替换为自己编写的汇编指令的二进制代码后,就可以开启虚拟机,选择以虚拟软盘启动,启动后虚拟机就会立刻将我们的程序加载到虚拟机的内存空间中并运行,如下图:
Figure 14: 选择软盘启动 Figure 15: 启动虚拟机
Figure 16: 程序运行画面-1 Figure 17: 程序运行画面-2
实验心得和总结
通过这个实验,我体验了如何安装并创建虚拟机,还有创建软盘并将我写的汇编程序转化成二进制代码更改软盘的第一个扇区,再用软盘启动虚拟机,经过这个过程,我对理论课上学到的知识有了更深的体会和感悟。理论课上,老师给我们讲解了很多的知识和实验要注意的事情,但在没有亲手体验之前,十分的难理解也难记忆。但当我自己实践了一次之后我才真正的明白了很多课堂上一知半解的内容,深刻理解了“纸上得来终觉浅”的道理。
在这个实验之前,我们虽然上过计算机组成原理课,但其实当时进行的汇编练习比较少,因为实验课写汇编也是写 mips 的指令,所以对 x86 汇编十分生疏。但通过这次练习,我对汇编语言有了更深的理解和体验。刚开始我遇到了很多的困难,各种代码段看不懂,指令不明白,但最后在不断的查阅资料,和同学相互交流帮助下,渐渐的看懂了老师给的示例代码,也学会了去改参数和增删代码实现个性化的效果,最终也顺利完成了任务,终于汇编语言渐渐熟悉了起来,对这种底层的程序设计语言的理解也必定会加深我在高级语言上的编写能力,也会让我对计算机程序、系统等方面有更深理解。
这次实验过程解决了我不少以前不懂的问题。比如说为什么要加上 org 7c00h,其实是因为裸机启动后内存 7c00h 以前都可能被一些重要的功能所占用,从 7c00 开始是经过测试比较稳定的,从 7c00 内存开始加载程序并运行。而用 DOS 操作系统运行.com 文件是使用了指令 org 100h,经过查阅知道 DOS 操作系统前 100h 的内存放了程序前缀段之类的重要代码,也是不能随便往里面加载用户的程序的,所以要从 org 100h 开始。还有就是裸机开始运行后首先会进入 BIOS(基本输入输出系统)进行各种设置和自检查后才会启动从软盘引导扇区读取内容加载到内存并运行,之后才会进入操作系统。而我们因为是裸机没有操作系统,所以就谢了一个简单的小程序放在引导扇区让它运行。听老师说以后会一步步慢慢实验一个自己的简单的操作系统,对此我还是充满期待的!实验 1 结束了,实验 2 是建立在实验 1 只上更难的内容,制作监
控程序,这对我来说是一个更大的挑战,希望有了实验 1 的基础,我们更快更轻松的完成实验 2 所要求的内容。每当完成一项实验都会充满了自豪感,让我很享受,希望能保持这个状态,继续努力!
参考文献
- 基于J2EE的学生信息管理系统(电子科技大学·钟海琴)
- 基于J2EE权限管理系统平台设计与实现(吉林大学·任翔)
- 基于JSP的考试后台管理系统的设计与开发(曲阜师范大学·常洪光)
- 基于J2EE平台的工作流管理系统的运行引擎和客户端及管理工具的设计与实现(西北大学·门浩)
- 基于内容审核的数据泄露防护系统的设计与实现(山东大学·陈亚帅)
- IT集中监控管理系统的设计与实现(东北大学·张春晓)
- 基于J2EE的远程网络教育系统研究与实现(电子科技大学·陈南荪)
- 基于J2EE的远程网络教育系统研究与实现(电子科技大学·陈南荪)
- 基于J2EE权限管理系统平台设计与实现(吉林大学·任翔)
- IBM Systems Director平台管理软件的设计与实现(山东大学·武祎)
- 基于BS架构的IT资源监控系统的设计与实现(北京邮电大学·熊宇梁)
- 基于SSH的手机网站的设计与实现(东北大学 ·陶志刚)
- 基于J2EE的学生信息管理系统(电子科技大学·钟海琴)
- 基于内容审核的数据泄露防护系统的设计与实现(山东大学·陈亚帅)
- 基于JSP的考试后台管理系统的设计与开发(曲阜师范大学·常洪光)
本文内容包括但不限于文字、数据、图表及超链接等)均来源于该信息及资料的相关主题。发布者:代码项目助手 ,原文地址:https://bishedaima.com/yuanma/36014.html