探讨Windows环境下80×86汇编程序教学中的几个问题
2016-03-22刘俊
刘俊
摘要:为了帮助学生更好学习掌握80×86汇编语言,必须解决在Windows环境下如何运行汇编程序。该文以实现软中断、中断实现磁盘读写为例,分析了在Windows操作系统上如何仿真PC/XT计算机的逻辑过程,揭示了PC/XT计算机工作机理。
关键字:80×86;Windows操作系统;PC/XT仿真;DOS中断
中图分类号:G642 文献标识码:A 文章编号:1009-3044(2016)02-0109-02
Abstract: To help students to learn 80×86 assembly language better, measure must be considered about how to run assembly program in windows operating system. The paper analyses logic process of PC/XT computer based on windows system by realizing computer soft interruption and disk reading and writing. It reveals working mechanism of PC/XT computer.
Key words: 80×86; windows operating system; PC/XT simulation; DOS interrupt
目前,《微型计算机原理与接口技术》是高等院校开设的主干基础课程之一,多数教材中的内容围绕8086/8088芯片的指令系统来阐述计算机的工作原理。开设的汇编语言程序设计实验也是对该指令集中指令应用的实验。然而,随着计算机技术的迅猛发展,计算机的硬件系统和软件系统都发生了巨大变化,现代任何一台计算机都不是当初8086为CPU的IBM PC/XT,不仅CPU内的环境发生了巨大变化,CPU外的硬件也发生了巨大变化,但是,8086/8088指令组成的汇编程序一样能在现代计算机中执行,且汇编程序通过DOS中断、BIOS中断仍能实现人机交互、磁盘读写等功能。这给教、学两方面都带来诸多疑问,屡清Windows环境下8086汇编程序在现代计算机中的执行逻辑,无疑是教学中必须面对的问题。
安装Windows系统的现代计算机,它对计算机的软、硬件进行管理,对每个加载的作业,通过进程来感知、管理、调度,使各运行的作业并发执行,系统对进驻内存的各作业通过段、页方式分配内存,各作业都处于用户态,系统通过接受事件来触发事件的处理过程。
1 Windows系统对8086计算机的模拟
在安装了汇编语言开发环境的Windows系统中,8086指令组成的源程序通过编译、连接后生成*.exe可执行文件。这些可执行文件,无论是运行还是调试都与在一台8086为CPU芯片的计算机上运行一样,调试时看到的物理地址和教材中讲解的PC/XT计算机工作时完全相同。众所周知,以8086为芯片的PC/XT计算机工作在实地址方式,在PC/XT计算机上调试运行的8086汇编程序,在调试界面中看到的物理地址,就是指令、数据存放的内存编址的实际位置。而Windows操作系统对内存的管理是段、页式管理,即动态分配内存,调试中,界面显示的“物理地址”不是计算机内存编址的实际位置,给换句话来说,在Windows系统中,模拟仿真了8086计算机的工作情况。经测试分析,发现Windows系统对8086的仿真是通过Windows系统自带的附件程序完成的。在Windows系统安装完成后,系统附件界面有一些程序,其中包含名称为 “命令提示符”的软件,其路经为“Windows的开始菜单→程序→附件→命令提示符”,该软件又称CMD方式。在测试中发现:在执行或调试汇编程序时,任务管理器的进程标签页自动打开cmd.exe进程(如图1所示),而通过点击Windows的开始菜单→程序→附件→命令提示符,同样打开cmd.exe进程。
在汇编语言开发环境中编写的8086指令集的汇编源程序,在执行或调试时,首先打开cmd.exe进程,Windows系统对cmd.exe进程设置好执行环境,这个执行环境就是Windows系统对8086的模拟环境,编译、连接好的可执行代码作为该环境的程序数据。也可以说,当前计算机的CPU不直接执*.exe的可执行代码,CPU执行的是cmd.exe进程提供的程序数据,即cmd.exe进程是汇编程序生成的可执行代码的“代理”,实现Windows环境下对汇编程序生成的可执行文件的执行,同时,该平台又将CPU输出的结果,转化为8086方式显示。
2 汇编语言开发环境中的中断调用
2.1 PC/XT计算机中断的功能及调用过程
在教材中,为了汇编语言设计的程序能够有交互界面与磁盘读写功能,都加入了中断调用的功能,常用的DOS中断调用INT 21H,提供了设置不同的功能号,实现键盘输入、显示器输出、磁盘读写及文件、目录的建立和删除等和输入、输出相关的功能。在汇编程序开发环境中,实现程序的交互界面与磁盘读写功能,是通过中断指令,完成对中断的子程序调用来实现的。DOS中断调用的原理是:根据中断类型号找到中断向量表的偏移地址,取出中断程序入口地址放入CS:IP,使CPU转入中断子程序执行。完成这一调用功能的前提是需设置好中断向量表、中断类型号与中断向量表偏移的关系及中断子程序。在早期的PC/XT计算机中,启动计算机成功,意味着磁盘操作系统(DOS)加载入内存完成,所以编程时,软中断调用能够实现是基于启动时已将中断向量表、中断子程序加注内存并设置好。其中BIOS中断是系统引导时,就一并进入内存。
2.2 Windows环境下的中断问题分析
在安装Windows系统的现代计算机中,安装面向8086/8088指令集的编程开发环境,编程中对中断的调用也是直接用中断指令完成,那么,中断程序是何时加载的?中断向量表存放何处?
显然,汇编语言开发环境显然不承担要完成中断功能的前期任务,因为它的工作由四部分组成:编辑是实现源码的录入、编辑、保存等功能;编译完成伪指令的转换、指令助字符到机器码的转换;连接将目标代码连接成可执行程序;执行和调试是将可执行代码作为作业提交给Windows操作系统,调试是将执行中间结果显示给用户,便于用户诊断。
Windows操作系统启动时也加载了DOS模块这些内容?这样的推论不正确,原因很简单:Windows操作系统,对内存的管理分为核心态和用户态,既然是虚拟8086的工作环境,系统是将8086工作环境作为用户态来管理的,用户态的进程仅在加载时将PID装入内存,也就不存在系统启动时加载DOS模块的可能。
2.3 开发环境中的中断调用对硬盘的影响
其外,DOS软中断INT 26H 功能是对绝对磁盘写,通过该中断调用能否在写入时,将原盘号:扇区中的数据覆盖?如果能,则编写程序破坏操作系统存放在磁盘上的数据,就能起到破坏系统的功能。显然是不能的!为什么?
3 Windows系统对8086物理地址和中断的仿真过程
Windows系统对“命令提示符”软件是作为用户程序管理的,Windows系统用进程名“cmd.exe”标识该软件的加载,核心态空间存放软件的程序控制块(PCB),用户态是动态分配的内存空间,每次加载在内存的位置都是不一样的。用户编写的汇编程序占用空间大小不同,申请的cmd.exe进程上下文所需空间也不一样(进程标签中显示的内存空间一般指申请的进程用户空间)。Windows系统将cmd.exe进程分配的内存空间按8086方式显示给用户,让用户感觉程序的执行似8086方式;当有中断调用时,由cmd.exe进程将硬盘中的DOS模块加载到申请的空间中,并设置好,这样就能满足中断调用的要求。
4 中断程序设计的启示
PC/XT中,中断程序设计的一般步骤:(1)确定要使用的中断类型号;(2)保存原中断向量;(3)设置自己的中断向量;(4)设置中断屏蔽字;(5)CPU开中断;(6)恢复原中断向量。我们设想在一个程序中设好中断类型 60H,利用INT 35H将原中断向量保存;再利用INT 25H将写好的中断子程序设到中断类型号60H对应的中断向量表中,保持该中断处于加载状态,再编写另一个汇编程序调用INT 60H,在该程序中无法调用对应60H中断类型号的用户编写的中断程序。原因是我们开启了两个cmd.exe进程,每个cmd.exe进程对8086的模拟是独立的。就像不能通过一台PC/XT访问另一台PC/XT的中断一样。
同样,在汇编程序开发环境中,通过DOS的INT 26H调用,实现对磁盘的写功能是在cmd.exe进程能够完成权限范围内,由于cmd.exe进程是个用户进程,对磁盘操作要通过系统进程完成,我们看到的磁盘读、写是cmd.exe进程从硬盘中申请的一块空间,模拟了盘号、扇区的状态。因此,不会造成破坏磁盘中随意读、写数据的功能。
5 总结
总之,如果安装的操作系统不包含“命令提示符”的软件,是不能进行8086计算机的仿真,目前流行的Windows操作系统中都包含该软件,使利用8086指令集编写的汇编程序在Windows系统中得以仿真执行,掌握Windows系统对8086的仿真过程,屡清了程序的执行逻辑,解答了诸多疑问。
参考文献:
[1] 冯博琴,吴宁.微型计算机原理与接口技术》[M].清华大学出版社,2011.
[2] 孙钟秀.操作系统教程》,高等教育出版社[M].2008年
[3] 李华贵,李鹏. 微机原理与接口技术[M]. 北京:电子工业出版社,2010.
[4] 钱晓捷. 微机原理与接口技术[M]. 北京:机械工业出版社,2008.
[5] 马兴录,等. 32位微机原理与接口技术[M]. 北京:化学工业出版社,2009.