Асемблери. Принципи написання та функціонування компіляторів програм, страница 5

                  if (az==2) n1=n1->next;

                  if (az==1) az++;i++;

                  if (strcmp(n1->name,buf)==0) {

                                 f3=i;break; }

                  if (az==0) { n1=n1->next;az++; }   } }

   if (f3==0 && r==3) {

       for (int j=5;j<18;j++) {

                     if (strcmp(reg[j],buf)==0) {

                                  f3=j;break; }   } }

   if (f3==0 && r==3) {

                  if (segsearch(buf)==1)   f3=10;   }

   if ((f3==0 && r==3)||(f2==0 && r==2)) {

               int er=1;  error(er,buf,str);sd++; }

   if (r==3 && sd==0)  CodeCmp(str);

   if ((f1==12 && r==1)||(f1==0)) {

                  CodeCmp(str);r=0;b=-1; }

   if (r==3) f1=f2=f3=r=0;   r++;az=0; }

void print(int sw,char *str,loadcode *k1,unsigned char w)

{

  nstr++;  switch (sw) {

  case 1 :  ///loop

     if (t<10){

   fprintf(file_w," %d %04X  %02X %02X\t\t%s\0", t++,disp,k1->code,w,str);}

     else{ fprintf(file_w,"%d %04X  %02X %02X\t\t%s\0",t++,disp,k1->code,w,str);}

     disp+=2;   break;

  case 2 : // data

     if (t<10){

    fprintf(file_w," %d %04X  %02X %04Xs\t%s\0", t++,disp,k1->code,disp,str);}

     else { fprintf(file_w,"%d %04X  %02X %04Xs\t%s\0", t++,disp,k1->code,disp,str);}

     disp+=3;               break;

  case 3 :///xor

     if (t<10){

   fprintf(file_w," %d %04X  %02X %02X\t\t%s\0", t++,disp,k1->code,w,str);}

     else { fprintf(file_w,"%d %04X  %02X %02X\t\t%s\0",t++,disp,k1->code,w,str);}

     disp+=2;   break;

  case 4 :  ///ds

     if (t<10){

   fprintf(file_w," %d %04X  %02X %02X\t\t%s\0", t++,disp,k1->code,w,str);}

     else { fprintf(file_w,"%d %04X  %02X %02X\t\t%s\0",t++,disp,k1->code,w,str);}

     disp+=2;   break;

  case 5 :  ///3 str mov

     if (t<10) {

    fprintf(file_w," %d %04X  %02X %02X %04Xr\t%s\0",t++,disp,k1->code,w,dis,str);}

     else { fprintf(file_w,"%d %04X  %02X %02X %04Xr\t%s\0",t++,disp,k1->code,w,n1->smesh,str);}

     disp+=4;     dis+=2;    break;

  case 6:

     if (t<10){

    fprintf(file_w," %d %04X\t\t\t%s\0",t++,0,str);}

     else { fprintf(file_w,"%d %04X\t\t\t%s\0", t++,disp,str);}

                  break;

  case 7 :///     dw

     if (t<10){

       if (strstr(str," db ")){

       fprintf(file_w," %d %04X %02X\t\t\t%s\0", t++,qw->smesh,ret->chislo,str);}

               else { fprintf(file_w," %d %04X %04X\t\t\t%s\0",t++,qw->smesh,ret->chislo,str);}}

     else {

       if (strstr(str," db ")){

                     fprintf(file_w,"%d %04X %02X\t\t\t%s\0",t++,qw->smesh,ret->chislo,str);}

       else { fprintf(file_w,"%d %04X %04X\t\t\t%s\0",t++,qw->smesh,ret->chislo,str);}}

                  break;

  case 8 :  ///end

     if (t<10){

                   fprintf(file_w," %d\t\t\t%s\0",t++,str);}

     else { fprintf(file_w,"%d\t\t\t%s\0",t++,str);}

                  break;

  case 9 :///ends

    if (t<10){

   fprintf(file_w," %d %04X\t\t\t%s\0", t++,disp,str);}

     else { fprintf(file_w,"%d %04X\t\t\t%s\0",t++,disp,str);}

                  disp=0;    break;

  case 10:///assume

     if (t<10){

   fprintf(file_w," %d %04X\t\t\t%s\0", t++,disp,str);}

     else { fprintf(file_w,"%d %04X\t\t\t%s\0",t++,disp,str);}

                  break;

   case 11:

     if (t<10){

                   fprintf(file_w," %d \t\t\t%s\0",t++,str);}

     else { fprintf(file_w,"%d \t\t\t%s\0",t++,str);}

                  break;

   case 12:

     if (t<10){

                   fprintf(file_w," %d\n",t++);}

     else { fprintf(file_w,"%d\n",t++);}

   break;

   }}

char genbyte2(char *str)

{

  int i=0,x=0,a=0,az=0,k=0;  unsigned char s=0, buf[15],fd[5],c=0,c1=0,w;  clearbuf;

  while (s!='\n') {

      if(f1==12) {

       w=0xff-(disp-offset+1);

       break;}  s=str[i];   i++;   if (s==';')break;