Bochs源码分析 - 13:结合intel手册尝试分析CLI指令的实现

本文结合Intel手册,分析Bochs源码中CLI指令的实现过程。通过调试定位到CLI指令代码,理解其在不同模式下的操作,如在PVI和VME模式下对IF和VIF标志位的影响,以及CPU内部如何屏蔽可屏蔽中断。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

前言

        上篇文章我们讲了如何调试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 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值