📄 helprelated.cpp
字号:
#include "StdAfx.h"
#include "helprelated.h"
HelpRelated::HelpRelated(void)
{
}
HelpRelated::~HelpRelated(void)
{
}
// 生成命令帮助串
void HelpRelated::MakeCHelp(char* pbuffer, int pcount)
{
char * HelpStringBuf[9];
HelpStringBuf[0]="A (Address)\r\n完成单条指令的汇\r\n编操作,把执行代\r\n码写入内存。\r\n";
HelpStringBuf[1]="U (Address)\r\n每次从指定的地址\r\n(或当前地址寄存\r\n器所示地址)反汇\r\n编15条指令。\r\n";
HelpStringBuf[2]="G (Address)\r\n从指定的地址(或\r\n前地址寄存器所示\r\n地址)连续运行一\r\n个用户程序。\r\n";
HelpStringBuf[3]="T (Address)\r\n从指定的(或PC中\r\n的当前地址)开始\r\n单条执行程序指令。\r\n";
HelpStringBuf[4]="R (寄存器名)\r\n不带参数时显示\r\n全部寄存器及状态\r\n位的值,带参数时\r\n显示并修改指定寄\r\n存器的值。\r\n";
HelpStringBuf[5]="D (Address)\r\n从指定的地址(或\r\n或前地址寄存器所\r\n示地址)显示内存\r\n128个存储字的内容。\r\n";
HelpStringBuf[6]="E Address\r\n从指定地址逐字修\r\n改每个内存单元的\r\n内容。\r\n";
HelpStringBuf[7]="";
HelpStringBuf[8]="";
//复制
for(int i=0;i<pcount;i++)
buffer[i]=pbuffer[i];
buffer[i]='\0';
int count=pcount;
if(count==0)
{
HelpString[0]='\0';
for(int i=0;i<9;i++)
strcat(HelpString,HelpStringBuf[i]);
}
else if(count>0)
{
//如果首先连续输入的是空格,直接退出
for(int m=0;m<count;m++)
if(buffer[m]!=0x20 && buffer[m]!=0x09)
break;
if(m>=count)
return;
HelpString[0]='\0';
//过滤所有的空格
for(m=0;m<count;m++)
{
if(buffer[m]==' ' || buffer[m]=='\t')
{
for(int n=m;n<count-1;n++)
buffer[n]=buffer[n+1];
count--;
m--;
}
}
if(buffer[0]=='A'||buffer[0]=='a')
{
for(int m=1;m<count;m++)
{
if(m==1 && (buffer[m]<'0' || buffer[m]>'4'))
return;
if((m>1 && m< 5) && (!(buffer[m]>='0' && buffer[m]<='9')
&& !(buffer[m]>='A' && buffer[m]<='F')))
return;
if(m>=5)
return;
}
strcat(HelpString,HelpStringBuf[0]);
}
if(buffer[0]=='U'||buffer[0]=='u')
{
for(int m=1;m<count;m++)
{
if(m==1 && (buffer[m]<'0' || buffer[m]>'4'))
return;
if((m>1 && m< 5) && (!(buffer[m]>='0' && buffer[m]<='9')
&& !(buffer[m]>='A' && buffer[m]<='F')))
return;
if(m>=5)
return;
}
strcat(HelpString,HelpStringBuf[1]);
}
if(buffer[0]=='G')
{
for(int m=1;m<count;m++)
{
if(m==1 && (buffer[m]<'0' || buffer[m]>'4'))
return;
if((m>1 && m< 5) && (!(buffer[m]>='0' && buffer[m]<='9')
&& !(buffer[m]>='A' && buffer[m]<='F')))
return;
if(m>=5)
return;
}
strcat(HelpString,HelpStringBuf[2]);
}
if(buffer[0]=='T'||buffer[0]=='t')
{
for(int m=1;m<count;m++)
{
if(m==1 && (buffer[m]<'0' || buffer[m]>'4'))
return;
if((m>1 && m< 5) && (!(buffer[m]>='0' && buffer[m]<='9')
&& !(buffer[m]>='A' && buffer[m]<='F')))
return;
if(m>=5)
return;
}
strcat(HelpString,HelpStringBuf[3]);
}
if(buffer[0]=='D'||buffer[0]=='d')
{
for(int m=1;m<count;m++)
{
if(m==1 && (buffer[m]<'0' || buffer[m]>'4'))
return;
if((m>1 && m< 5) && (!(buffer[m]>='0' && buffer[m]<='9')
&& !(buffer[m]>='A' && buffer[m]<='F')))
return;
if(m>=5)
return;
}
strcat(HelpString,HelpStringBuf[5]);
}
if(buffer[0]=='E'||buffer[0]=='e')
{
for(int m=1;m<count;m++)
{
if(m==1 && (buffer[m]<'0' || buffer[m]>'4'))
return;
if((m>1 && m< 5) && (!(buffer[m]>='0' && buffer[m]<='9')
&& !(buffer[m]>='A' && buffer[m]<='F')))
return;
if(m>=5)
return;
}
strcat(HelpString,HelpStringBuf[6]);
}
if(buffer[0]=='R'||buffer[0]=='r')
{
for(int m=1;m<count;m++)
{
if(m==1 && buffer[m]!='R')
return;
if((m>1 && m< 4) && !(buffer[m]>='0' && buffer[m]<='9'))
return;
if(m>=4)
return;
}
strcat(HelpString,HelpStringBuf[4]);
}
if(buffer[0]=='S'||buffer[0]=='s')
{
if(count==1)
strcpy(HelpString,HelpStringBuf[7]);
if(count==2)
{
if(buffer[1]='A')
strcpy(HelpString,HelpStringBuf[7]);
else
strcpy(HelpString,"");
}
if(count==3)
{
if(buffer[1]=='A' && buffer[2]=='V')
strcpy(HelpString,HelpStringBuf[7]);
else
strcpy(HelpString,"");
}
if(count==4)
{
if(buffer[1]=='A' && buffer[2]=='V' && buffer[3]=='E')
strcpy(HelpString,HelpStringBuf[7]);
else
strcpy(HelpString,"");
}
}
if(buffer[0]=='L'||buffer[0]=='l')
{
if(count==1)
strcpy(HelpString,HelpStringBuf[8]);
if(count==2)
{
if(buffer[1]='O')
strcpy(HelpString,HelpStringBuf[8]);
else
strcpy(HelpString,"");
}
if(count==3)
{
if(buffer[1]=='O' && buffer[2]=='A')
strcpy(HelpString,HelpStringBuf[8]);
else
strcpy(HelpString,"");
}
if(count==4)
{
if(buffer[1]=='O' && buffer[2]=='A' && buffer[3]=='D')
strcpy(HelpString,HelpStringBuf[8]);
else
strcpy(HelpString,"");
}
}
}
}
// 生成指令帮助串
void HelpRelated::MakeIHelp(char* buffer, int count)
{
char * HelpStringBuf[50];
HelpStringBuf[0]="ADD DR , SR\r\nDR <- DR + SR(加溢出C为1,否则为0)\r\n\r\n";
HelpStringBuf[1]="SUB DR , SR\r\nDR <- DR - SR(小减大C为1,否则为0)\r\n\r\n";
HelpStringBuf[2]="AND DR , SR\r\nDR <- DR and SR\r\n\r\n";
HelpStringBuf[3]="CMP DR , SR\r\nDR-SR(小减大C为1,否则为0)\r\n\r\n";
HelpStringBuf[4]="XOR DR , SR\r\nDR <- DR xor SR\r\n\r\n";
HelpStringBuf[5]="TEST DR , SR\r\nDR and SR\r\n\r\n";
HelpStringBuf[6]="OR DR , SR\r\nDR <- DR or SR\r\n\r\n";
HelpStringBuf[7]="MVRR DR , SR\r\nDR <- SR\r\n\r\n";
HelpStringBuf[8]="DEC DR\r\nDR <- DR-1\r\n\r\n";
HelpStringBuf[9]="INC DR\r\nDR <- DR+1\r\n\r\n";
HelpStringBuf[10]="SHL DR\r\nDR , C <- DR*2\r\n\r\n";
HelpStringBuf[11]="SHR DR\r\nDR , C <- DR/2\r\n\r\n";
HelpStringBuf[12]="JR OFFSET\r\n无条件跳转\r\n\r\n";
HelpStringBuf[13]="JRC OFFSET\r\nC=1时跳转\r\n\r\n";
HelpStringBuf[14]="JRNC OFFSET\r\nC=0时跳转\r\n\r\n";
HelpStringBuf[15]="JRZ OFFSET\r\nZ=1时跳转\r\n\r\n";
HelpStringBuf[16]="JRNZ OFFSET\r\nZ=0时跳转\r\n\r\n";
HelpStringBuf[17]="JMPA ADR\r\n无条件跳转到ADR\r\n\r\n";
HelpStringBuf[18]="LDRR DR , [SR]\r\nDR <- [SR]\r\n\r\n";
HelpStringBuf[19]="IN I/O PORT\r\nR0 <- [I/O PORT]\r\n\r\n";
HelpStringBuf[20]="STRR [DR], SR\r\n[DR] <- SR\r\n\r\n";
HelpStringBuf[21]="PSHF\r\nFLAG入栈\r\n\r\n";
HelpStringBuf[22]="PUSH SR\r\nSR入栈\r\n\r\n";
HelpStringBuf[23]="OUT I/O PORT\r\n[I/O PORT] <- R0\r\n\r\n";
HelpStringBuf[24]="POP DR\r\nDR <- 出栈\r\n\r\n";
HelpStringBuf[25]="MVRD DR ,DATA\r\nDR <- DATA\r\n\r\n";
HelpStringBuf[26]="POPF\r\nFLAG <- 出栈\r\n\r\n";
HelpStringBuf[27]="RET\r\n子程序结束\r\n\r\n";
HelpStringBuf[28]="CALA ADR\r\n调用首地址在ADR的子程序\r\n\r\n";
HelpStringBuf[29]="ADC DR , SR\r\nDR <- DR + SR + C (加溢出C为1,否则为0)\r\n\r\n";
HelpStringBuf[30]="SBB DR , SR\r\nDR <- DR - SR - C (小减大C为1,否则为0)\r\n\r\n";
HelpStringBuf[31]="RCL DR\r\nDR<-DR 带进位C的循环右移\r\n\r\n";
HelpStringBuf[32]="RCL DR\r\nDR<-DR 带进位C的循环左移\r\n\r\n";
HelpStringBuf[33]="EI \r\n开中断\r\n\r\n";
HelpStringBuf[34]="DI \r\n关中断\r\n\r\n";
HelpStringBuf[35]="IRET\r\n中断返回\r\n\r\n";
HelpStringBuf[36]="ASR DR\r\nDR<-DR 算术右移\r\n\r\n";
HelpStringBuf[37]="NOT DR\r\nDR<-/DR\r\n\r\n";
HelpStringBuf[38]="JMPR SR\r\n跳到SR指明的地址\r\n\r\n";
HelpStringBuf[39]="JRS OFFSET\r\nS=1时跳转\r\n\r\n";
HelpStringBuf[40]="JRNS OFFSET\r\nS=0时跳转\r\n\r\n";
HelpStringBuf[41]="CLC\r\nC=1\r\n\r\n";
HelpStringBuf[42]="STC\r\nC=0\r\n\r\n";
HelpStringBuf[43]="CALR SR\r\n调用SR指明的子程序\r\n\r\n";
HelpStringBuf[44]="JRS OFFSET\r\nS=1时跳转\r\n\r\n";
HelpStringBuf[45]="JRNS OFFSET\r\nS=0时跳转\r\n\r\n";
HelpStringBuf[46]="LDRA DR [ADR]\r\nDR <- [ADR]\r\n\r\n";
HelpStringBuf[47]="LDRX DR [SR]\r\nDR <- [DATA+SR]\r\n\r\n";
HelpStringBuf[48]="STRX DR [SR]\r\n[DATA+SR] <- SR\r\n\r\n";
HelpStringBuf[49]="STRA [ADR],SR\r\n[ADR] <- SR\r\n\r\n";
if(count==0)
{
HelpString[0]='\0';
for(int i=0;i<49;i++)
strcat(HelpString,HelpStringBuf[i]);
}
else
{
HelpString[0]='\0';
for(int m=0;m<49;m++)
{
for(int n=0;n<count;n++)
if(buffer[n]!=HelpStringBuf[m][n])
break;
if(n<count && n>=3)
{
if(m==33 || m==34 || m==19 || m==6 || m==12)
strcat(HelpString,HelpStringBuf[m]);
}
if(n<count && n>=4)
{
if(m==0 ||m==1 ||m==2 ||m==3 ||m==4 ||m==8 ||m==9
||m==10 ||m==11 ||m==13 ||m==15 ||m==23 ||m==24
||m==27 ||m==29 ||m==30 ||m==31 ||m==32||m==36
||m==37||m==39||m==41||m==42||m==44)
strcat(HelpString,HelpStringBuf[m]);
}
if(n<count && n>=5)
{
if(m==5 ||m==7 ||m==14 ||m==16 ||m==17 ||m==18
||m==20 ||m==21 ||m==22 ||m==25 ||m==26
||m==28 ||m==35||m==38||m==40||m==43||m==45||m==46
||m==47||m==48||m==49)
strcat(HelpString,HelpStringBuf[m]);
}
if(n>=count)
strcat(HelpString,HelpStringBuf[m]);
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -