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

📄 helprelated.cpp

📁 模拟了tec2000的所有功能
💻 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 + -