是否使用x86 VIF和VIP标志?
我已经阅读了《英特尔软件开发人员手册》第3卷第20节,其中解释了virtual-8086模式的工作原理,包括VIF和VIP标志的使用。然而,我仍然对一些事情感到困惑 VIF标志用作IF标志的代理,因此8086仿真器(可能是某个用户空间程序)可以接收可屏蔽的硬件中断,即使它所模拟的实模式程序不想接收是否使用x86 VIF和VIP标志?,x86,emulation,interrupt,x86-16,X86,Emulation,Interrupt,X86 16,我已经阅读了《英特尔软件开发人员手册》第3卷第20节,其中解释了virtual-8086模式的工作原理,包括VIF和VIP标志的使用。然而,我仍然对一些事情感到困惑 VIF标志用作IF标志的代理,因此8086仿真器(可能是某个用户空间程序)可以接收可屏蔽的硬件中断,即使它所模拟的实模式程序不想接收 模拟器为什么要这样做 VIP用作收到中断时的标记空间。根据手册,如果处理器接收到可屏蔽中断,但被仿真程序不想接收(因此VIF标志将被清除),仿真器应设置VIP标志,等待仿真程序设置if标志,然后处理中
问题1已经回答了,让我们 稍微处理一下2和3 实模式8086上的中断是否延迟而不是忽略 值得注意的是 执行模式(真实或受保护) 与此无关。 CLI确实忽略了中断, 它不会推迟任何事情。但是 中断处理非常复杂, 而且,在大多数配置中 中断设备和/或 中断控制器将确保 CPU的INT引脚保持激活状态 直到你做了STI和维修 打断 因此,过度简化, 可以说CLI延迟了 打断但你不会发现这样的情况 CPU手册中的语句,因为 这是通过外部逻辑完成的, 这取决于许多可配置的东西 但是在设置VIP标志时,可以生成一个GP 以多种方式,例如通过无效的内存访问 在v86模式下,有相当多的 GPF源,例如端口IO指令, 当IOPL小于3时。唯一可靠的 区分它们的方法是查找 出现故障的操作码,并对其进行模拟。这是不可能的 例如,仅设置VIF和升高GPF 在此之后,作为例外,不应留下任何 错误指令的可观察影响,
允许软件干净地模拟它。问题1已经回答,让我们 稍微处理一下2和3 实模式8086上的中断是否延迟而不是忽略 值得注意的是 执行模式(真实或受保护) 与此无关。 CLI确实忽略了中断, 它不会推迟任何事情。但是 中断处理非常复杂, 而且,在大多数配置中 中断设备和/或 中断控制器将确保 CPU的INT引脚保持激活状态 直到你做了STI和维修 打断 因此,过度简化, 可以说CLI延迟了 打断但你不会发现这样的情况 CPU手册中的语句,因为 这是通过外部逻辑完成的, 并且取决于许多配置