首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 嵌入开发 > 汇编语言 >

v86模式有关问题,高人指教!指教!

2012-04-16 
v86模式问题,高人指教!!!!!!!!!在线等!!!指教!!!!(1)通过IRET指令进入V86模式通过在中断/异常处理结束时使

v86模式问题,高人指教!!!!!!!!!在线等!!!指教!!!!
(1)通过IRET指令进入V86模式

        通过在中断/异常处理结束时使用IRET指令返回被中断的程序继续执行。指令IRET的执行步骤   如下所示:  

        (1)若NT=1,则进行任务切换,然后转步骤6;

        (2)否则从堆栈中弹出EIP、CS和EFLAGS;

  (3)若VM=1且CPL=0,则恢复外层堆栈及其它段寄存器,然后转步骤6;

        (4)若无特权级变换则转步骤6;

        (5)否则恢复外层堆栈;

        (6)结束

以上是进入v86模式的情况,对1、2、3、4、5、6这几个的转换没有理解,不知为什么发生这些,怎么回事,本人初学,高手指教!
(1)nt=1进行任务切换,切换到哪,切换到什么任务?执行(6)是怎么回事?
(2)为什么nt不等于1就做(2)的步骤,nt位到底是做什么的,有什么用,看了nt的解释也没弄明白是做什么的?
(3)若VM=1且CPL=0,则恢复外层堆栈及其它段寄存器---是怎么回事?恢复外层堆栈干什么?为什么转去(6)?
  (4)若无特权级变换则转步骤6;---这个是怎么回事,什么情况下发生的?
(5)否则恢复外层堆栈;---这个又是怎么回事?

对以上的东西都不是很理解,看书也没看明白,微软的手册也不是太懂,希望高手不要笑话,不吝赐教,谢谢。初学,菜鸟,大家不要笑话。指教了!!!!!!1

[解决办法]
虚拟86模式是intel为了为保护模式的操作系统提供向前兼容的功能才设计的,研究这个模式几乎没有任何价值,所以一直没有人回这个帖子。
[解决办法]
不知道怎样做,估计不是很容易能够实现,因为还要启用分页机制。仔细查阅一些资料吧
[解决办法]
(1)当前的TSS段中有一个字段是记录前一个任务的TSS内容的。如果NT=1,就把这个字段复制到TSS寄存器,接着进行切换。
(2)NT是记录当前任务是不是从别的任务进入的。函数f()进入g()之后,g()还可以调用f()。但是如果是任务,任务A调用了B之后,B是不可以调用A的,也就是说任务是不可以递归调用的。
如果A调用了B,那么B的NT=1。
其他的不太记得了,毕竟是很细节的东西,自己也不搞差不多一年了。

云中雀说得不错,V86是一个没有什么意义的东西了,学保护模式可以跳过这部分。

热点排行