当前位置: 代码迷 >> 汇编语言 >> 汇编语言(王爽)外中断章节需要dos实模式才能正常运行,怎么处理
  详细解决方案

汇编语言(王爽)外中断章节需要dos实模式才能正常运行,怎么处理

热度:7398   发布时间:2013-02-26 00:00:00.0
汇编语言(王爽)外中断章节需要dos实模式才能正常运行,怎么办?
需要安装一个吗?我是windows7系统,估计不太好办。已经通关(学完此书)的达人给个意见

------解决方案--------------------------------------------------------
随便找个虚拟机虚拟个dos系统就ok了,我常用VMware,虚拟dos很简单,google下,搜索个dos的软盘镜像,然后设置虚拟机软驱就可以启动dos了,连安装都省了,至于如何把可执行文件放入软盘镜像,可以找个WinImage之类的软件把exe添加进去,只是有些麻烦,但用VMware下dos和真实机器共享文件我还没发现什么有效方法,呵呵
------解决方案--------------------------------------------------------
在具有保护功能的系统启动的时,系统会把标志寄存器EFLAGS上的IOPL置0,并且系统程序会抢占0特权级,于是所有的IO操作都必须由系统进行,于是非内核模式的程序无法进行IO,只能请求系统内核了。
如果你要用汇编开发操作系统,是不可能把windows作为开发环境的。因为你如果要开发一个操作系统,首先要把一个磁盘格式化成你自己设计的文件系统,然后要把这个系统的所有数据写入你格式化好的磁盘,但是这些都涉及到IO操作,要使用“out”这条指令,而windows下的应用程序的CPL为3,IOPL为0,“out”这条指令无法执行。

所以,如果你要开发一个新的操作系统,只能在DOS之类的非保护型操作系统上作为开发环境,你在DOS上写汇编代码,用DOS环境下的汇编器汇编你的代码,然后运行代码,把一个磁盘格式化成你自己设计的文件系统,然后把这个系统的所有数据写入你格式化好的磁盘,然后你就可以退出DOS重启,选择从你刚装好系统的那个磁盘启动,就可以进入你写的操作系统了。

这也是为什么高级语言有windows上的集成开发环境,但几乎所有的汇编器都运行在DOS上的原因。因为汇编本身就是用来做系统的,如果已经装好了系统,设置了IOPL保护了,当然不能再做系统了,所以还是DOS下才好做系统。

当然,你也可以不用任何开发环境,直接用磁头在磁盘上一位一位地刻。早期的计算机不仅没有编译器,而且没有操作系统,键盘和鼠标都不能用,更别提什么集成开发环境了。但早期的磁盘比现在大得多,每一位存储单元都是肉眼可见的,早期的程序员们拿着磁头,直接在磁盘上磁化每一位,最早的操作系统和编译器就是这样一位一位刻出来的。
------解决方案--------------------------------------------------------
8086代码中有相当一部分指令在保护模式下属于特权指令,如屏蔽中断的cli和中断返回指令iret等。这些指令在8086程序中是合法的。如果不让这些指令执行,8086代码就无法工作。为了解决这个问题,虚拟86管理程序采用模拟的方法来完成这些指令。这些特权指令执行的时候引起了保护异常。虚拟86管理程序在异常处理程序中检查产生异常的指令,如果是中断指令,则从虚拟86任务的中断向量表中取出中断处理程序的入口地址,并将控制转移过去;如果是危及操作系统的指令,如cli等,则简单地忽略这些指令,在异常处理程序返回的时候直接返回到下一条指令。通过这些措施,8086程序既可以正常地运行下去,在执行这些指令的时候又觉察不到已经被虚拟86管理程序做了手脚。MS-DOS应用程序在 Windows操作系统中就是这样工作的。
  相关解决方案