none
在VPC里,为什么使用CALL指令发起任务转换后,EFLAGS的NT位是0 ? RRS feed

  • 问题

    1. 主机:Windows 7。使用WINDOWS VIRTUAL PC软件,创建一个祼机,在祼机上编写软件执行任务切换。
      发现,使用CALL指令进行任务切换,可以成功运行。但是,在新任务中检测EFLAGS寄存器的NT位,发现是“0”。于是,导致使用IRETD指令返回到上一个任务时出错。
      但是,使用BOCHS和VIRTUAL-BOX都没有这个问题,程序运行正常。
    2. 在VPC里,EFLAGS的内容是0x00000003,而在BOCHS里则是0x00004002。
    3. 补充:后来改成用JMP指令发起任务切换,然后,再用JMP指令切换回原来的任务,可以正常执行。这说明,用CALL指令切换后,旧任务已经变为“忙”,但新任务的NT位以及TSS中的LDT链接域没有改变。
    2012年7月18日 6:44