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

📄 memory.cpp

📁 C++实现的模拟操作系统
💻 CPP
📖 第 1 页 / 共 3 页
字号:

	if(str.Left(3)=="mov")
	{
		str.Remove('m');
		str.Remove('o');
		str.Remove('v');
		str.Remove(' ');		
		di->strename="mov";

		if(str.Left(2)=="ax"&&str.Right(2)=="bx")
		{		
			di->iparstate[0]=2;
			di->iparstate[1]=2;
			di->iparstate[2]=2;
			di->strpar[0]="ax";
			di->strpar[1]="bx";
		}

		if(str.Left(2)=="ax"&&str.Right(2)=="cx")
		{		
			di->iparstate[0]=2;
			di->iparstate[1]=2;
			di->iparstate[2]=2;
			di->strpar[0]="ax";
			di->strpar[1]="cx";
		}

		if(str.Left(2)=="bx"&&str.Right(2)=="cx")
		{		
			di->iparstate[0]=2;
			di->iparstate[1]=2;
			di->iparstate[2]=2;
			di->strpar[0]="bx";
			di->strpar[1]="cx";
		}
		if(str.Left(2)=="bx"&&str.Right(2)=="ax")
		{		
			di->iparstate[0]=2;
			di->iparstate[1]=2;
			di->iparstate[2]=2;
			di->strpar[0]="bx";
			di->strpar[1]="ax";
		}
		if(str.Left(2)=="cx"&&str.Right(2)=="ax")
		{		
			di->iparstate[0]=2;
			di->iparstate[1]=2;
			di->iparstate[2]=2;
			di->strpar[0]="cx";
			di->strpar[1]="ax";
		}
		if(str.Left(2)=="cx"&&str.Right(2)=="bx")
		{		
			di->iparstate[0]=2;
			di->iparstate[1]=2;
			di->iparstate[2]=2;
			di->strpar[0]="cx";
			di->strpar[1]="bx";
		}
		if(str.Right(2)!="ax"&&str.Right(2)!="bx"&&str.Right(2)!="cx")
		{		
			di->iparstate[0]=2;
			di->iparstate[1]=2;
			di->iparstate[2]=1;
			if(str.Left(2)=="ax")
			{
				di->strpar[0]="ax";
				str.Remove('a');
				str.Remove('x');
				str.Remove(',');
				long lnum=atol(str);
				di->ipar[0]=(int)lnum;
			}
			if(str.Left(2)=="bx")
			{
				di->strpar[0]="bx";
				str.Remove('b');
				str.Remove('x');
				str.Remove(',');
				long lnum=atol(str);
				di->ipar[0]=(int)lnum;
			}
			if(str.Left(2)=="cx")
			{
				di->strpar[0]="cx";
				str.Remove('c');
				str.Remove('x');
				str.Remove(',');
				long lnum=atol(str);
				di->ipar[0]=(int)lnum;
			}
		}
	}

	if(!str.Compare("endl"))
	{
		di->strename="end";		
	}
	if(!str.Compare("needa")||!str.Compare("needb")||!str.Compare("needc")||!str.Compare("needabc"))
	{
		di->strename=str;		
	}
	if(!str.Compare("needab")||!str.Compare("needbc")||!str.Compare("needac"))
	{
		di->strename=str;		
	}

	if(!str.Compare("i++"))
	{
		di->strename="add";
		di->iparstate[0]=2;
		di->iparstate[1]=2;
		di->iparstate[2]=1;
		di->strpar[0]="ax";
		di->ipar[0]=1;			
	}

	if(str.Left(3)=="add")
	{
		str.Remove('a');
		str.Remove('d');
		str.Remove('d');
		str.Remove(' ');		
		di->strename="add";

		if(str.Left(2)=="ax"&&str.Right(2)=="bx")
		{		
			di->iparstate[0]=2;
			di->iparstate[1]=2;
			di->iparstate[2]=2;
			di->strpar[0]="ax";
			di->strpar[1]="bx";
		}

		if(str.Left(2)=="ax"&&str.Right(2)=="cx")
		{		
			di->iparstate[0]=2;
			di->iparstate[1]=2;
			di->iparstate[2]=2;
			di->strpar[0]="ax";
			di->strpar[1]="cx";
		}

		if(str.Left(2)=="bx"&&str.Right(2)=="cx")
		{		
			di->iparstate[0]=2;
			di->iparstate[1]=2;
			di->iparstate[2]=2;
			di->strpar[0]="bx";
			di->strpar[1]="cx";
		}
		if(str.Left(2)=="bx"&&str.Right(2)=="ax")
		{		
			di->iparstate[0]=2;
			di->iparstate[1]=2;
			di->iparstate[2]=2;
			di->strpar[0]="bx";
			di->strpar[1]="ax";
		}
		if(str.Left(2)=="cx"&&str.Right(2)=="ax")
		{		
			di->iparstate[0]=2;
			di->iparstate[1]=2;
			di->iparstate[2]=2;
			di->strpar[0]="cx";
			di->strpar[1]="ax";
		}
		if(str.Left(2)=="cx"&&str.Right(2)=="bx")
		{		
			di->iparstate[0]=2;
			di->iparstate[1]=2;
			di->iparstate[2]=2;
			di->strpar[0]="cx";
			di->strpar[1]="bx";
		}
		if(str.Right(2)!="ax"&&str.Right(2)!="bx"&&str.Right(2)!="cx")
		{		
			di->iparstate[0]=2;
			di->iparstate[1]=2;
			di->iparstate[2]=1;
			if(str.Left(2)=="ax")
			{
				di->strpar[0]="ax";
				str.Remove('a');
				str.Remove('x');
				str.Remove(',');
				long lnum=atol(str);
				di->ipar[0]=(int)lnum;
			}
			if(str.Left(2)=="bx")
			{
				di->strpar[0]="bx";
				str.Remove('b');
				str.Remove('x');
				str.Remove(',');
				long lnum=atol(str);
				di->ipar[0]=(int)lnum;
			}
			if(str.Left(2)=="cx")
			{
				di->strpar[0]="cx";
				str.Remove('c');
				str.Remove('x');
				str.Remove(',');
				long lnum=atol(str);
				di->ipar[0]=(int)lnum;
			}
		}
	}

	if(!str.Compare("i--"))
	{
		di->strename="sub";
		di->iparstate[0]=2;
		di->iparstate[1]=2;
		di->iparstate[2]=1;
		di->strpar[0]="ax";
		di->ipar[0]=1;			
	}

	if(str.Left(3)=="sub")
	{
		str.Remove('s');
		str.Remove('u');
		str.Remove('b');
		str.Remove(' ');		
		di->strename="sub";

		if(str.Left(2)=="ax"&&str.Right(2)=="bx")
		{		
			di->iparstate[0]=2;
			di->iparstate[1]=2;
			di->iparstate[2]=2;
			di->strpar[0]="ax";
			di->strpar[1]="bx";
		}

		if(str.Left(2)=="ax"&&str.Right(2)=="cx")
		{		
			di->iparstate[0]=2;
			di->iparstate[1]=2;
			di->iparstate[2]=2;
			di->strpar[0]="ax";
			di->strpar[1]="cx";
		}

		if(str.Left(2)=="bx"&&str.Right(2)=="cx")
		{		
			di->iparstate[0]=2;
			di->iparstate[1]=2;
			di->iparstate[2]=2;
			di->strpar[0]="bx";
			di->strpar[1]="cx";
		}
		if(str.Left(2)=="bx"&&str.Right(2)=="ax")
		{		
			di->iparstate[0]=2;
			di->iparstate[1]=2;
			di->iparstate[2]=2;
			di->strpar[0]="bx";
			di->strpar[1]="ax";
		}
		if(str.Left(2)=="cx"&&str.Right(2)=="ax")
		{		
			di->iparstate[0]=2;
			di->iparstate[1]=2;
			di->iparstate[2]=2;
			di->strpar[0]="cx";
			di->strpar[1]="ax";
		}
		if(str.Left(2)=="cx"&&str.Right(2)=="bx")
		{		
			di->iparstate[0]=2;
			di->iparstate[1]=2;
			di->iparstate[2]=2;
			di->strpar[0]="cx";
			di->strpar[1]="bx";
		}
		if(str.Right(2)!="ax"&&str.Right(2)!="bx"&&str.Right(2)!="cx")
		{		
			di->iparstate[0]=2;
			di->iparstate[1]=2;
			di->iparstate[2]=1;
			if(str.Left(2)=="ax")
			{
				di->strpar[0]="ax";
				str.Remove('a');
				str.Remove('x');
				str.Remove(',');
				long lnum=atol(str);
				di->ipar[0]=(int)lnum;
			}
			if(str.Left(2)=="bx")
			{
				di->strpar[0]="bx";
				str.Remove('b');
				str.Remove('x');
				str.Remove(',');
				long lnum=atol(str);
				di->ipar[0]=(int)lnum;
			}
			if(str.Left(2)=="cx")
			{
				di->strpar[0]="cx";
				str.Remove('c');
				str.Remove('x');
				str.Remove(',');
				long lnum=atol(str);
				di->ipar[0]=(int)lnum;
			}
		}
	}	

	if(str.Left(3)=="mul")
	{
		str.Remove('m');
		str.Remove('u');
		str.Remove('l');
		str.Remove(' ');		
		di->strename="mul";
		di->iparstate[0]=1;
		di->iparstate[1]=2;
		if(str.Right(2)=="bx")
		{
			di->strpar[0]="bx";

		}
		if(str.Right(2)=="cx")
		{
			di->strpar[0]="cx";

		}
	}

	if(str.Left(3)=="div")
	{
		str.Remove('d');
		str.Remove('i');
		str.Remove('v');
		str.Remove(' ');		
		di->strename="div";
		di->iparstate[0]=1;
		di->iparstate[1]=2;
		if(str.Right(2)=="bx")
		{
			di->strpar[0]="bx";

		}
		if(str.Right(2)=="cx")
		{
			di->strpar[0]="cx";

		}
	}	
	/*else
	{
		Error->Format("编译错误");
		return FALSE;
	}*/
	
	return TRUE;
}

Sprocess CMemory::CreateTran(CString str,CString *Error)          //创建编译进程
{
	int index;
	int strlenght=str.GetLength();
	Sprocess pro;
	CString s;
	int num=0;
	
	for(;strlenght>1;)
	{
		index=str.Find("\r\n");

		if(-1==index)
		{
			if(!Tran(str,&(pro.pdictate[num]),Error))
			{
				*Error="最后一句编译错误";
				return pro;
			}
			pro.idictatenum=num+1;
			pro.strname="进程";
			pro.isavereg[0]=pro.isavereg[1]=pro.isavereg[2]
				=pro.isavereg[3]=pro.isavereg[4]=0;
			pro.idictaterun=0;
			return pro;
		}
		else
		{
			s=str.Left(index);
			if(!Tran(s,&(pro.pdictate[num]),Error))
			{
				return pro;
			}

		}
		str.Delete(0,index+2);
		strlenght=str.GetLength();
		num++;
		
	}
	pro.idictatenum=num;
	pro.strname="进程";
	pro.isavereg[0]=pro.isavereg[1]=pro.isavereg[2]
		=pro.isavereg[3]=pro.isavereg[4]=0;
	pro.idictaterun=0;
	return pro;

}

⌨️ 快捷键说明

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