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是一个没有什么意义的东西了,学保护模式可以跳过这部分。