⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 debugcmd.cpp

📁 这是一个软件水平资格考试中使用的CASL汇编语言的编译器,实现文件中包括一个编译器,一个虚拟机,一个类似于Debug的调试器.
💻 CPP
📖 第 1 页 / 共 5 页
字号:
      {
        goto Instruction_HeadedByC_Failed;
      }
    }
    else
    {
      goto Instruction_HeadedByC_Failed;
    }
    break;
  case 'A':   //CALL
    if ('L' == GetNextChar())
    {
      if ('L' == GetNextChar())
      {
        m_asmCode.instType = CASL_CALL;
        //处理操作数
        if (' ' == GetNextChar())
        {
          //略过多余的空格
          PassBySpace();
          if (STATUS_OK != HandleEA())
          {
            goto Instruction_HeadedByC_Failed;
          }
        }
        else
        {
          goto Instruction_HeadedByC_Failed;
        }
      }
      else
      {
        goto Instruction_HeadedByC_Failed;
      }
    }
    else
    {
      goto Instruction_HeadedByC_Failed;
    }
    break;
  default:    //Other
    goto Instruction_HeadedByC_Failed;
    break;
  }
 
  return STATUS_OK;

//--------------错误处理部分----------------------------------------------------------
Instruction_HeadedByC_Failed:
  m_pVM->m_errorHandler.WriteErrorMessage("Unknown Instruction!");
  return STATUS_FAILED;
}

/////////////////////////////////////////////////////////////////////////
//函数名称:Instruction_HeadedByE
//函数功能:---------------------处理以字符E作为起始字符的指令----------------
//入口参数:无
//出口参数:无
//返回值:int-------------STATUS_OK表示操作成功,其他表示操作失败
//开发人员:杨军
//开发日期:2004-4-24
//修改人员:
//修改日期:
/////////////////////////////////////////////////////////////////////////
int CDebugCmd::Instruction_HeadedByE()
{
  //Handle Instruction EOR
  switch (GetNextChar())
  {
  case 'O':   //EOR
    //得到EOR输入
    if ('R' == GetNextChar())
    {
      m_asmCode.instType = CASL_EOR;
      //注意: 指令后必须跟至少一个空格才能再跟操作数!!
      //      否则视为不合法!!!
      if (' ' == GetNextChar())
      {
        //略过多余的空格
        PassBySpace();
        if (STATUS_OK != HandleGRAndEA())
        {
          goto Instruction_HeadedByE_Failed;
        }
      }
      else
      {
        goto Instruction_HeadedByE_Failed;
      }
    }
    //不支持的输入
    else
    {
      goto Instruction_HeadedByE_Failed;
    }
    break;
  default:    //Other
    goto Instruction_HeadedByE_Failed;
    break;
  }
 
  return STATUS_OK;

//--------------错误处理部分----------------------------------------------------------
Instruction_HeadedByE_Failed:
  m_pVM->m_errorHandler.WriteErrorMessage("Unknown Instruction!");
  return STATUS_FAILED;
}

/////////////////////////////////////////////////////////////////////////
//函数名称:Instruction_HeadedByJ
//函数功能:---------------------处理以字符J作为起始字符的指令----------------
//入口参数:无
//出口参数:无
//返回值:int-------------STATUS_OK表示操作成功,其他表示操作失败
//开发人员:杨军
//开发日期:2004-4-24
//修改人员:
//修改日期:
/////////////////////////////////////////////////////////////////////////
int CDebugCmd::Instruction_HeadedByJ()
{
  //Handle Instructions JMP, JPZ, JMI, JNZ, JZE ?
  switch (GetNextChar())
  {
  case 'M':   //JMP ?
    //得到JMP输入
    switch (GetNextChar())
    {
    case 'P':   //JMP
      m_asmCode.instType = CASL_JMP;
      //注意: 指令后必须跟至少一个空格才能再跟操作数!!
      //      否则视为不合法!!!
      if (' ' == GetNextChar())
      {
        //略过多余的空格
        PassBySpace();
        if (STATUS_OK != HandleEA())
        {
          goto Instruction_HeadedByJ_Failed;
        }
      }
      else
      {
        goto Instruction_HeadedByJ_Failed;
      }
      break;
    case 'I':   //JMI
      m_asmCode.instType = CASL_JMI;
      //注意: 指令后必须跟至少一个空格才能再跟操作数!!
      //      否则视为不合法!!!
      if (' ' == GetNextChar())
      {
        //略过多余的空格
        PassBySpace();
        if (STATUS_OK != HandleEA())
        {
          goto Instruction_HeadedByJ_Failed;
        }
      }
      else
      {
        goto Instruction_HeadedByJ_Failed;
      }
      break;
    default:
      goto Instruction_HeadedByJ_Failed;
      break;
    }
    break;
  case 'P':   //JPZ ?
    //得到JPZ输入
    if ('Z' == GetNextChar())
    {
      m_asmCode.instType = CASL_JPZ;

      if (' ' == GetNextChar())
      {
        //略过多余的空格
        PassBySpace();
        if (STATUS_OK != HandleEA())
        {
          goto Instruction_HeadedByJ_Failed;
        }
      }
      else
      {
        goto Instruction_HeadedByJ_Failed;
      }
    }
    //不支持的输入
    else
    {
      goto Instruction_HeadedByJ_Failed;
    }
    break;
  case 'N':   //JNZ ?
    //得到JNZ输入
    if ('Z' == GetNextChar())
    {
      m_asmCode.instType = CASL_JNZ;

      if (' ' == GetNextChar())
      {
        //略过多余的空格
        PassBySpace();
        if (STATUS_OK != HandleEA())
        {
          goto Instruction_HeadedByJ_Failed;
        }
      }
      else
      {
        goto Instruction_HeadedByJ_Failed;
      }
    }
    //不支持的输入
    else
    {
      goto Instruction_HeadedByJ_Failed;
    }
    break;
  case 'Z':   //JZE ?
    //得到JNZ输入
    if ('E' == GetNextChar())
    {
      m_asmCode.instType = CASL_JZE;

      if (' ' == GetNextChar())
      {
        //略过多余的空格
        PassBySpace();
        if (STATUS_OK != HandleEA())
        {
          goto Instruction_HeadedByJ_Failed;
        }
      }
      else
      {
        goto Instruction_HeadedByJ_Failed;
      }
    }
    //不支持的输入
    else
    {
      goto Instruction_HeadedByJ_Failed;
    }
    break;
  default:    //Other
    goto Instruction_HeadedByJ_Failed;
    break;
  }
 
  return STATUS_OK;

//--------------错误处理部分----------------------------------------------------------
Instruction_HeadedByJ_Failed:
  m_pVM->m_errorHandler.WriteErrorMessage("Unknown Instruction!");
  return STATUS_FAILED;
}

/////////////////////////////////////////////////////////////////////////
//函数名称:Instruction_HeadedByL
//函数功能:---------------------处理以字符L作为起始字符的指令----------------
//入口参数:无
//出口参数:无
//返回值:int-------------STATUS_OK表示操作成功,其他表示操作失败
//开发人员:杨军
//开发日期:2004-4-24
//修改人员:
//修改日期:
/////////////////////////////////////////////////////////////////////////
int CDebugCmd::Instruction_HeadedByL()
{
  //Handle Instructions LD, LEA ?
  switch (GetNextChar())
  {
  case 'D':   //LD ?
    //得到LD输入
    m_asmCode.instType = CASL_LD;
    //注意: 指令后必须跟至少一个空格才能再跟操作数!!
    //      否则视为不合法!!!
    if (' ' == GetNextChar())
    {
      //略过多余的空格
      PassBySpace();
      if (STATUS_OK != HandleGRAndEA())
      {
        goto Instruction_HeadedByL_Failed;
      }
    }
    else
    {
      goto Instruction_HeadedByL_Failed;
    }
    break;
  case 'E':   //LEA ?
    //得到LEA输入
    if ('A' == GetNextChar())
    {
      m_asmCode.instType = CASL_LEA;

      if (' ' == GetNextChar())
      {
        //略过多余的空格
        PassBySpace();
        if (STATUS_OK != HandleGRAndEA())
        {
          goto Instruction_HeadedByL_Failed;
        }
      }
      else
      {
        goto Instruction_HeadedByL_Failed;
      }
    }
    //不支持的输入
    else
    {
      goto Instruction_HeadedByL_Failed;
    }
    break;
  default:    //Other
    goto Instruction_HeadedByL_Failed;
    break;
  }
 
  return STATUS_OK;

//--------------错误处理部分----------------------------------------------------------
Instruction_HeadedByL_Failed:
  m_pVM->m_errorHandler.WriteErrorMessage("Unknown Instruction!");
  return STATUS_FAILED;
}

/////////////////////////////////////////////////////////////////////////
//函数名称:Instruction_HeadedByO
//函数功能:---------------------处理以字符O作为起始字符的指令----------------
//入口参数:无
//出口参数:无
//返回值:int-------------STATUS_OK表示操作成功,其他表示操作失败
//开发人员:杨军
//开发日期:2004-4-24
//修改人员:
//修改日期:
/////////////////////////////////////////////////////////////////////////
int CDebugCmd::Instruction_HeadedByO()
{
  //Handle Instructions OR, OUT ?
  switch (GetNextChar())
  {
  case 'R':   //OR ?
    //得到OR输入
    m_asmCode.instType = CASL_OR;
    //注意: 指令后必须跟至少一个空格才能再跟操作数!!
    //      否则视为不合法!!!
    if (' ' == GetNextChar())
    {
      //略过多余的空格
      PassBySpace();
      if (STATUS_OK != HandleGRAndEA())
      {
        goto Instruction_HeadedByO_Failed;
      }
    }
    else
    {
      goto Instruction_HeadedByO_Failed;
    }
    break;
  case 'U':   //OUT ?
    //得到OUT输入
    if ('T' == GetNextChar())
    {
      m_asmCode.instType = CASL_OUT;

      if (' ' == GetNextChar())
      {
        //略过多余的空格
        PassBySpace();
        if (STATUS_OK != HandleALabelAndNLabel())
        {
          goto Instruction_HeadedByO_Failed;
        }
      }
      else
      {
        goto Instruction_HeadedByO_Failed;
      }
    }
    //不支持的输入
    else
    {
      goto Instruction_HeadedByO_Failed;
    }
    break;
  default:    //Other
    goto Instruction_HeadedByO_Failed;
    break;
  }
 
  return STATUS_OK;

//--------------错误处理部分----------------------------------------------------------
Instruction_HeadedByO_Failed:
  m_pVM->m_errorHandler.WriteErrorMessage("Unknown Instruction!");
  return STATUS_FAILED;
}

/////////////////////////////////////////////////////////////////////////
//函数名称:Instruction_HeadedByP
//函数功能:---------------------处理以字符P作为起始字符的指令----------------
//入口参数:无
//出口参数:无
//返回值:int-------------STATUS_OK表示操作成功,其他表示操作失败
//开发人员:杨军
//开发日期:2004-4-24
//修改人员:
//修改日期:
/////////////////////////////////////////////////////////////////////////
int CDebugCmd::Instruction_HeadedByP()
{
  //Handle Instructions PUSH, POP ?
  switch (GetNextChar())
  {
  case 'O':   //CPA OR CPL?
    if ('P' == GetNextChar())
    {
      //处理操作数
      if (' ' == GetNextChar())
      {
        //略过多余的空格
        PassBySpace();
        if (STATUS_OK != HandleGR())
        {
          goto Instruction_HeadedByP_Failed;
        }
      }
      else
      {
        goto Instruction_HeadedByP_Failed;
      }
    }
    else
    {
      goto Instruction_HeadedByP_Failed;
    }
    break;
  case 'U':   //PUSH
    if ('S' == GetNextChar())
    {
      if ('H' == GetNextChar())
      {
        m_asmCode.instType = CASL_PUSH;
        //处理操作数
        if (' ' == GetNextChar())
        {
          //略过多余的空格
          PassBySpace();
          if (STATUS_OK != HandleEA())
          {
            goto Instruction_HeadedByP_Failed;
          }
        }
        else
        {
          goto Instruction_HeadedByP_Failed;
        }
      }
      else

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -