?? 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 + -