Розробка програми-інтерпритатора, виконуючий розбір тексту ASM файлу на рівні команд, страница 2

             com[k]=buff[i]; //чтение команды

                       i++;k++;   };

             com[k]='\0';

             if (buff[i]!='\0'){

    while (buff[i]==' ') i++; //переход к операнду

       k=0;

     while (buff[i]!=' ' && buff[i]!='\0' && buff[i]!=','){

      op1[k]=buff[i];//чтение 1-го оп

                i++;k++;      };

                op1[k]='\0';

      if (!strcmp(op1,"db") || !strcmp(op1,"dw")) per=i; //если это переменная

                while (buff[i]==' ') i++;

      if (buff[i]!='\0'){

            k=0;i++;  while (buff[i]==' ') i++;

            while (buff[i]!=' ' && buff[i]!='\0'){

           op2[k]=buff[i];//чтение 2-го оп

           i++;k++; }; op2[k]='\0';  }  }

             if (!strcmp(op1,"db")){

                 while (buff[per]==' ') per++;i=0;

       while (buff[per]!='\0' && buff[per]!=' '){

      op2[i]=buff[per];     per++;i++;   };

      op2[i]='\0';      k=0;

      if (zn(op2)){

            convert(com);

            if (SearchPer(com)){

     puts("Duplicate variable name");

                scroll();      continue; }

 if (strcmp(op2,"0") || (strcmp(op2,"255")<=0)){

     current=new Reg(com,atoi(op2),head);

               head=current;   }

           else puts("Wrong value");    }

                scroll();     continue;  }

   if (!strcmp(op1,"dw")){

       while (buff[per]==' ') per++;i=0;              //если имеется 2-й операнд

       while (buff[per]!='\0' && buff[per]!=' '){     //то переход к нему

      op2[i]=buff[per];                       //и запись в op2

      per++;i++;      };  op2[i]='\0';   k=0;

      if (zn(op2)){

            convert(com);

            if (SearchPer(com)){  //если уже есть переменная с таким именем

                puts("Duplicate variable name");

                scroll();     continue; }

           if (strcmp(op2,"0") && (strcmp(op2,"65535")<=0)){  //если op2=[0...65535]

     current=new Reg(com,atoi(op2),head);

               head=current; }

           else puts("Wrong value");    }

                scroll();    continue;  }

             convert(op1);   convert(op2);

             if (!strcmp(com,"mov")){

                if (!strcmp(op1,"")){

  puts("Wrong parameter");  scroll();  continue;  }

                if (!strcmp(op2,"")){

  puts("Wrong parameter"); scroll();  continue;  }

      if (zn(op1)){ //число ли это

  puts("Wrong insruction"); scroll();     continue;  }

      if (zn(op2)){ //если op2 число, запись в регистр

  *Search(op1)=atoi(op2);  scroll();  continue;  }

      if (Search(op1)!=NULL && Search(op2)!=NULL){

  *Search(op1)=*Search(op2);    }

      else  puts("Wrong insruction");  scroll();

   continue;  }

             if (!strcmp(com,"add")){

                if (!strcmp(op1,"")){

  puts("Wrong parameter"); scroll();  continue;  }

                if (!strcmp(op2,"")){

  puts("Wrong parameter"); scroll(); continue;  }

      if (zn(op1)){

  puts("Wrong insruction");  scroll(); continue;  }

                if (zn(op2)){

  *Search(op1)+=atoi(op2); //op1=op1+op2

            scroll();  continue; }

      if (Search(op1)!=NULL && Search(op2)!=NULL){

            *Search(op1)+=*Search(op2);      }

     else puts("Wrong insruction");  scroll();