实验9 保护模式编程基础

这篇博客介绍了如何在DOS环境下进行保护模式编程实验,包括使用虚拟机软件VirtualBox创建DOS虚拟机,建立虚拟软驱,以及实模式与保护模式的切换。在保护模式下,详细讲解了中断程序设计,包括中断处理程序、中断类型、屏幕缓冲区和执行过程,并给出了相关代码示例。
摘要由CSDN通过智能技术生成

实验9  保护模式编程基础

在保护模式下,可寻址高达4GB(甚至更多)的物理地址空间;支持存储器分段管理机制和分页管理机制;支持多任务;支持4个特权级和配套的特权检查机制,区分不同级别的代码。操作系统(如WindowsLinux等)正是依赖于这些特性来实现虚拟内存、内核/用户模式、多任务等功能。

9.1 虚拟机开发环境

实模式与保护模式的切换,以及保护模式下的中断、DMA处理等程序必须在特权级0下执行,而Windows应用程序在特权级3环境中运行,只有系统内核和设备驱动程序才能运行在特权级0。因此,这些实验需要在DOS环境下进行。

借助于虚拟机技术,可以在Windows环境下完成这些实验。图9-1就是在虚拟机中运行DOS操作系统和real2pro.exe的结果。

9-1 在虚拟机中完成保护模式实验

1. 虚拟机

虚拟机软件可在一台计算机(称为宿主机)上模拟出若干台计算机,模拟出的计算机(称为客户机)都有自己单独的硬件配置,可以安装单独的操作系统。例如,宿主计算机运行Windows操作系统,在上面运行虚拟机软件,虚拟出的计算机可以运行Linux操作系统。这2个操作系统各自独立运行,互不干扰。

VirtualBox是德国InnoTek公司开发的虚拟机软件,可以运行在WindowsLinux上,客户机上可以安装WindowsDOSLinuxOpenBSD等操作系统。除了VirtualBox软件以外,常用的虚拟机软件还有VMWareVirtual PC等。

2. 建立虚拟软驱

在保护模式实验中,宿主机运行Windows,客户机运行DOSDOSWindows之间的共享采用虚拟软驱来完成。

VFD是一个虚拟软驱软件。运行vfdwin.exe(在C:/asm/tools/vfd21目录下),如图9-2所示,按以下步骤在计算机上虚拟出一个软驱(B:):

(1)      在“Driver”页中,按“Browse…”选择C:/asm/tools/vfd21/vfd.sys

(2)      按“Install”按钮安装驱动程序;

(3)      按“Start 按钮启动驱动程序;

(4)      在“Drive 0”页中,按“Change…”选择B:

(5)      按“Open”按钮,再按“Browse…”选择C:/asm/tools/vfd21/ floppyA.imgDisk Type选择为FILE

 

9-2 建立虚拟软驱

这样,计算机上就增加了一个虚拟软驱B:了。

3. 创建DOS虚拟机

安装VirtualBox软件,启动VirtualBox后,点击工具栏上的“新建”按钮。按以下步骤在计算机上创建一个虚拟机:

(1)      如图9-3所示,虚拟机名称为“DOS”,在系统类型种选择“DOS”,按“下一步”;

(2)      提示系统内存容量,缺省为32MB,直接按“下一步”;

(3)      9-4中,提示选择虚拟硬盘时,按“现有”按钮,出现图9-5所示对话框;

(4)      在虚拟硬盘管理器中,按“注册”按钮,指定虚拟硬盘映像文件为C:/asm/tools/vbox/ HDD0.VDI,如图9-6所示。在图9-5的虚拟硬盘管理器,按“选择”按钮;

(5)      一直按“下一步” 按钮,直到“完成”为止。

 

9-3 设置虚拟机名称

9-4 选择虚拟硬盘

9-5 虚拟硬盘管理器

9-6 指定虚拟硬盘映像

在图9-7VirtualBox窗口左边选中DOS客户机,点击工具栏中的“设置”按钮,选择软驱,选中“加载软驱”,主机上的软驱设为“B:”。

9-7 VirtualBox主窗口界面

9-8 设置DOS虚拟机的软驱

VirtualBox窗口(图9-7)中选择DOS客户机,点击工具栏中的“启动”按钮,启动进入DOS界面。此时,DOS客户机显示为“A>”,这里驱动器A中的文件系统和宿主机B:中完全一致。可以在Windows中编辑修改程序、编译连接,如图9-1所示。

9-9 Windows中编译、连接real2pro.asm

程序编译通过后,用鼠标左键点击DOS客户机窗口,在DOS客户机中执行real2pro.exe,结果如图9-1所示。

程序出现错误时,可执行菜单“虚拟电脑”“重启”,重新启动DOS客户机。

需要切换到Windows环境时,按键盘右边的Ctrl键即可。

要关闭DOS客户机,选择菜单“虚拟电脑”“关闭”,再在对话框中选择“强制关机”。

9.2 实模式与保护模式的切换

程序中定义了两个缓冲区:BufferBuffer2,从实模式切换到保护模式,将Buffer中的全部64个字节复制到Buffer2中,再回到实模式下,将Buffer2中的内容显示出来。

在程序的数据段DSEG中,定义了一个GDT,其中包括4个段描述符:空、代码段、数据段D、数据段EVGDTR 6个字节,用于存放GDTR的值。

BufferBuffer2分别位于数据段DSEGESEG中。

程序首先在实模式下执行,执行过程为:

(1)      设置3个段描述符(代码段、数据段D、数据段E)的基地址,这些段描述符的其他字段(限长、属性等)已经在定义时进行了赋值。

(2)      加载GDTR,使CPU在保护模式下能够访问GDT

(3)      在实模式时,A20门处于关闭状态。调用EnableA20宏将A20门打开,A20门打开时,CPU产生的A20地址有效,A20门关闭时,A20地址线总是为0

(4)      CR0的第0位置1,跳转到保护模式的Virtual标号,进入保护模式下执行。

在保护模式下,执行过程为:

(1)      DSES赋值。DS=0010HSS=0018H,分别指向数据段DSEGESEG

(2)      将数据段DSEGBuffer复制到ESEGBuffer2

(3)      CR0的第0位清0,跳转到实模式的Real标号,回到实模式下执行。

在实模式下,显示出Buffer2的内容。

;程序清单: real2pro.asm(实模式与保护方式之间的切换)

.386P

;存储段描述符结构类型定义

Desc            STRUC

LimitL          DW      0 ;段界限(BIT0-15)

BaseL           DW      0 ;段基地址(BIT0-15)

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值