前言
上篇文章我们讲了如何调试bochs的cpu代码,这篇文章我们尝试结合intel手册来一起研究一下其cpu代码的实现。
定位到cli指令的代码
还是利用ext3-2中的代码,其0x7c00处的指令是cli,利用ph 0x7c00定位到该指令处。然后在vscode中设置断点,单步进入“BX_CPU_CALL_METHOD(i->execute1, (i));”函数中,代码如下。
void BX_CPP_AttrRegparmN(1) BX_CPU_C::CLI(bxInstruction_c *i)
{
Bit32u IOPL = BX_CPU_THIS_PTR get_IOPL();
if (protected_mode())
{
#if BX_CPU_LEVEL >= 5
if (BX_CPU_THIS_PTR cr4.get_PVI() && (CPL == 3))
{
if (IOPL < 3) {
BX_CPU_THIS_PTR clear_VIF();
BX_NEXT_INSTR(i);
}
}
else
#endif
{
if (IOPL < CPL) {
BX_DEBUG(("CLI: IOPL < CPL in protected mode"));
exception(BX_GP_EXCEPTION, 0);
}
}
}
else if (v8086_mode())
{
if (IOPL != 3) {
#if