
- •Введение
- •2 Описание архитектуры микроэвм
- •Ряд команд не имеют аргументов и состоят только из кода операции, например, останов, сброс и установка флагов.
- •Описание системы команд и режимов адресации
- •3 Описание языка мнемокода
- •3.2 Разделы ассемблера
- •3.2.1 Алфавит
- •3.3 Описание структур данных модуля
- •4 Алгоритм трансляции
- •5 Описание объектного кода
- •6 Описание программного продукта
- •Приложение а
- •А.4 Основные этапы разработки
А.4 Основные этапы разработки
Этапы разработки ПП представлены в таблице А.4.1.
Таблица А.4.1- Этапы разработки ПП
№ |
Этапы работы |
Срок выполнения (недели) |
1. |
Изучение архитектуры микроЭВМ |
1-2 |
2. |
Разработка системы команд микроЭВМ. |
3 |
3. |
Разработка мнемокода. |
4 |
4. |
Разработка тестового примера на мнемокоде. |
5 |
5. |
Ручная трансляция программы на мнемокоде. |
6-7 |
6. |
Разработка и написание программы транслятора. |
8-10 |
7. |
Оформление документации. |
11 |
8. |
Защита курсового проекта |
12 |
ПРИЛОЖЕНИЕ Б
РУКОВОДСТВО ПОЛЬЗОВАТЕЛЯ
Для работы с программой необходимо предварительно написать текстовый файл с исходным текстом транслируемой программы. После этого нужно запустить файл Cross_asm.exe. Далее необходимо ввести путь транслируемого ASM-файла.
Транслятор в качестве результатов своей работы генерирует объектный файл с именем исходного файла и расширением .OBJ, находящийся в той же папке что и транслируемый ASM-файл.
ПРИЛОЖЕНИЕ В
ЛИСТИНГ ПРОГРАММЫ
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<math.h>
typedef char string[20];
char c=' ',*pos,*temp,k1[6],k2[5],k3[5],ha,da;
char t1[5],t2[5],t3[5],t4[5],h[19],d[173],r[73],t[69],m[69],e[7];
string str,st1,st2,st3,per[10][2],label[10][2],name,codp,ptemp;
int n1,n2,l,i,adr=0,flag=0;
int k_p=0,k_m=0;
//**************вхожд***************
int incoming(string st)
{int f=0;
for(i=0;i<k_p;i++)
{
if(strcmp(per[i][0],st)==NULL)
{f=1;}
}
if(f==1){return 1;}
{return 0;}
}
//*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-
//************BIN->DEC************
int perev(string a)
{
int d=0,i,j=0;
for(i=strlen(a);i>0;i--)
{
if(a[i-1]=='1'){d+=pow(2,j);}
j++;
}
return d;
}
//*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-
main(int argc, char *args[])
{
FILE *std,*obj;
char v[20];
if(argc==2)
{
if((std=fopen(args[1],"r"))==NULL)
{
puts("file err");
return 1;
}
strcpy(m,"m");
strcpy(d,"d");
while(!feof(std))
{
fgets(str,20,std);
strcpy(st1,str);
pos=strchr(st1,c);
*pos='\0';
strcpy(st2,str);
temp=st2;
pos=strchr(st2,c);
temp=pos+1;
strcpy(st2,temp);
pos=strchr(st2,c);
*pos='\0';
strcpy(st3,str);
temp=st3;
pos=strchr(temp,c);
temp=pos+1;
pos=strchr(temp,c);
temp=pos+1;
pos=strchr(temp,c);
*pos='\0';
if(st1[strlen(st1)-2]==':')
{
da=adr;
temp[0]=da;
temp[1]='\0';
strcpy(label[k_m][0],st1);
strcpy(label[k_m][1],temp);
k_m++;
}
if(strcmp(st1,".DB")==NULL)
{
strcat(d,st2);
l=strlen(st2);
for(i=1;i<=(6-l);i++)
strcat(d," ");
da=adr;
temp[0]=da;
temp[1]='\0';
strcat(d,temp);
strcpy(ptemp,"[");
strcat(ptemp,st2);
strcat(ptemp,"]");
strcpy(per[k_p][0],ptemp);
strcpy(per[k_p][1],temp);
k_p++;
}
adr++;
}
fclose(std);
std=fopen("c:\\users\\dima\\1.asm","r");
adr=0;
while(!feof(std))
{
fgets(str,20,std);
strcpy(st1,str);
pos=strchr(st1,c);
*pos='\0';
strcpy(st2,str);
temp=st2;
pos=strchr(st2,c);
temp=pos+1;
strcpy(st2,temp);
pos=strchr(st2,c);
*pos='\0';
strcpy(st3,str);
temp=st3;
pos=strchr(temp,c);
temp=pos+1;
pos=strchr(temp,c);
temp=pos+1;
pos=strchr(temp,c);
*pos='\0';
strcpy(st3,temp);
if(strcmp(st1,".ПРОЦ")==NULL)
{strcpy(name,st2);
strcpy(h,"");
strcat(h,"h");
strcat(h,st2);
l=strlen(st2);
for(i=1;i<=(6-l);i++)
strcat(h," ");
ha=perev("000000");
temp[0]=ha;
temp[1]='\0';
strcat(h,temp);
strcat(h,"");
flag=0;
}
adr++;
if(strcmp(st1,"ПЕР")==NULL)
{
if(flag==0)
{
strcpy(t,"t");
da=adr;
temp[0]=da;
temp[1]='\0';
strcat(t,temp);
strcat(t,"¶");
strcpy(e,"e");
strcat(e,temp);
}
flag=1;
*t1=st2[0];*t2=st3[0];
t1[1]='\0';
t2[1]='\0';
if((strcmp(t1,"R")==NULL) && (strcmp(t2,"R")==NULL) )
{ *t3=st2[1];
t3[1]='\0';
n1=atoi(t3);
strcpy(k1,"000000");
switch(n1){
case 0:{strcpy(k2,"000");break;}
case 1:{strcpy(k2,"001");break;}
case 2:{strcpy(k2,"010");break;}
case 3:{strcpy(k2,"011");break;}
case 4:{strcpy(k2,"100");break;}
case 5:{strcpy(k2,"101");break;}
case 6:{strcpy(k2,"110");break;}
case 7:{strcpy(k2,"111");break;}
}
*t3=st3[1];
t3[1]='\0';
n2=atoi(t3);
switch(n2){
case 0:{strcpy(k3,"000");break;}
case 1:{strcpy(k3,"001");break;}
case 2:{strcpy(k3,"010");break;}
case 3:{strcpy(k3,"011");break;}
case 4:{strcpy(k3,"100");break;}
case 5:{strcpy(k3,"101");break;}
case 6:{strcpy(k3,"110");break;}
case 7:{strcpy(k3,"111");break;}
}
}
if((strcmp(t1,"R")==NULL) && (incoming(st3)==1) )
{ *t3=st2[1];
t3[1]='\0';
n1=atoi(t3);
strcpy(k1,"101000");
switch(n1){
case 0:{strcpy(k2,"000");break;}
case 1:{strcpy(k2,"001");break;}
case 2:{strcpy(k2,"010");break;}
case 3:{strcpy(k2,"011");break;}
case 4:{strcpy(k2,"100");break;}
case 5:{strcpy(k2,"101");break;}
case 6:{strcpy(k2,"110");break;}
case 7:{strcpy(k2,"111");break;}
}
for(int l=0;i<k_p;i++)
{
if(strcmp(per[l][0],st3)==NULL)
{strcpy(k3,per[l][1]);}
}
da=adr;
temp[0]=da;
temp[1]='\0';
strcat(m,temp);
da=2;
temp[0]=da;
temp[1]='\0';
strcat(m,temp);
strcat(m,"+");
strcat(m,name);
l=strlen(name);
for(i=1;i<=(6-l);i++)
strcat(m," ");
}
if((strcmp(t2,"R")==NULL) && (incoming(st2)==1) )
{ *t3=st2[1];
t3[1]='\0';
n1=atoi(t3);
strcpy(k1,"101000");
switch(n1){
case 0:{strcpy(k3,"000");break;}
case 1:{strcpy(k3,"001");break;}
case 2:{strcpy(k3,"010");break;}
case 3:{strcpy(k3,"011");break;}
case 4:{strcpy(k3,"100");break;}
case 5:{strcpy(k3,"101");break;}
case 6:{strcpy(k3,"110");break;}
case 7:{strcpy(k3,"111");break;}
}
for(int l=0;i<k_p;i++)
{
if(strcmp(per[l][0],st2)==NULL)
{strcpy(k2,per[l][1]);}
}
da=adr;
temp[0]=da;
temp[1]='\0';
strcat(m,temp);
da=2;
temp[0]=da;
temp[1]='\0';
strcat(m,temp);
strcat(m,"+");
strcat(m,name);
l=strlen(name);
for(i=1;i<=(6-l);i++)
strcat(m," ");
}
if((strcmp(t1,"I")==NULL) && (strcmp(t2,"R")==NULL) )
{
strcpy(k1,"000001");
strcpy(k2,"01");
*t3=st3[1];
t3[1]='\0';
n2=atoi(t3);
switch(n2){
case 0:{strcpy(k3,"000");break;}
case 1:{strcpy(k3,"001");break;}
case 2:{strcpy(k3,"010");break;}
case 3:{strcpy(k3,"011");break;}
case 4:{strcpy(k3,"100");break;}
case 5:{strcpy(k3,"101");break;}
case 6:{strcpy(k3,"110");break;}
case 7:{strcpy(k3,"111");break;}
}
}
if((strcmp(t1,"R")==NULL) && (strcmp(t2,"I")==NULL) )
{
strcpy(k1,"000010");
strcpy(k3,"01");
*t3=st2[1];
t3[1]='\0';
n2=atoi(t3);
switch(n2){
case 0:{strcpy(k2,"000");break;}
case 1:{strcpy(k2,"001");break;}
case 2:{strcpy(k2,"010");break;}
case 3:{strcpy(k2,"011");break;}
case 4:{strcpy(k2,"100");break;}
case 5:{strcpy(k2,"101");break;}
case 6:{strcpy(k2,"110");break;}
case 7:{strcpy(k2,"111");break;}
}
}
if((strcmp(t1,"R")==NULL) && ((strcmp(t2,"A")==NULL)||(strcmp(t2,"S")==NULL)))
{
strcpy(k1,"000011");
*t3=st2[1];
t3[1]='\0';
n2=atoi(t3);
switch(n2){
case 0:{strcpy(k2,"000");break;}
case 1:{strcpy(k2,"001");break;}
case 2:{strcpy(k2,"010");break;}
case 3:{strcpy(k2,"011");break;}
case 4:{strcpy(k2,"100");break;}
case 5:{strcpy(k2,"101");break;}
case 6:{strcpy(k2,"110");break;}
case 7:{strcpy(k2,"111");break;}
}
if (strcmp(t2,"A")==NULL){strcpy(k3,"00");}
else {strcpy(k3,"10");}
}
if((strcmp(t2,"A")==NULL) && ((strcmp(t1,"I")==NULL)||(strcmp(t1,"S")==NULL)))
{
strcpy(k1,"000100");
strcpy(k2,"00");
if (strcmp(t2,"I")==NULL){strcpy(k3,"01");}
else {strcpy(k3,"10");}
}
if((strcmp(t2,"R")==NULL) && ((strcmp(t1,"I")==NULL)||(strcmp(t1,"S")==NULL)))
{
strcpy(k1,"000101");
*t3=st3[1];
t3[1]='\0';
n2=atoi(t3);
switch(n2){
case 0:{strcpy(k3,"000");break;}
case 1:{strcpy(k3,"001");break;}
case 2:{strcpy(k3,"010");break;}
case 3:{strcpy(k3,"011");break;}
case 4:{strcpy(k3,"100");break;}
case 5:{strcpy(k3,"101");break;}
case 6:{strcpy(k3,"110");break;}
case 7:{strcpy(k3,"111");break;}
}
if (strcmp(t1,"I")==NULL){strcpy(k2,"01");}
else {strcpy(k2,"10");}
}
ha=perev(k1);
temp[0]=ha;
temp[1]='\0';
strcat(t,temp);
ha=perev(k2);
temp[0]=ha;
temp[1]='\0';
strcat(t,temp);
ha=perev(k3);
temp[0]=ha;
temp[1]='\0';
strcat(t,temp);
}
if(strcmp(st1,"ДОБ")==NULL)
{
if(flag==0)
{
strcpy(t,"t");
da=adr;
temp[0]=da;
temp[1]='\0';
strcat(t,temp);
strcat(t,"¶");
strcpy(e,"e");
strcat(e,temp);
}
flag=1;
*t1=st2[0];*t2=st3[0];
t1[1]='\0';
t2[1]='\0';
if((strcmp(t1,"R")==NULL) && (strcmp(t2,"R")==NULL) )
{ *t3=st2[1];
t3[1]='\0';
n1=atoi(t3);
strcpy(k1,"000110");
switch(n1){
case 0:{strcpy(k2,"000");break;}
case 1:{strcpy(k2,"001");break;}
case 2:{strcpy(k2,"010");break;}
case 3:{strcpy(k2,"011");break;}
case 4:{strcpy(k2,"100");break;}
case 5:{strcpy(k2,"101");break;}
case 6:{strcpy(k2,"110");break;}
case 7:{strcpy(k2,"111");break;}
}
*t3=st3[1];
t3[1]='\0';
n2=atoi(t3);
switch(n2){
case 0:{strcpy(k3,"000");break;}
case 1:{strcpy(k3,"001");break;}
case 2:{strcpy(k3,"010");break;}
case 3:{strcpy(k3,"011");break;}
case 4:{strcpy(k3,"100");break;}
case 5:{strcpy(k3,"101");break;}
case 6:{strcpy(k3,"110");break;}
case 7:{strcpy(k3,"111");break;}
}
}
if((strcmp(t1,"S")==NULL) && (strcmp(t2,"R")==NULL) )
{
strcpy(k1,"000111");
strcpy(k2,"10");
*t3=st3[1];
t3[1]='\0';
n2=atoi(t3);
switch(n2){
case 0:{strcpy(k3,"000");break;}
case 1:{strcpy(k3,"001");break;}
case 2:{strcpy(k3,"010");break;}
case 3:{strcpy(k3,"011");break;}
case 4:{strcpy(k3,"100");break;}
case 5:{strcpy(k3,"101");break;}
case 6:{strcpy(k3,"110");break;}
case 7:{strcpy(k3,"111");break;}
}
}
ha=perev(k1);
temp[0]=ha;
temp[1]='\0';
strcat(t,temp);
ha=perev(k2);
temp[0]=ha;
temp[1]='\0';
strcat(t,temp);
ha=perev(k3);
temp[0]=ha;
temp[1]='\0';
strcat(t,temp);
}
if(strcmp(st1,"ДОЗ")==NULL)
{
if(flag==0)
{
strcpy(t,"t");
da=adr;
temp[0]=da;
temp[1]='\0';
strcat(t,temp);
strcat(t,"¶");
strcpy(e,"e");
strcat(e,temp);
}
flag=1;
*t1=st2[0];*t2=st3[0];
t1[1]='\0';
t2[1]='\0';
if((strcmp(t1,"R")==NULL) && (strcmp(t2,"R")==NULL) )
{ *t3=st2[1];
t3[1]='\0';
n1=atoi(t3);
strcpy(k1,"001000");
switch(n1){
case 0:{strcpy(k2,"000");break;}
case 1:{strcpy(k2,"001");break;}
case 2:{strcpy(k2,"010");break;}
case 3:{strcpy(k2,"011");break;}
case 4:{strcpy(k2,"100");break;}
case 5:{strcpy(k2,"101");break;}
case 6:{strcpy(k2,"110");break;}
case 7:{strcpy(k2,"111");break;}
}
*t3=st3[1];
t3[1]='\0';
n2=atoi(t3);
switch(n2){
case 0:{strcpy(k3,"000");break;}
case 1:{strcpy(k3,"001");break;}
case 2:{strcpy(k3,"010");break;}
case 3:{strcpy(k3,"011");break;}
case 4:{strcpy(k3,"100");break;}
case 5:{strcpy(k3,"101");break;}
case 6:{strcpy(k3,"110");break;}
case 7:{strcpy(k3,"111");break;}
}
}
if((strcmp(t1,"S")==NULL) && (strcmp(t2,"R")==NULL) )
{
strcpy(k1,"001001");
strcpy(k2,"10");
*t3=st3[1];
t3[1]='\0';
n2=atoi(t3);
switch(n2){
case 0:{strcpy(k3,"000");break;}
case 1:{strcpy(k3,"001");break;}
case 2:{strcpy(k3,"010");break;}
case 3:{strcpy(k3,"011");break;}
case 4:{strcpy(k3,"100");break;}
case 5:{strcpy(k3,"101");break;}
case 6:{strcpy(k3,"110");break;}
case 7:{strcpy(k3,"111");break;}
}
}
ha=perev(k1);
temp[0]=ha;
temp[1]='\0';
strcat(t,temp);
ha=perev(k2);
temp[0]=ha;
temp[1]='\0';
strcat(t,temp);
ha=perev(k3);
temp[0]=ha;
temp[1]='\0';
strcat(t,temp);
}
if(strcmp(st1,"ВЫЧ")==NULL)
{
if(flag==0)
{
strcpy(t,"t");
da=adr;
temp[0]=da;
temp[1]='\0';
strcat(t,temp);
strcat(t,"¶");
strcpy(e,"e");
strcat(e,temp);
}
flag=1;
*t1=st2[0];*t2=st3[0];
t1[1]='\0';
t2[1]='\0';
if((strcmp(t1,"R")==NULL) && (strcmp(t2,"R")==NULL) )
{ *t3=st2[1];
t3[1]='\0';
n1=atoi(t3);
strcpy(k1,"001010");
switch(n1){
case 0:{strcpy(k2,"000");break;}
case 1:{strcpy(k2,"001");break;}
case 2:{strcpy(k2,"010");break;}
case 3:{strcpy(k2,"011");break;}
case 4:{strcpy(k2,"100");break;}
case 5:{strcpy(k2,"101");break;}
case 6:{strcpy(k2,"110");break;}
case 7:{strcpy(k2,"111");break;}
}
*t3=st3[1];
t3[1]='\0';
n2=atoi(t3);
switch(n2){
case 0:{strcpy(k3,"000");break;}
case 1:{strcpy(k3,"001");break;}
case 2:{strcpy(k3,"010");break;}
case 3:{strcpy(k3,"011");break;}
case 4:{strcpy(k3,"100");break;}
case 5:{strcpy(k3,"101");break;}
case 6:{strcpy(k3,"110");break;}
case 7:{strcpy(k3,"111");break;}
}
}
if((strcmp(t1,"S")==NULL) && (strcmp(t2,"R")==NULL) )
{
strcpy(k1,"001011");
strcpy(k2,"10");
*t3=st3[1];
t3[1]='\0';
n2=atoi(t3);
switch(n2){
case 0:{strcpy(k3,"000");break;}
case 1:{strcpy(k3,"001");break;}
case 2:{strcpy(k3,"010");break;}
case 3:{strcpy(k3,"011");break;}
case 4:{strcpy(k3,"100");break;}
case 5:{strcpy(k3,"101");break;}
case 6:{strcpy(k3,"110");break;}
case 7:{strcpy(k3,"111");break;}
}
}
ha=perev(k1);
temp[0]=ha;
temp[1]='\0';
strcat(t,temp);
ha=perev(k2);
temp[0]=ha;
temp[1]='\0';
strcat(t,temp);
ha=perev(k3);
temp[0]=ha;
temp[1]='\0';
strcat(t,temp);
}
if(strcmp(st1,"ВЫЗ")==NULL)
{
if(flag==0)
{
strcpy(t,"t");
da=adr;
temp[0]=da;
temp[1]='\0';
strcat(t,temp);
strcat(t,"¶");
strcpy(e,"e");
strcat(e,temp);
}
flag=1;
*t1=st2[0];*t2=st3[0];
t1[1]='\0';
t2[1]='\0';
if((strcmp(t1,"R")==NULL) && (strcmp(t2,"R")==NULL) )
{ *t3=st2[1];
t3[1]='\0';
n1=atoi(t3);
strcpy(k1,"001100");
switch(n1){
case 0:{strcpy(k2,"000");break;}
case 1:{strcpy(k2,"001");break;}
case 2:{strcpy(k2,"010");break;}
case 3:{strcpy(k2,"011");break;}
case 4:{strcpy(k2,"100");break;}
case 5:{strcpy(k2,"101");break;}
case 6:{strcpy(k2,"110");break;}
case 7:{strcpy(k2,"111");break;}
}
*t3=st3[1];
t3[1]='\0';
n2=atoi(t3);
switch(n2){
case 0:{strcpy(k3,"000");break;}
case 1:{strcpy(k3,"001");break;}
case 2:{strcpy(k3,"010");break;}
case 3:{strcpy(k3,"011");break;}
case 4:{strcpy(k3,"100");break;}
case 5:{strcpy(k3,"101");break;}
case 6:{strcpy(k3,"110");break;}
case 7:{strcpy(k3,"111");break;}
}
}
if((strcmp(t1,"S")==NULL) && (strcmp(t2,"R")==NULL) )
{
strcpy(k1,"001101");
strcpy(k2,"10");
*t3=st3[1];
t3[1]='\0';
n2=atoi(t3);
switch(n2){
case 0:{strcpy(k3,"000");break;}
case 1:{strcpy(k3,"001");break;}
case 2:{strcpy(k3,"010");break;}
case 3:{strcpy(k3,"011");break;}
case 4:{strcpy(k3,"100");break;}
case 5:{strcpy(k3,"101");break;}
case 6:{strcpy(k3,"110");break;}
case 7:{strcpy(k3,"111");break;}
}
}
ha=perev(k1);
temp[0]=ha;
temp[1]='\0';
strcat(t,temp);
ha=perev(k2);
temp[0]=ha;
temp[1]='\0';
strcat(t,temp);
ha=perev(k3);
temp[0]=ha;
temp[1]='\0';
strcat(t,temp);
}
if(strcmp(st1,"И")==NULL)
{
if(flag==0)
{
strcpy(t,"t");
da=adr;
temp[0]=da;
temp[1]='\0';
strcat(t,temp);
strcat(t,"¶");
strcpy(e,"e");
strcat(e,temp);
}
flag=1;
*t1=st2[0];*t2=st3[0];
t1[1]='\0';
t2[1]='\0';
if((strcmp(t1,"R")==NULL) && (strcmp(t2,"R")==NULL) )
{ *t3=st2[1];
t3[1]='\0';
n1=atoi(t3);
strcpy(k1,"001110");
switch(n1){
case 0:{strcpy(k2,"000");break;}
case 1:{strcpy(k2,"001");break;}
case 2:{strcpy(k2,"010");break;}
case 3:{strcpy(k2,"011");break;}
case 4:{strcpy(k2,"100");break;}
case 5:{strcpy(k2,"101");break;}
case 6:{strcpy(k2,"110");break;}
case 7:{strcpy(k2,"111");break;}
}
*t3=st3[1];
t3[1]='\0';
n2=atoi(t3);
switch(n2){
case 0:{strcpy(k3,"000");break;}
case 1:{strcpy(k3,"001");break;}
case 2:{strcpy(k3,"010");break;}
case 3:{strcpy(k3,"011");break;}
case 4:{strcpy(k3,"100");break;}
case 5:{strcpy(k3,"101");break;}
case 6:{strcpy(k3,"110");break;}
case 7:{strcpy(k3,"111");break;}
}
}
ha=perev(k1);
temp[0]=ha;
temp[1]='\0';
strcat(t,temp);
ha=perev(k2);
temp[0]=ha;
temp[1]='\0';
strcat(t,temp);
ha=perev(k3);
temp[0]=ha;
temp[1]='\0';
strcat(t,temp);
}
if(strcmp(st1,"ИЛИ")==NULL)
{
if(flag==0)
{
strcpy(t,"t");
da=adr;
temp[0]=da;
temp[1]='\0';
strcat(t,temp);
strcat(t,"¶");
strcpy(e,"e");
strcat(e,temp);
}
flag=1;
*t1=st2[0];*t2=st3[0];
t1[1]='\0';
t2[1]='\0';
if((strcmp(t1,"R")==NULL) && (strcmp(t2,"R")==NULL) )
{ *t3=st2[1];
t3[1]='\0';
n1=atoi(t3);
strcpy(k1,"001111");
switch(n1){
case 0:{strcpy(k2,"000");break;}
case 1:{strcpy(k2,"001");break;}
case 2:{strcpy(k2,"010");break;}
case 3:{strcpy(k2,"011");break;}
case 4:{strcpy(k2,"100");break;}
case 5:{strcpy(k2,"101");break;}
case 6:{strcpy(k2,"110");break;}
case 7:{strcpy(k2,"111");break;}
}
*t3=st3[1];
t3[1]='\0';
n2=atoi(t3);
switch(n2){
case 0:{strcpy(k3,"000");break;}
case 1:{strcpy(k3,"001");break;}
case 2:{strcpy(k3,"010");break;}
case 3:{strcpy(k3,"011");break;}
case 4:{strcpy(k3,"100");break;}
case 5:{strcpy(k3,"101");break;}
case 6:{strcpy(k3,"110");break;}
case 7:{strcpy(k3,"111");break;}
}
}
ha=perev(k1);
temp[0]=ha;
temp[1]='\0';
strcat(t,temp);
ha=perev(k2);
temp[0]=ha;
temp[1]='\0';
strcat(t,temp);
ha=perev(k3);
temp[0]=ha;
temp[1]='\0';
strcat(t,temp);
}
if(strcmp(st1,"ИИЛИ")==NULL)
{
if(flag==0)
{
strcpy(t,"t");
da=adr;
temp[0]=da;
temp[1]='\0';
strcat(t,temp);
strcat(t,"¶");
strcpy(e,"e");
strcat(e,temp);
}
flag=1;
*t1=st2[0];*t2=st3[0];
t1[1]='\0';
t2[1]='\0';
if((strcmp(t1,"R")==NULL) && (strcmp(t2,"R")==NULL) )
{ *t3=st2[1];
t3[1]='\0';
n1=atoi(t3);
strcpy(k1,"010000");
switch(n1){
case 0:{strcpy(k2,"000");break;}
case 1:{strcpy(k2,"001");break;}
case 2:{strcpy(k2,"010");break;}
case 3:{strcpy(k2,"011");break;}
case 4:{strcpy(k2,"100");break;}
case 5:{strcpy(k2,"101");break;}
case 6:{strcpy(k2,"110");break;}
case 7:{strcpy(k2,"111");break;}
}
*t3=st3[1];
t3[1]='\0';
n2=atoi(t3);
switch(n2){
case 0:{strcpy(k3,"000");break;}
case 1:{strcpy(k3,"001");break;}
case 2:{strcpy(k3,"010");break;}
case 3:{strcpy(k3,"011");break;}
case 4:{strcpy(k3,"100");break;}
case 5:{strcpy(k3,"101");break;}
case 6:{strcpy(k3,"110");break;}
case 7:{strcpy(k3,"111");break;}
}
}
ha=perev(k1);
temp[0]=ha;
temp[1]='\0';
strcat(t,temp);
ha=perev(k2);
temp[0]=ha;
temp[1]='\0';
strcat(t,temp);
ha=perev(k3);
temp[0]=ha;
temp[1]='\0';
strcat(t,temp);
}
if(strcmp(st1,"НЕ")==NULL)
{
if(flag==0)
{
strcpy(t,"t");
da=adr;
temp[0]=da;
temp[1]='\0';
strcat(t,temp);
strcat(t,"¶");
strcpy(e,"e");
strcat(e,temp);
}
flag=1;
*t1=st2[0];*t2=st3[0];
t1[1]='\0';
t2[1]='\0';
if(strcmp(t1,"R")==NULL)
{ *t3=st2[1];
t3[1]='\0';
n1=atoi(t3);
strcpy(k1,"010001");
switch(n1){
case 0:{strcpy(k2,"000");break;}
case 1:{strcpy(k2,"001");break;}
case 2:{strcpy(k2,"010");break;}
case 3:{strcpy(k2,"011");break;}
case 4:{strcpy(k2,"100");break;}
case 5:{strcpy(k2,"101");break;}
case 6:{strcpy(k2,"110");break;}
case 7:{strcpy(k2,"111");break;}
}
strcpy(k3,"x");
}
ha=perev(k1);
temp[0]=ha;
temp[1]='\0';
strcat(t,temp);
ha=perev(k2);
temp[0]=ha;
temp[1]='\0';
strcat(t,temp);
}
if(strcmp(st1,"АСП")==NULL)
{
if(flag==0)
{
strcpy(t,"t");
da=adr;
temp[0]=da;
temp[1]='\0';
strcat(t,temp);
strcat(t,"¶");
strcpy(e,"e");
strcat(e,temp);
}
flag=1;
*t1=st2[0];*t2=st3[0];
t1[1]='\0';
t2[1]='\0';
if((strcmp(t1,"I")==NULL) && (strcmp(t2,"R")==NULL) )
{
strcpy(k1,"010010");
strcpy(k2,"01");
*t3=st3[1];
t3[1]='\0';
n2=atoi(t3);
switch(n2){
case 0:{strcpy(k3,"000");break;}
case 1:{strcpy(k3,"001");break;}
case 2:{strcpy(k3,"010");break;}
case 3:{strcpy(k3,"011");break;}
case 4:{strcpy(k3,"100");break;}
case 5:{strcpy(k3,"101");break;}
case 6:{strcpy(k3,"110");break;}
case 7:{strcpy(k3,"111");break;}
}
}
ha=perev(k1);
temp[0]=ha;
temp[1]='\0';
strcat(t,temp);
ha=perev(k2);
temp[0]=ha;
temp[1]='\0';
strcat(t,temp);
ha=perev(k3);
temp[0]=ha;
temp[1]='\0';
strcat(t,temp);
}
if(strcmp(st1,"АСЛ")==NULL)
{
if(flag==0)
{
strcpy(t,"t");
da=adr;
temp[0]=da;
temp[1]='\0';
strcat(t,temp);
strcat(t,"¶");
strcpy(e,"e");
strcat(e,temp);
}
flag=1;
*t1=st2[0];*t2=st3[0];
t1[1]='\0';
t2[1]='\0';
if((strcmp(t1,"I")==NULL) && (strcmp(t2,"R")==NULL) )
{
strcpy(k1,"010011");
strcpy(k2,"01");
*t3=st3[1];
t3[1]='\0';
n2=atoi(t3);
switch(n2){
case 0:{strcpy(k3,"000");break;}
case 1:{strcpy(k3,"001");break;}
case 2:{strcpy(k3,"010");break;}
case 3:{strcpy(k3,"011");break;}
case 4:{strcpy(k3,"100");break;}
case 5:{strcpy(k3,"101");break;}
case 6:{strcpy(k3,"110");break;}
case 7:{strcpy(k3,"111");break;}
}
}
ha=perev(k1);
temp[0]=ha;
temp[1]='\0';
strcat(t,temp);
ha=perev(k2);
temp[0]=ha;
temp[1]='\0';
strcat(t,temp);
ha=perev(k3);
temp[0]=ha;
temp[1]='\0';
strcat(t,temp);
}
if(strcmp(st1,"АЛЛ")==NULL)
{
if(flag==0)
{
strcpy(t,"t");
da=adr;
temp[0]=da;
temp[1]='\0';
strcat(t,temp);
strcat(t,"¶");
strcpy(e,"e");
strcat(e,temp);
}
flag=1;
*t1=st2[0];*t2=st3[0];
t1[1]='\0';
t2[1]='\0';
if((strcmp(t1,"I")==NULL) && (strcmp(t2,"R")==NULL) )
{
strcpy(k1,"010100");
strcpy(k2,"01");
*t3=st3[1];
t3[1]='\0';
n2=atoi(t3);
switch(n2){
case 0:{strcpy(k3,"000");break;}
case 1:{strcpy(k3,"001");break;}
case 2:{strcpy(k3,"010");break;}
case 3:{strcpy(k3,"011");break;}
case 4:{strcpy(k3,"100");break;}
case 5:{strcpy(k3,"101");break;}
case 6:{strcpy(k3,"110");break;}
case 7:{strcpy(k3,"111");break;}
}
}
ha=perev(k1);
temp[0]=ha;
temp[1]='\0';
strcat(t,temp);
ha=perev(k2);
temp[0]=ha;
temp[1]='\0';
strcat(t,temp);
ha=perev(k3);
temp[0]=ha;
temp[1]='\0';
strcat(t,temp);
}
if(strcmp(st1,"АЛП")==NULL)
{
if(flag==0)
{
strcpy(t,"t");
da=adr;
temp[0]=da;
temp[1]='\0';
strcat(t,temp);
strcat(t,"¶");
strcpy(e,"e");
strcat(e,temp);
}
flag=1;
*t1=st2[0];*t2=st3[0];
t1[1]='\0';
t2[1]='\0';
if((strcmp(t1,"I")==NULL) && (strcmp(t2,"R")==NULL) )
{
strcpy(k1,"010101");
strcpy(k2,"01");
*t3=st3[1];
t3[1]='\0';
n2=atoi(t3);
switch(n2){
case 0:{strcpy(k3,"000");break;}
case 1:{strcpy(k3,"001");break;}
case 2:{strcpy(k3,"010");break;}
case 3:{strcpy(k3,"011");break;}
case 4:{strcpy(k3,"100");break;}
case 5:{strcpy(k3,"101");break;}
case 6:{strcpy(k3,"110");break;}
case 7:{strcpy(k3,"111");break;}
}
}
ha=perev(k1);
temp[0]=ha;
temp[1]='\0';
strcat(t,temp);
ha=perev(k2);
temp[0]=ha;
temp[1]='\0';
strcat(t,temp);
ha=perev(k3);
temp[0]=ha;
temp[1]='\0';
strcat(t,temp);
}
if(strcmp(st1,"ПЕРЕХОД")==NULL)
{
if(flag==0)
{
strcpy(t,"t");
da=adr;
temp[0]=da;
temp[1]='\0';
strcat(t,temp);
strcat(t,"¶");
strcpy(e,"e");
strcat(e,temp);
}
flag=1;
strcpy(k1,"010110");
for(int l=0;i<k_p;i++)
{
if(strcmp(label[l][0],t2)==NULL)
{strcpy(k2,label[l][1]);}
}
ha=perev(k1);
temp[0]=ha;
temp[1]='\0';
strcat(t,temp);
ha=perev(k2);
temp[0]=ha;
temp[1]='\0';
strcat(t,temp);
}
if(strcmp(st1,"ПНП")==NULL)
{
if(flag==0)
{
strcpy(t,"t");
da=adr;
temp[0]=da;
temp[1]='\0';
strcat(t,temp);
strcat(t,"¶");
strcpy(e,"e");
strcat(e,temp);
}
flag=1;
strcpy(k1,"010111");
for(int l=0;i<k_p;i++)
{
if(strcmp(label[l][0],t2)==NULL)
{strcpy(k2,label[l][1]);}
}
ha=perev(k1);
temp[0]=ha;
temp[1]='\0';
strcat(t,temp);
ha=perev(k2);
temp[0]=ha;
temp[1]='\0';
strcat(t,temp);
}
if(strcmp(st1,"ПП")==NULL)
{
if(flag==0)
{
strcpy(t,"t");
da=adr;
temp[0]=da;
temp[1]='\0';
strcat(t,temp);
strcat(t,"¶");
strcpy(e,"e");
strcat(e,temp);
}
flag=1;
strcpy(k1,"011000");
for(int l=0;i<k_p;i++)
{
if(strcmp(label[l][0],t2)==NULL)
{strcpy(k2,label[l][1]);}
}
ha=perev(k1);
temp[0]=ha;
temp[1]='\0';
strcat(t,temp);
ha=perev(k2);
temp[0]=ha;
temp[1]='\0';
strcat(t,temp);
}
if(strcmp(st1,"ПНН")==NULL)
{
if(flag==0)
{
strcpy(t,"t");
da=adr;
temp[0]=da;
temp[1]='\0';
strcat(t,temp);
strcat(t,"¶");
strcpy(e,"e");
strcat(e,temp);
}
flag=1;
strcpy(k1,"011001");
for(int l=0;i<k_p;i++)
{
if(strcmp(label[l][0],t2)==NULL)
{strcpy(k2,label[l][1]);}
}
ha=perev(k1);
temp[0]=ha;
temp[1]='\0';
strcat(t,temp);
ha=perev(k2);
temp[0]=ha;
temp[1]='\0';
strcat(t,temp);
}
if(strcmp(st1,"ПН")==NULL)
{
if(flag==0)
{
strcpy(t,"t");
da=adr;
temp[0]=da;
temp[1]='\0';
strcat(t,temp);
strcat(t,"¶");
strcpy(e,"e");
strcat(e,temp);
}
flag=1;
strcpy(k1,"011010");
for(int l=0;i<k_p;i++)
{
if(strcmp(label[l][0],t2)==NULL)
{strcpy(k2,label[l][1]);}
}
ha=perev(k1);
temp[0]=ha;
temp[1]='\0';
strcat(t,temp);
ha=perev(k2);
temp[0]=ha;
temp[1]='\0';
strcat(t,temp);
}
if(strcmp(st1,"ПНЗ")==NULL)
{
if(flag==0)
{
strcpy(t,"t");
da=adr;
temp[0]=da;
temp[1]='\0';
strcat(t,temp);
strcat(t,"¶");
strcpy(e,"e");
strcat(e,temp);
}
flag=1;
strcpy(k1,"011011");
for(int l=0;i<k_p;i++)
{
if(strcmp(label[l][0],t2)==NULL)
{strcpy(k2,label[l][1]);}
}
ha=perev(k1);
temp[0]=ha;
temp[1]='\0';
strcat(t,temp);
ha=perev(k2);
temp[0]=ha;
temp[1]='\0';
strcat(t,temp);
}
if(strcmp(st1,"ПЗ")==NULL)
{
if(flag==0)
{
strcpy(t,"t");
da=adr;
temp[0]=da;
temp[1]='\0';
strcat(t,temp);
strcat(t,"¶");
strcpy(e,"e");
strcat(e,temp);
}
flag=1;
strcpy(k1,"011100");
for(int l=0;i<k_p;i++)
{
if(strcmp(label[l][0],t2)==NULL)
{strcpy(k2,label[l][1]);}
}
ha=perev(k1);
temp[0]=ha;
temp[1]='\0';
strcat(t,temp);
ha=perev(k2);
temp[0]=ha;
temp[1]='\0';
strcat(t,temp);
}
if(strcmp(st1,"УСЧ")==NULL)
{
if(flag==0)
{
strcpy(t,"t");
da=adr;
temp[0]=da;
temp[1]='\0';
strcat(t,temp);
strcat(t,"¶");
strcpy(e,"e");
strcat(e,temp);
}
flag=1;
strcpy(k1,"011101");
ha=perev(k1);
temp[0]=ha;
temp[1]='\0';
strcat(t,temp);
}
if(strcmp(st1,"ОБЧ")==NULL)
{
if(flag==0)
{
strcpy(t,"t");
da=adr;
temp[0]=da;
temp[1]='\0';
strcat(t,temp);
strcat(t,"¶");
strcpy(e,"e");
strcat(e,temp);
}
flag=1;
strcpy(k1,"011110");
ha=perev(k1);
temp[0]=ha;
temp[1]='\0';
strcat(t,temp);
}
if(strcmp(st1,"УСЗ")==NULL)
{
if(flag==0)
{
strcpy(t,"t");
da=adr;
temp[0]=da;
temp[1]='\0';
strcat(t,temp);
strcat(t,"¶");
strcpy(e,"e");
strcat(e,temp);
}
flag=1;
strcpy(k1,"011111");
ha=perev(k1);
temp[0]=ha;
temp[1]='\0';
strcat(t,temp);
}
if(strcmp(st1,"ОБЗ")==NULL)
{
if(flag==0)
{
strcpy(t,"t");
da=adr;
temp[0]=da;
temp[1]='\0';
strcat(t,temp);
strcat(t,"¶");
strcpy(e,"e");
strcat(e,temp);
}
flag=1;
strcpy(k1,"100000");
ha=perev(k1);
temp[0]=ha;
temp[1]='\0';
strcat(t,temp);
}
if(strcmp(st1,"УСС")==NULL)
{
if(flag==0)
{
strcpy(t,"t");
da=adr;
temp[0]=da;
temp[1]='\0';
strcat(t,temp);
strcat(t,"¶");
strcpy(e,"e");
strcat(e,temp);
}
flag=1;
strcpy(k1,"100001");
ha=perev(k1);
temp[0]=ha;
temp[1]='\0';
strcat(t,temp);
}
if(strcmp(st1,"ОБС")==NULL)
{
if(flag==0)
{
strcpy(t,"t");
da=adr;
temp[0]=da;
temp[1]='\0';
strcat(t,temp);
strcat(t,"¶");
strcpy(e,"e");
strcat(e,temp);
}
flag=1;
strcpy(k1,"100010");
ha=perev(k1);
temp[0]=ha;
temp[1]='\0';
strcat(t,temp);
}
if(strcmp(st1,"ВЫГР")==NULL)
{ if(flag==0)
{ strcpy(t,"t");
da=adr;
temp[0]=da;
temp[1]='\0';
strcat(t,temp);
strcat(t,"¶");
strcpy(e,"e");
strcat(e,temp);
}
flag=1;
strcpy(k1,"100011");
ha=perev(k1);
temp[0]=ha;
temp[1]='\0';
strcat(t,temp);
}
if(strcmp(st1,"ЗАГР")==NULL)
{ if(flag==0)
{ strcpy(t,"t");
da=adr;
temp[0]=da;
temp[1]='\0';
strcat(t,temp);
strcat(t,"¶");
strcpy(e,"e");
strcat(e,temp);
}
flag=1;
strcpy(k1,"100100");
ha=perev(k1);
temp[0]=ha;
temp[1]='\0';
strcat(t,temp);
}
if(strcmp(st1,"В")==NULL)
{
if(flag==0)
{
strcpy(t,"t");
da=adr;
temp[0]=da;
temp[1]='\0';
strcat(t,temp);
strcat(t,"¶");
strcpy(e,"e");
strcat(e,temp);
}
flag=1;
*t1=st2[0];*t2=st3[0];
t1[1]='\0';
t2[1]='\0';
if(strcmp(t1,"R")==NULL)
{ *t3=st2[1];
t3[1]='\0';
n1=atoi(t3);
strcpy(k1,"100101");
switch(n1){
case 0:{strcpy(k2,"000");break;}
case 1:{strcpy(k2,"001");break;}
case 2:{strcpy(k2,"010");break;}
case 3:{strcpy(k2,"011");break;}
case 4:{strcpy(k2,"100");break;}
case 5:{strcpy(k2,"101");break;}
case 6:{strcpy(k2,"110");break;}
case 7:{strcpy(k2,"111");break;}
}
strcpy(k3,st3);
ha=perev(k1);
temp[0]=ha;
temp[1]='\0';
strcat(t,temp);
ha=perev(k2);
temp[0]=ha;
temp[1]='\0';
strcat(t,temp);
strcat(t,k3);
}
}
if(strcmp(st1,"ВЫВ")==NULL)
{ if(flag==0)
{ strcpy(t,"t");
da=adr;
temp[0]=da;
temp[1]='\0';
strcat(t,temp);
strcat(t,"¶");
strcpy(e,"e");
strcat(e,temp);
}
flag=1;
*t1=st2[0];*t2=st3[0];
t1[1]='\0';
t2[1]='\0';
if(strcmp(t2,"R")==NULL)
{ *t3=st3[1];
t3[1]='\0';
n1=atoi(t3);
strcpy(k1,"100110");
switch(n1){
case 0:{strcpy(k3,"000");break;}
case 1:{strcpy(k3,"001");break;}
case 2:{strcpy(k3,"010");break;}
case 3:{strcpy(k3,"011");break;}
case 4:{strcpy(k3,"100");break;}
case 5:{strcpy(k3,"101");break;}
case 6:{strcpy(k3,"110");break;}
case 7:{strcpy(k3,"111");break;}
}
strcpy(k2,st3);
ha=perev(k1);
temp[0]=ha;
temp[1]='\0';
strcat(t,temp);
strcat(t,k2);
ha=perev(k3);
temp[0]=ha;
temp[1]='\0';
strcat(t,temp);
}
}
if(strcmp(st1,"ЗАКР")==NULL)
{ if(flag==0)
{ strcpy(t,"t");
da=adr;
temp[0]=da;
temp[1]='\0';
strcat(t,temp);
strcat(t,"¶");
strcpy(e,"e");
strcat(e,temp);
}
flag=1;
strcpy(k1,"100111");
ha=perev(k1);
temp[0]=ha;
temp[1]='\0';
strcat(t,temp);
}
}
fclose(std);
strcpy(v,args[1]);
v[strlen(v)-3]='o';
v[strlen(v)-2]='b';
v[strlen(v)-1]='j';
obj=fopen(v,"w");
fputs(h,obj);
fputs(t,obj);
fputs(d,obj);
fputs(m,obj);
fputs(e,obj);
fclose(obj);
}}