📄 debugcmd.cpp
字号:
{
goto Instruction_HeadedByP_Failed;
}
}
else
{
goto Instruction_HeadedByP_Failed;
}
break;
default: //Other
goto Instruction_HeadedByP_Failed;
break;
}
return STATUS_OK;
//--------------错误处理部分----------------------------------------------------------
Instruction_HeadedByP_Failed:
m_pVM->m_errorHandler.WriteErrorMessage("Unknown Instruction!");
return STATUS_FAILED;
}
/////////////////////////////////////////////////////////////////////////
//函数名称:Instruction_HeadedByR
//函数功能:---------------------处理以字符R作为起始字符的指令----------------
//入口参数:无
//出口参数:无
//返回值:int-------------STATUS_OK表示操作成功,其他表示操作失败
//开发人员:杨军
//开发日期:2004-4-24
//修改人员:
//修改日期:
/////////////////////////////////////////////////////////////////////////
int CDebugCmd::Instruction_HeadedByR()
{
//Handle Instruction RET ?
switch (GetNextChar())
{
case 'E': //RET ?
//得到RET输入
if ('T' == GetNextChar())
{
m_asmCode.instType = CASL_RET;
PassBySpace();
if (EOI != GetNextChar())
{
goto Instruction_HeadedByR_Failed;
}
}
//不支持的输入
else
{
goto Instruction_HeadedByR_Failed;
}
break;
default: //Other
goto Instruction_HeadedByR_Failed;
break;
}
return STATUS_OK;
//--------------错误处理部分----------------------------------------------------------
Instruction_HeadedByR_Failed:
m_pVM->m_errorHandler.WriteErrorMessage("Unknown Instruction!");
return STATUS_FAILED;
}
/////////////////////////////////////////////////////////////////////////
//函数名称:Instruction_HeadedByS
//函数功能:---------------------处理以字符S作为起始字符的指令----------------
//入口参数:无
//出口参数:无
//返回值:int-------------STATUS_OK表示操作成功,其他表示操作失败
//开发人员:杨军
//开发日期:2004-4-24
//修改人员:
//修改日期:
/////////////////////////////////////////////////////////////////////////
int CDebugCmd::Instruction_HeadedByS()
{
//Handle Instructions ST, SUB, SLA, SRA, SLL, SRL
switch (GetNextChar())
{
case 'T': //ST
m_asmCode.instType = CASL_ST;
//处理操作数
if (' ' == GetNextChar())
{
//略过多余的空格
PassBySpace();
if (STATUS_OK != HandleGRAndEA())
{
goto Instruction_HeadedByS_Failed;
}
}
else
{
goto Instruction_HeadedByS_Failed;
}
break;
case 'U': //SUB ?
if ('B' == GetNextChar())
{
m_asmCode.instType = CASL_SUB;
//处理操作数
if (' ' == GetNextChar())
{
//略过多余的空格
PassBySpace();
if (STATUS_OK != HandleGRAndEA())
{
goto Instruction_HeadedByS_Failed;
}
}
else
{
goto Instruction_HeadedByS_Failed;
}
}
break;
case 'L': //SLL OR SLA?
switch (GetNextChar())
{
case 'L': //SLL
m_asmCode.instType = CASL_SLL;
//处理操作数
if (' ' == GetNextChar())
{
//略过多余的空格
PassBySpace();
if (STATUS_OK != HandleGRAndEA())
{
goto Instruction_HeadedByS_Failed;
}
}
else
{
goto Instruction_HeadedByS_Failed;
}
break;
case 'A': //SLA
m_asmCode.instType = CASL_SLA;
//处理操作数
if (' ' == GetNextChar())
{
//略过多余的空格
PassBySpace();
if (STATUS_OK != HandleGRAndEA())
{
goto Instruction_HeadedByS_Failed;
}
}
else
{
goto Instruction_HeadedByS_Failed;
}
break;
default:
goto Instruction_HeadedByS_Failed;
break;
}
break;
case 'R': //SRA OR SRL?
switch (GetNextChar())
{
case 'L': //SRL
m_asmCode.instType = CASL_SRL;
//处理操作数
if (' ' == GetNextChar())
{
//略过多余的空格
PassBySpace();
if (STATUS_OK != HandleGRAndEA())
{
goto Instruction_HeadedByS_Failed;
}
}
else
{
goto Instruction_HeadedByS_Failed;
}
break;
case 'A': //SRA
m_asmCode.instType = CASL_SRA;
//处理操作数
if (' ' == GetNextChar())
{
//略过多余的空格
PassBySpace();
if (STATUS_OK != HandleGRAndEA())
{
goto Instruction_HeadedByS_Failed;
}
}
else
{
goto Instruction_HeadedByS_Failed;
}
break;
default:
goto Instruction_HeadedByS_Failed;
break;
}
break;
default: //Other
goto Instruction_HeadedByS_Failed;
break;
}
return STATUS_OK;
//--------------错误处理部分----------------------------------------------------------
Instruction_HeadedByS_Failed:
m_pVM->m_errorHandler.WriteErrorMessage("Unknown Instruction!");
return STATUS_FAILED;
}
/////////////////////////////////////////////////////////////////////////
//函数名称:PassBySpace
//函数功能:-----略过A命令中所获得用户输入的指令串中的多余的空格(包括制表符\t)------------------
//入口参数:无
//出口参数:无
//返回值:无
//开发人员:杨军
//开发日期:2004-4-24
//修改人员:
//修改日期:
/////////////////////////////////////////////////////////////////////////
void CDebugCmd::PassBySpace()
{
char chCmd = GetNextChar();
while ((' ' == chCmd || '\t' == chCmd) && EOI != chCmd)
{
chCmd = GetNextChar();
}
if (chCmd != EOI)
{
m_iPos--;
}
}
/////////////////////////////////////////////////////////////////////////
//函数名称:HandleGRAndEA
//函数功能:-----处理A命令中所获得用户输入的指令串中的操作数中的GR与EA部分--------
//入口参数:无
//出口参数:无
//返回值:int-------------STATUS_OK表示操作成功,其他表示操作失败
//开发人员:杨军
//开发日期:2004-4-24
//修改人员:
//修改日期:
/////////////////////////////////////////////////////////////////////////
int CDebugCmd::HandleGRAndEA()
{
if (STATUS_OK == HandleGR())
{
PassBySpace();
if (GetNextChar() == ',')
{
HandleEA();
}
else
{
goto HandleGRAndEA_Failed;
}
}
else
{
goto HandleGRAndEA_Failed;
}
return STATUS_OK;
HandleGRAndEA_Failed:
m_pVM->m_errorHandler.WriteErrorMessage("Handle GR And EA Failed!");
return STATUS_FAILED;
}
/////////////////////////////////////////////////////////////////////////
//函数名称:HandleEA
//函数功能:-----处理A命令中所获得用户输入的指令串中的操作数中的EA部分--------
//入口参数:无
//出口参数:无
//返回值:int-------------STATUS_OK表示操作成功,其他表示操作失败
//开发人员:杨军
//开发日期:2004-4-24
//修改人员:
//修改日期:
/////////////////////////////////////////////////////////////////////////
int CDebugCmd::HandleEA()
{
//-----------------------变量定义部分 begins---------------------------
S2 s2Address = 0;
//-----------------------变量定义部分 ends-----------------------------
//---------------先处理Address----------------------------------------
//注意:这里与Debug下一样,将用户输入的数字默认为十六进制格式!!!
// 以便于统一处理!!
if (HandleAddress(s2Address) == STATUS_OK)
{
m_asmCode.bAddressUse = true;
m_asmCode.s2Address = s2Address;
//--------------- 处理XR -------------------------------------
PassBySpace();
switch (GetNextChar())
{
case ',':
PassBySpace();
if (GetNextChar() == 'G')
{
if (GetNextChar() == 'R')
{
m_asmCode.bXRUse = true;
switch (GetNextChar())
{
case '0': //XR = GR0
m_asmCode.iXRNumber = 0;
break;
case '1': //XR = GR1
m_asmCode.iXRNumber = 1;
break;
case '2': //XR = GR2
m_asmCode.iXRNumber = 2;
break;
case '3': //XR = GR3
m_asmCode.iXRNumber = 3;
break;
case '4': //XR = GR4
m_asmCode.iXRNumber = 4;
break;
default:
m_asmCode.bXRUse = true;
goto HandleEA_Failed;
break;
}
PassBySpace();
if (GetNextChar() != EOI)
{
goto HandleEA_Failed;
}
}
else
{
goto HandleEA_Failed;
}
}
else
{
goto HandleEA_Failed;
}
break;
case EOI:
m_asmCode.bXRUse = false;
break;
default:
goto HandleEA_Failed;
break;
}
}
else
{
goto HandleEA_Failed;
}
return STATUS_OK;
HandleEA_Failed:
m_pVM->m_errorHandler.WriteErrorMessage("Handle EA Failed!");
return STATUS_FAILED;
}
/////////////////////////////////////////////////////////////////////////
//函数名称:Instruction_HeadedByI
//函数功能:---------------------处理以字符I作为起始字符的指令----------------
//入口参数:无
//出口参数:无
//返回值:int-------------STATUS_OK表示操作成功,其他表示操作失败
//开发人员:杨军
//开发日期:2004-4-24
//修改人员:
//修改日期:
/////////////////////////////////////////////////////////////////////////
int CDebugCmd::Instruction_HeadedByI()
{
//Handle Instruction IN
switch (GetNextChar())
{
case 'N': //IN
//得到IN输入
m_asmCode.instType = CASL_IN;
//注意: 指令后必须跟至少一个空格才能再跟操作数!!
// 否则视为不合法!!!
if (' ' == GetNextChar())
{
//略过多余的空格
PassBySpace();
if (STATUS_OK != HandleALabelAndNLabel())
{
goto Instruction_HeadedByI_Failed;
}
}
else
{
goto Instruction_HeadedByI_Failed;
}
break;
default: //Other
goto Instruction_HeadedByI_Failed;
break;
}
return STATUS_OK;
//--------------错误处理部分----------------------------------------------------------
Instruction_HeadedByI_Failed:
m_pVM->m_errorHandler.WriteErrorMessage("Unknown Instruction!");
return STATUS_FAILED;
}
/////////////////////////////////////////////////////////////////////////
//函数名称:HandleALabelAndNLabel
//函数功能:-----处理A命令中输入IN, OUT指令的操作数部分-----------------------
//入口参数:无
//出口参数:无
//返回值:int-------------STATUS_OK表示操作成功,其他表示操作失败
//开发人员:杨军
//开发日期:2004-4-24
//修改人员:
//修改日期:
/////////////////////////////////////////////////////////////////////////
int CDebugCmd::HandleALabelAndNLabel()
{
//-----------------------变量定义部分 begins---------------------------
S2 s2Address = 0;
//-----------------------变量定义部分 ends-----------------------------
//---------------先处理ALabelAddress----------------------------------------
//注意:这里与Debug下一样,将用户输入的数字默认为十六进制格式!!!
// 以便于统一处理!!
if (STATUS_OK == HandleAddress(s2Address))
{
m_asmCode.bALabelAddress = true;
m_asmCode.s2ALabelAddress = s2Address;
PassBySpace();
if (GetNextChar() == ',')
{
//--------------- 处理NLabelAddress -------------------------------------
if (STATUS_OK == HandleAddress(s2Address))
{
m_asmCode.bNLabelAddress = true;
m_asmCode.s2NLabelAddress = s2Address;
PassBySpace();
if (EOI != GetNextChar())
{
goto HandleALabelAndNLabel_Failed;
}
}
else
{
goto HandleALabelAndNLabel_Failed;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -