📄 2c4.c
字号:
#include<stdio.h>
#include<string.h>
#include<z8.h>
void com_mov(FILE *p,struct coms cms,struct dataseg dseg[64])
{unsigned int a=0,n=0,m=0;
int i,j,xz=0;
if(Is_char(cms.di[0])&&cms.di[1]==0)
{ /*res*/
if(Is_char(cms.si[0])&&cms.si[1]==0)
{a=0x40;m=bit_di(cms.di);
if(m<=0x38){n=bit_si(cms.si);if(n<=0x7){a=a+m+n;BYTE;return;}else xz=1;}
else xz=1;}if(xz==1)
{if(cms.di[0]=='a'||cms.di[0]=='A')
{
if(cms.si[0]=='r'||cms.si[0]=='R'){a=0x5fed;WORD;return;}
else if(cms.si[0]=='i'||cms.si[0]=='I'){a=0x57ed;WORD;return;}
else{PREC(cms.si);exit(0);}}
else if(cms.si[0]=='a'||cms.si[0]=='A')
{if(cms.di[0]=='r'||cms.di[0]=='R'){a=0x4fed;WORD;return;}
else if(cms.di[0]=='i'||cms.di[0]=='I'){a=0x47ed;WORD;return;}
else{PREC(cms.di);exit(0);}}else{PREC(cms.si);exit(0);}}
/*ljs*/
else if(cms.si[0]=='#'){a=0x6;m=bit_di(cms.di);a=a+m;BYTE;
for(i=0;Ture(cms.si[i]);i++)
{j=i+1;cms.si[i]=cms.si[j];}if(Is_num(cms.si[0]))
a=ljs(cms.si);
if(!(Is_num(cms.si[0]))){ i=find_da(dseg,cms.si);if(i==-1){PREC(cms.si);exit(0);}
a=dseg[i].data;}if(a>0xff){OVER(a);exit(0);}BYTE;return;}
/*mem*/
else if(cms.si[0]=='@')
{if(cms.di[0]!='a'&&cms.di[0]!='A'){PREC(cms.si);exit(0);}
a=0x3a;BYTE;for(i=0;Ture(cms.si[i]);i++)
{j=i+1;cms.si[i]=cms.si[j];}
/*ljs*/
if(Is_num(cms.si[0]))a=ljs(cms.si);
else {i=find_da(dseg,cms.si);if(i==-1){PREC(cms.si);exit(0);}
a=dseg[i].data;}WORD;return;}
/*res*//*HL*/
if(cms.si[0]=='('||cms.si[0]=='[')
{ for(i=1;Ture(cms.si[i])&&cms.si[i]!=')'&&cms.si[i]!=']';i++)
{j=i-1;cms.si[j]=cms.si[i];}cms.si[i-1]=0;
if((cms.si[0]=='h'||cms.si[0]=='H')&&(cms.si[1]=='l'||cms.si[1]=='L'))
{n=0x46;
m=bit_di(cms.di);if(n==0xff){PREC(cms.di);exit(0);}
a=a+m+n;BYTE;return;}
/*ix*/
if((cms.si[0]=='i'||cms.si[0]=='I')&&cms.si[1]!=0)
{if(cms.si[1]=='x'||cms.si[1]=='X')
{a=0xdd;BYTE;a=0x46;m=bit_di(cms.di);a=a+m;BYTE;
if(cms.si[2]=='+')
{j=0;
for(i=3;(Ture(cms.si[i]))&&cms.si[i]!=')'&&cms.si[i]!=']';i++)
{cms.si[j]=cms.si[i];j++;}cms.si[j]=0;
if(Is_num(cms.si[0]))a=ljs(cms.si);
else {i=find_da(dseg,cms.si);if(i==-1){PREC(cms.si);exit(0);}
a=dseg[i].data;}
if(a>0xff){OVER(a);exit(0);}}
else a=0;BYTE;return;}
/*iy*/
else if(cms.si[1]=='y'||cms.si[1]=='Y')
{a=0xfd;BYTE;a=0x46;m=bit_di(cms.di);a=a+m;BYTE;
if(cms.si[2]=='+')
{j=0;if(cms.si[3]==0)i=4;else i=3;
for(i=3;(Ture(cms.si[i]))&&cms.si[i]!=')'&&cms.si[i]!=']';i++)
{cms.si[j]=cms.si[i];j++;}cms.si[j]=0;
if(Is_num(cms.si[0]))a=ljs(cms.si);
else {i=find_da(dseg,cms.si);if(i==-1){PREC(cms.si);exit(0);}
a=dseg[i].data;}
if(a>0xff){OVER(a);exit(0);}}
else a=0;BYTE;return;}else {PREC(cms.si);exit(0);}
}
/*BC,DE*/
if(cms.di[0]=='a'||cms.di[0]=='A')
{if((cms.si[0]=='b'||cms.si[0]=='B')&&(cms.si[1]=='c'||cms.si[1]=='C'))
{a=0x0a; BYTE;return;}
if((cms.si[0]=='d'||cms.si[0]=='D')&&(cms.si[1]=='e'||cms.si[1]=='E'))
{a=0x1a;BYTE;return;} }}}
/*WORD MOV*/
else
if(Is_char(cms.di[0])&&Is_char(cms.di[1]))
{ if(cms.di[0]=='i'||cms.di[0]=='I')
{if(cms.di[1]=='x'||cms.di[1]=='X')
{a=0x21dd;WORD;if(cms.si[0]=='#'){for(i=0;Ture(cms.si[i]);i++)
{j=i+1;cms.si[i]=cms.si[j];}
if(Is_num(cms.si[0]))a=ljs(cms.si);
else {i=find_da(dseg,cms.si);if(i==-1){PREC(cms.si);exit(0);}
a=dseg[i].data;}WORD;return;}}
else if(cms.di[1]=='Y'||cms.di[1]=='y')
{a=0x21fd;WORD;if(cms.si[0]=='#'){for(i=0;Ture(cms.si[i]);i++)
{j=i+1;cms.si[i]=cms.si[j];}
if(Is_num(cms.si[0]))a=ljs(cms.si);
else {i=find_da(dseg,cms.si);if(i==-1){PREC(cms.si);exit(0);}
a=dseg[i].data;}WORD;return;}else{PREC(cms.di);exit(0);}}else{PREC(cms.di);exit(0);}}
/*sp*/
else if(strcmp(cms.di,"sp")==0||strcmp(cms.di,"SP")==0)
{if(strcmp(cms.si,"hl")==0||strcmp(cms.si,"HL")==0){a=0xf9;BYTE;return;}
else if(strcmp(cms.si,"ix")==0||strcmp(cms.si,"IX")==0){a=0xf9dd;WORD;return;}
else if(strcmp(cms.si,"IY")==0||strcmp(cms.si,"iy")==0){a=0xf9fd;WORD;return;}
}
/*ljs*/
if(cms.si[0]=='#')
{a=0x01;m=word_bit(cms.di);a=a+m;BYTE;
for(i=0;Ture(cms.si[i]);i++)
{j=i+1;cms.si[i]=cms.si[j];}
if(Is_num(cms.si[0]))a=ljs(cms.si);
else {i=find_da(dseg,cms.si);if(i==-1){PREC(cms.si);exit(0);}
a=dseg[i].data;}WORD;return;}
/*mem*/
else if(cms.si[0]=='@')
{a=0xed;BYTE;a=0x4b;m=word_bit(cms.di);
if(m==0xff){PREC(cms.di);exit(0);}a=a+m;BYTE;
for(i=0;Ture(cms.si[i]);i++)
{j=i+1;cms.si[i]=cms.si[j];}
if(Is_num(cms.si[0]))a=ljs(cms.si);
else {i=find_da(dseg,cms.si);if(i==-1){PREC(cms.si);exit(0);}
a=dseg[i].data;}WORD;return;}else{PREC(cms.si);exit(0);}}
/*reg>>mem*//*byte*/
else
if(cms.di[0]=='@')
{if((cms.si[0]=='a'||cms.si[0]=='A')&&cms.si[1]==0)
{a=0x32;BYTE;
for(i=0;Ture(cms.di[i]);i++)
{j=i+1;cms.di[i]=cms.di[j];}
if(Is_num(cms.di[0]))a=ljs(cms.di);
else {i=find_da(dseg,cms.di);if(i==-1){PREC(cms.di);exit(0);}
a=dseg[i].data;}WORD;return;}
/*word*/
else
if(Is_char(cms.si[0])&&Is_char(cms.si[1]))
{a=0xed;BYTE;a=0x43;m=word_bit(cms.si);
if(m==0xff){PREC(cms.si);exit(0);}a=a+m;BYTE;
for(i=0;Ture(cms.di[i]);i++)
{j=i+1;cms.di[i]=cms.di[j];}
if(Is_num(cms.di[0]))a=ljs(cms.di);
else {i=find_da(dseg,cms.di);if(i==-1){PREC(cms.di);exit(0);}
a=dseg[i].data;}WORD;return;}else{PREC(cms.si);exit(0);} }
/*regs*//*hl*/
else
if(cms.di[0]=='('||cms.di[0]=='[')
{for(i=0;Ture(cms.di[i])&&cms.di[i]!=')'&&cms.di[i]!=']';i++)
{j=i+1;cms.di[i]=cms.di[j];}cms.di[i-1]=0;
if(Is_char(cms.di[0]))
{a=0x40;m=bit_di(cms.di);
if(m!=0xff){n=bit_si(cms.si);if(n==0xff){PREC(cms.di);exit(0);}
a=a+m+n;BYTE;return;}}
/*BC,DE*/
if(m==0xff&&(cms.si[0]=='a'||cms.si[0]=='A'))
{if((cms.di[0]=='b'||cms.di[0]=='B')&&(cms.di[1]=='c'||cms.di[1]=='C'))
{a=0x02;BYTE;return;}
if((cms.di[0]=='d'||cms.di[0]=='D')&&(cms.di[1]=='e'||cms.di[1]=='E'))
{a=0x12;BYTE;return;}}
/*ix*/
if((cms.di[0]=='i'||cms.di[0]=='I')&&cms.di[1]!=0)
{if(cms.di[1]=='x'||cms.di[1]=='X')
{a=0xdd;BYTE;a=0x70;n=bit_si(cms.si);a=a+n;BYTE;
if(cms.di[2]=='+')
{j=0;if(cms.di[3]==0)i=4;else i=3;
for(;(Ture(cms.di[i]))&&cms.di[i]!=')'&&cms.di[i]!=']';i++)
{cms.di[j]=cms.di[i];j++;}cms.di[j]=0;
if(Is_num(cms.di[0]))a=ljs(cms.di);
else {i=find_da(dseg,cms.di);if(i==-1){PREC(cms.di);exit(0);}
a=dseg[i].data;}
if(a>0xff){OVER(a);exit(0);}}
else a=0;BYTE;return;}
/*iy*/
if(cms.di[1]=='y'||cms.di[1]=='Y')
{a=0xfd;BYTE;a=0x70;n=bit_si(cms.si);a=a+n;BYTE;
if(cms.di[2]=='+')
{j=0;if(cms.di[3]==0)i=4;else i=3;
for(i=3;(Ture(cms.di[i]))&&cms.di[i]!=')'&&cms.di[i]!=']';i++)
{cms.di[j]=cms.di[i];j++;}cms.di[j]=0;
if(Is_num(cms.di[0]))a=ljs(cms.di);
else {i=find_da(dseg,cms.di);if(i==-1){PREC(cms.di);exit(0);}
a=dseg[i].data;}
if(a>0xff){OVER(a);exit(0);}}
else a=0;BYTE;return;} printf("[%d]Error!",No-1);exit(0);}
printf("[%d]Error!",No-1);exit(0);}printf("[%d]Error!",No-1);exit(0);}
void com_push(FILE *p,struct coms cms)
{unsigned int a,m;
a=0xc5;m=word_bit(cms.di);if(m>0x30){PREC(cms.di);exit(0);}
a=a+m;BYTE;return;}
void com_pop(FILE *p,struct coms cms)
{unsigned int a,m;
a=0xc1;m=word_bit(cms.di);if(m>0x30){PREC(cms.di);exit(0);}
a=a+m;BYTE;return;}
void com_ex(FILE *p,struct coms cms)
{unsigned int a;
if(cms.com[2]=='x'||cms.com[2]=='X'){a=0xd9;BYTE;return;}
if(cms.di[0]=='('||cms.di[0]=='[')
{if(strcmp(cms.di,"(sp)")==0||strcmp(cms.di,"(SP)")==0
||strcmp(cms.di,"[sp]")==0||strcmp(cms.di,"[SP]")==0)
{if((cms.si[0]=='h'&&cms.si[1]=='l')||(cms.si[0]=='H'&&cms.si[1]=='L'))
{a=0xe3;BYTE;return;}
else if((cms.si[0]=='i'&&cms.si[1]=='x')||(cms.si[0]=='I'&&cms.si[1]=='X'))
{a=0xe3dd;WORD;return;}
else if((cms.si[0]=='i'&&cms.si[1]=='y')||(cms.si[0]=='I'&&cms.si[1]=='Y'))
{a=0xe3fd;WORD;return;}else{PREC(cms.si);exit(0);}}else{PREC(cms.di);exit(0);}}
else if((cms.di[0]=='d'&&cms.di[1]=='e')||(cms.di[0]=='D'&&cms.di[1]=='E'))
{if((cms.si[0]=='h'&&cms.si[1]=='l')||(cms.si[0]=='H'&&cms.si[1]=='L'))
{a=0xeb;BYTE;return;} else{PREC(cms.si);exit(0);}}
else if((cms.di[0]=='a'&&cms.di[1]=='f')||(cms.di[0]=='A'&&cms.di[1]=='F'))
{if(strcmp(cms.si,"a'f'")==0||strcmp(cms.si,"A'F'")==0)
{a=0x08;BYTE;return;} else{PREC(cms.si);exit(0);}}
else if(cms.si[0]=='('||cms.si[0]=='[')
{if(strcmp(cms.si,"(sp)")==0||strcmp(cms.si,"(SP)")==0
||strcmp(cms.si,"[sp]")==0||strcmp(cms.si,"[SP]")==0)
{if((cms.di[0]=='h'&&cms.di[1]=='l')||(cms.di[0]=='H'&&cms.di[1]=='L'))
{a=0xe3;BYTE;return;}
else if((cms.di[0]=='i'&&cms.di[1]=='x')||(cms.di[0]=='I'&&cms.di[1]=='X'))
{a=0xe3dd;WORD;return;}
else if((cms.di[0]=='i'&&cms.di[1]=='y')||(cms.di[0]=='I'&&cms.di[1]=='Y'))
{a=0xe3fd;WORD;return;}else{PREC(cms.di);exit(0);}}else{PREC(cms.si);exit(0);}}
else if((cms.si[0]=='d'&&cms.si[1]=='e')||(cms.si[0]=='D'&&cms.si[1]=='E'))
{if((cms.di[0]=='h'&&cms.di[1]=='l')||(cms.di[0]=='H'&&cms.di[1]=='L'))
{a=0xeb;BYTE;return;} else{PREC(cms.di);exit(0);}}
else if((cms.si[0]=='a'&&cms.si[1]=='f')||(cms.si[0]=='A'&&cms.si[1]=='F'))
{if(strcmp(cms.di,"a'f'")==0||strcmp(cms.di,"A'F'")==0)
{a=0x08;BYTE;return;} else{PREC(cms.di);exit(0);}}
else{PREC(cms.di);exit(0);}}
void com_ld(FILE *p,struct coms cms)
{ unsigned int a;
if(cms.com[2]=='i'||cms.com[2]=='I')
{if(cms.com[3]=='r'||cms.com[3]=='R'){a=0xb0ed;WORD;return;}
else if(cms.com[3]==0){a=0xa0ed;WORD;return;}
else{PREC(cms.com);exit(0);}}
else if(cms.com[2]=='d'||cms.com[2]=='D')
{if(cms.com[3]=='r'||cms.com[3]=='R'){a=0xb8ed;WORD;return;}
else if(cms.com[3]==0){a=0xa8ed;WORD;return;}
else{PREC(cms.com);exit(0);}}
else{PREC(cms.com);exit(0);}}
void com_cp(FILE *p,struct coms cms)
{ unsigned int a;
if(Is_char(cms.com[2]))
{if(cms.com[2]=='i'||cms.com[2]=='I')
{if(cms.com[3]=='r'||cms.com[3]=='R'){a=0xb1ed;WORD;return;}
else if(cms.com[3]==0){a=0xa1ed;WORD;return;}
else{PREC(cms.com);exit(0);}}
else if(cms.com[2]=='d'||cms.com[2]=='D')
{if(cms.com[3]=='r'||cms.com[3]=='R'){a=0xb9ed;WORD;return;}
else if(cms.com[3]==0){a=0xa9ed;WORD;return;}
else{PREC(cms.com);exit(0);}}
else if(cms.com[2]=='l'||cms.com[2]=='L'){a=0x2f;BYTE;return;}}
PREC(cms.com);exit(0);}
void com_cmp(FILE *p,struct coms cms,struct dataseg dseg[64])
{unsigned int a,n;
int i,j;
if(Is_char(cms.di[0])){a=0xb8;n=bit_si(cms.di);
if(n<=0x7){a=a+n;BYTE;return;}else {PREC(cms.di);exit(0);}}
else if(cms.di[0]=='#')
{a=0xfe;BYTE;
for(i=0;Ture(cms.di[i]);i++)
{j=i+1;cms.di[i]=cms.di[j];}
if(Is_num(cms.di[0])){a=ljs(cms.di);
if(a>0xff){OVER(a);exit(0);}else{BYTE;return;}}
else{i=find_da(dseg,cms.di);if(i==-1){PREC(cms.di);exit(0);}
a=dseg[i].data;if(a>0xff){OVER(a);exit(0);} BYTE;return;}}
else
if(cms.di[0]=='('||cms.di[0]=='[')
{for(i=1;Ture(cms.di[i])&&cms.di[i]!=')'&&cms.di[i]!=']';i++)
{j=i-1;cms.di[j]=cms.di[i];}cms.di[i-1]=0;
if((cms.di[0]=='h'||cms.di[0]=='H')&&(cms.di[1]=='l'||cms.di[1]=='L'))
{a=0xbe;BYTE;return;}
else if(cms.di[0]=='i'||cms.di[0]=='I')
{if(cms.di[1]=='x'||cms.di[1]=='X')
{a=0xbedd;WORD;if(cms.di[2]=='+')
{j=0;
for(i=3;(Ture(cms.di[i]))&&cms.di[i]!=')'&&cms.di[i]!=']';i++,j++)
{cms.di[j]=cms.di[i];}cms.di[j]=0;
if(Is_num(cms.di[0]))a=ljs(cms.di);
else {i=find_da(dseg,cms.di);if(i==-1){PREC(cms.si);exit(0);}
a=dseg[i].data;}
if(a>0xff){OVER(a);exit(0);}}
else a=0;BYTE;return;}
else if(cms.di[1]=='y'||cms.di[1]=='Y')
{a=0xbefd;WORD;if(cms.di[2]=='+')
{j=0;
for(i=3;(Ture(cms.di[i]))&&cms.di[i]!=')'&&cms.di[i]!=']';i++,j++)
{cms.di[j]=cms.di[i];}cms.di[j]=0;
if(Is_num(cms.di[0]))a=ljs(cms.di);
else {i=find_da(dseg,cms.di);if(i==-1){PREC(cms.di);exit(0);}
a=dseg[i].data;}
if(a>0xff){OVER(a);exit(0);}}
else a=0;BYTE;return;}
else{PREC(cms.di);exit(0);}}else{PREC(cms.di);exit(0);}
}}
void com_in(FILE *p,struct coms cms,struct dataseg dseg[64])
{unsigned int a,m;
int i,j;
if(cms.com[2]==0)
{if(cms.si[0]=='@'&&(cms.di[0]=='a'||cms.di[0]=='A'))
{a=0xdb;BYTE;
for(i=0;Ture(cms.si[i]);i++)
{j=i+1;cms.si[i]=cms.si[j];}
if(Is_num(cms.si[0]))a=ljs(cms.si);
else {i=find_da(dseg,cms.si);if(i==-1){PREC(cms.si);exit(0);}
a=dseg[i].data;}if(a>0xff){PREC(cms.si);exit(0);}BYTE;return;}
else if((cms.si[0]=='['||cms.si[0]=='(')&&(cms.si[1]=='c'||cms.si[1]=='C'))
{a=0xed;BYTE;a=0x40;m=bit_di(cms.di);if(m!=0xff){a=a+m;BYTE;return;}
printf("[%d]Error!",No-1);exit(0);}}
else if(cms.com[2]=='i'||cms.com[2]=='I')
{if(cms.com[3]=='r'||cms.com[3]=='R'){a=0xb2ed;WORD;return;}
else if(cms.com[3]==0){a=0xa2ed;WORD;return;}else{PREC(cms.com);exit(0);}}
else if(cms.com[2]=='d'||cms.com[2]=='D')
{if(cms.com[3]=='r'||cms.com[3]=='R'){a=0xbaed;WORD;return;}
else if(cms.com[3]==0){a=0xaaed;WORD;return;}else {PREC(cms.com);exit(0);}}
printf("[%d]Error!",No-1);exit(0);}
void com_out(FILE *p,struct coms cms,struct dataseg dseg[64])
{unsigned int a,m;
int i,j;
if(cms.com[3]==0)
{if(cms.di[0]=='@'&&(cms.si[0]=='a'||cms.si[0]=='A'))
{a=0xd3;BYTE;
for(i=0;Ture(cms.di[i]);i++)
{j=i+1;cms.di[i]=cms.di[j];}
if(Is_num(cms.di[0]))a=ljs(cms.di);
else {i=find_da(dseg,cms.di);if(i==-1){PREC(cms.di);exit(0);}
a=dseg[i].data;}if(a>0xff){PREC(cms.di);exit(0);}BYTE;return;}
else if((cms.di[0]=='['||cms.di[0]=='(')&&(cms.di[1]=='c'||cms.di[1]=='C'))
{a=0xed;BYTE;a=0x41;m=bit_di(cms.si);
if(m!=0xff){a=a+m;BYTE;return;}
printf("[%d]Error!",No-1);exit(0);}}
else if(cms.com[3]=='i'||cms.com[3]=='I')
{if(cms.com[4]=='r'||cms.com[4]=='R'){a=0xb3ed;WORD;return;}
else if(cms.com[4]==0){a=0xa3ed;WORD;return;}else{PREC(cms.com);exit(0);}}
else if(cms.com[3]=='d'||cms.com[3]=='D')
{if(cms.com[4]=='r'||cms.com[4]=='R'){a=0xbbed;WORD;return;}
else if(cms.com[4]==0){a=0xabed;WORD;return;}else {PREC(cms.com);exit(0);}}
printf("[%d]Error!",No-1);exit(0);}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -