📄 memory.cpp
字号:
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 + -