Python实现加载用户程序的监控程序

资源下载地址:https://download.csdn.net/download/sheziqiong/87578593
资源下载地址:https://download.csdn.net/download/sheziqiong/87578593

加载用户程序的监控程序

一、操作系统实验报告

实验题目:

加载用户程序的监控程序

实验目的:

设计四个(或更多)有输出的用户可执行程序,再设计一个监控程序放在首扇区作为裸机引导程序,再将这四个程序分别放在监控程序之后的四个扇区。利用 bios 功能调用,实现键盘输入指定运行这四个有输出的用户可执行程序之一。

实验要求:

设计四个有输出的用户可执行程序,分别在屏幕 1/区域动态输出字符,如将用字符‘A’从屏幕左边某行位置 45 度角下斜射出,保持一个可观察的适当速度直线运动,碰到屏幕相应/区域的边后产生反射,改变方向运动,如此类推,不断运动;在此基础上,增加你的个性扩展,如同时控制两个运动的轨迹,或炫酷动态变色,个性画面,如此等等,自由不限。还要在屏幕某个区域特别的方式显示你的学号姓名等个人信息。

修改参考监控程序代码,允许键盘输入,用于指定运行这四个有输出的用户可执行程序之一, 512

自行组织映像盘的空间存放四个用户可执行程序

实验方案:

文本编辑器:VScode

软盘操作工具:WinHex

1.1 实验思想及实验过程:

安装主要工具:

在 VMware 官网下载虚拟机的体验版安装包,再在网上找到破解的密钥输入永久破解。接着按照要求安装并创建一个无操作系统的裸机。

Figure 1: 安装 VMware 虚拟机

Figure 2: 创建无操作系统裸机

Figure 3: 为裸机配置属性

设计监控程序:

以老师给的监控程序模板为基础进行创作,首先需要增加一段清屏功能,能让监控程序和子程序相互切换的时候把上一次显示的内容清除干净,我们利用 BIOS 的功能调用 int 10h 的 6 号功能,将整个显示器的值都填为 0,这样就实现了清零。具体代码如 figure4,之后使用 int10 的 1 号功能输出字符串,将要显示给用户的提示语句展示在屏幕上如 figure5。

Figure 4: 清除屏幕内容

Figure 5: 显示提示信息

利用 int 16h 的 BIOS 功能调用,读取键盘输入,再按照输入的值跳转到需要运行的程序段,使用 BIOS 功能 13H 来加载不同的扇区号内的程序段到内存中使用,如 figure6 figure7。

Figure 6: 获取键盘输入 Figure 7: 通过键盘输入跳转

设计用户程序:

用户程序 1:

在用户程序前都要有语句 org 0A100h,它是让计算机将程序加载到 0A100 开始的内存上运行,每个用户程序都加载到这个地址上,监控程序就可以统一跳转到这个地址上来运行所选扇区的内容。

利用 bios 提供的中断 int10 的 13h 号功能,实现在显示器上输出字符串。bx 可以设置显示姓名序号的前景色背景色等属性。在展示学号姓名等学生信息的同时,不断改变字符的属性和显示字符串的位置,让信息在显示屏上不断的上下移动变化位置和属性,实现动态展示的效果。

因为实验要求在屏幕的四个位置分别展示四个用户程序,所以我需要先用纸笔大概衡量边界,再编写程序

在程序末端,利用 int 16h 的 1 号功能,实现捕捉键盘输入(不阻塞等待)来检查用户是否输入的空格,再使用 jmp 语句返回监控程序的内存地址 7c00 处,其他几个用户程序都有类似的代码段,就不在下面赘述。代码和实验效果如 figure 8 和 figure 9:

Figure 8: 展示姓名学号 Figure 9: 按空格返回

用户程序 2

沿用第一个实验中的 stone 的程序,当小球在屏幕上弹动的时候,不断改变小球显示字符的属性,实现动态展示的效果,代码类似实验一中的 stone,部分截图示例如下图 figure 10 和 figure 11:

Figure 10: 跳转到当前方向 Figure 11: 展示小球属性和字符

用户程序 3:

第三个用户程序是在屏幕的中间显示一个程序员们刚入门一定会看到的,字符串”hello world”,在四周沿着边缘用字符 0 画出一个五彩的边框作为装饰,边框不断改变着它的属性和颜色,呈现出一个动态的展示效果,代码类似实验 1 中的弹球实验,不过要做一些修改,因为字符在矩形边框上移动只有上下左右四种运动方式。实验代码举例如下图 figure 12 和 figure 13

Figure 12: 展示 hello world 字符串

Figure 13: 向右和向下示例

用户程序 4:

第四个程序是制作一个沙漏一样的图形,字符动态移动并在碰到预设好的边缘后发生转向,在画沙漏图形的时候,只有下,左下和左上三种运动的情况,示例代码如下图:

Figure 14: 向下移动情况 Figure 15: 向左上和坐下移动情况

使用 NASM 编译程序:

打开 nasm,并输入指令 nasm+ 文件名.asm,编译完后在同一个目录下会生成一个同名的二进制文件。重复操作将 4 个用户程序和监控程序都编译一次并生成各自的二进制文件。举例如图:

Figure 16: nasm 编译 Figure 17: 生成 bin 文件

使用 winHex 修改软盘:

使用 WinHex 打开刚刚生成的所有二进制文件和软盘 flp 文件,首先将监控程序 myos 的二进制文件内容替换到 WinHex 的第一个扇区(512Byte)中。注意:程序的大小不能超多 512B,否则会出错,替换后软盘的大小也不能改变。然后在第二个 512 字节的扇区中放第一个监控程序,在第三个 512 字节的扇区内放第二个,依次类推。用户程序之间不能重叠在同一个扇区。如图 figure18 和 figure19:

Figure 18: 监控程序的二进制文件 Figure 19: 将监控程序拷贝到软盘首扇区

用软盘启动裸机:

将软盘的前五个扇区分别替换为自己编写的汇编指令的二进制代码后,就可以开启虚拟机,选择以虚拟软盘启动,启动后虚拟机就会立刻将我们的程序加载到虚拟机的内存空间中并运行,监控程序和各个用户程序效果如下图:

Figure 20: 监控程序

Figure 21: 用户程序 1 Figure 22: 用户程序 2

Figure 23: 用户程序 3 Figure 24: 用户程序 4

资源下载地址:https://download.csdn.net/download/sheziqiong/87578593
资源下载地址:https://download.csdn.net/download/sheziqiong/87578593

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

shejizuopin

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值