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

📄 daima.cpp

📁 实现编译
💻 CPP
字号:
#include "daima.h"

void CDaima::Gen(enum fct x,int y,int z)
{
	if (cx<CODE_SIZE)
	{
		code[cx].f=x;
		code[cx].l=y;
		code[cx].a=z;
		cx++;
	}
}
int CDaima::base(int l)
{
	int b1;
	b1=b;
	while (l>0)
	{
		b1=s[b1];
		l--;
	}
	return b1;
}
void CDaima::Interpret()
{
	int p,t;
	fct f;
	int l,a;

	t=0;b=1;p=0;
	s[1]=0;s[2]=0;s[3]=0;
	do{
		f=code[p].f;l=code[p].l;a=code[p].a;
		p++;
		switch (f)
		{
		case lit:
			s[++t]=a;
			break;
		case opr:
			switch (a)
			{
			case 0:
				t=b-1;
				p=s[t+3];
				b=s[t+2];
				break;
			case 1:
				s[t]=-s[t];
				break;
			case 2:	t--;
				s[t]=s[t]+s[t+1];
				break;
			case 3:	t--;
				s[t]=s[t]-s[t+1];
				break;
			case 4:	t--;
				s[t]=s[t]*s[t+1];
				break;
			case 5:	t--;
				s[t]=s[t]/s[t+1];
				break;
			case 6:
				s[t]=s[t]%2;
				break;
			case 8:	t--;
				s[t]=(s[t]==s[t+1]);
				break;
			case 9:	t--;
				s[t]=(s[t]!=s[t+1]);
				break;
			case 10: t--;
				s[t]=(s[t]<s[t+1]);
				break;
			case 11: t--;
				s[t]=(s[t]>=s[t+1]);
				break;
			case 12: t--;
				s[t]=(s[t]>s[t+1]);
				break;
			case 13: t--;
				s[t]=(s[t]<=s[t+1]);
				break;
			case 14:
				printf("%d\t",s[t]);
				break;
			case 15:
				printf("\n");
				break;
			case 16:
				t++;
				printf("?");
				scanf("%d",&s[t]);
				break;
			}
			break;
		case lod:
			t++;
			s[t]=s[base(l)+a];
			break;
		case sto:
			s[base(l)+a]=s[t];
			t--;
			break;
		case cal:
			s[t+1]=base(l);
			s[t+2]=b;
			s[t+3]=p;
			b=t+1;
			p=a;
			break;
		case intint:
			t+=a;break;
		case jmp:
			p=a;break;
		case jpc:
			if (s[t]==0) p=a;
			t--;
			break;
		}
	}while (p!=0);
}
void CDaima::ListCode()
{
	for (int i=0;i<cx;i++)
	{
		printf("%d\t",i);
		switch (code[i].f)
		{
		case lit:printf("lit\t");break;
		case lod:printf("lod\t");break;
		case sto:printf("sto\t");break;
		case cal:printf("cal\t");break;
		case intint:printf("int\t");break;
		case jmp:printf("jmp\t");break;
		case jpc:printf("jpc\t");break;
		case opr:printf("opr\t");break;
		}
		printf("%d\t%d\n",code[i].l,code[i].a);
	}
}

⌨️ 快捷键说明

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