#include<stdio.h> #include<conio.h> #include<string.h> #include<stdlib.h> FILE *fp1,*fp2,*fp3,*fp4; void main() { char code[2],addr[6],buff[10],add[5],inst[10],op1[10],op2[10]; char symval[5],lab[10],obj[6],a[6],label[10]; int flag; fp1=fopen("D1.TXT","r"); fp2=fopen("D2.TXT","w"); buff[0]='\0'; fscanf(fp1,"%s%s%s%s%s",&addr,&label,&inst,&op1,&op2); strcpy(a,op1); if(strcmp(inst,"START")==0) { fprintf(fp2,"\nADDRESS\tMNEMONICS\tINSTRUCTION\n"); fprintf(fp2,"%s\t%s\t%s\t%s\n",addr,label,inst,op1); } while(!feof(fp1)) { flag=0; fscanf(fp1,"%s%s%s%s%s",&addr,&label,&inst,&op1,&op2); if(strcmp(inst,"END")!=0) { fp3=fopen("OPTAB.TXT","r"); while(!feof(fp3)) { fscanf(fp3,"%s%s",buff,code); if(strcmp(inst,buff)==0) { flag=1; break; } }fclose(fp3); if(flag) { if(strcmp(op1,"$")!=0) { fp4=fopen("SYM.TXT","r"); while(!feof(fp4)) { fscanf(fp4,"%s%s",lab,add); if(strcmp(op1,lab)==0) { strcpy(symval,add); break; } } } else strcpy(symval,""); fclose(fp4); } if(strcmp(label,"$")==0||strcmp(label,"")) obj[0]=code[0]; obj[1]=code[1]; obj[2]=symval[0]; obj[3]=symval[1]; obj[4]=symval[2]; obj[5]=symval[3]; obj[6]='\0'; if((strcmp(inst,"WORD")==0)||(strcmp(inst,"BYTE")==0)) fprintf(fp2,"%s\t%s\t%s\t%s\t%s\n",addr,label,inst,op1,op2); else if((strcmp(inst,"RESW")==0)||(strcmp(inst,"RESB")==0)) fprintf(fp2,"%s\t%s\t%s\t%s\t%s\n",addr,label,inst,op1,op2); else fprintf(fp2,"%s\t%s\t%s\t%s\t%s\n",addr,label,inst,symval,obj); } } fprintf(fp2,"%s\t%s\t%s\t%s\t%s\n",addr,label,inst,op1,op2); fclose(fp1); fclose(fp2); }
Input File :
D1.TXT
1000 COPY START 1000 $
1000 FIRST STL RETADR $
1003 $ STA BUFFER $
1006 BUFFER RESB 08 $
1014 RETADR RESW 03 $
1023 $ END FIRST $
OPTAB.TXT
STA 14
STL 32
LDA 03
LDB 69
JSUD 48
JEQ 30
COMP 28
STCH 34
SYM.TXT
SYMBOL TABEL
LABEL ADDRESS
FIRST 1000
BUFFER 1006
RETADR 1014
Output File :
D2.TXT
ADDRESS MNEMONICS INSTRUCTION
1000 COPY START 1000
1000 FIRST STL 1014 321014
1003 $ STA 1006 141006
1006 BUFFER RESB 08 $
1014 RETADR RESW 03 $
1023 $ END FIRST $
No comments:
Post a Comment