【发布时间】:2016-10-27 19:11:34
【问题描述】:
对于一个业余项目,我正在尝试编写一个半可编程 x86 虚拟机。
我了解格式,所以大部分设计都比较简单,但是在执行带有操作数的指令后,标志经常会发生变化。检查每个潜在位的效率非常低,所以我正在考虑将标志寄存器弹出到 VM 中,对它进行与运算,然后设置 VM 的标志寄存器。但是,这仍然是很多的开销。
这有点自以为是,但我有什么遗漏吗?
【问题讨论】:
-
不清楚你在做什么。
-
嗯,通常管理程序不会模拟指令 pee 步骤,而是让来宾代码(大部分)未经修改地运行,当硬件检测到特权指令时会陷入管理程序内核中。当然在实践中它比这要复杂得多,但关键是通常你只需要在进入管理程序时才需要担心标志寄存器的状态,而不是在每条指令之后。
-
@Jester 我认为他正在构建一个模拟器。
-
我不明白你在做什么。如果这是一个虚拟机,你通常会让代码执行并做它的事情,直到你得到一个 vmcall,并且基本上不关心标志。如果这是一个“幼稚”的模拟器,并且您正在用高级语言重新实现 x86 指令集,那么您可以很聪明,并且在大多数情况下避免计算标志(通过将其延迟到以后或通过提前检查哪些标志可能是相关)。
-
如果您只是在模拟指令(这意味着您从未在 CPU 上本地运行指令,无论是否使用 VT-X),请编辑您的问题以表明您正在构建一个 模拟器.
标签: assembly x86 virtual-machine virtualization