📄 daima.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 + -