#include<stdio.h> #include<conio.h> #include<string.h> #include<stdlib.h> void main() { char label[10],inst[10],op1[10],op2[10]; /* op1,op2->operand */ char buff[10]; int a,b,loctr=0,ctr,flag,d[5]; FILE *fp1,*fp2,*fp3,*fp4; //clrscr(); fp1=fopen("INPUT.TXT","r"); fp2=fopen("OUTPUT.TXT","w"); fp3=fopen("OPTAB.TXT","r"); fp4=fopen("SYM.TXT","w"); fprintf(fp4,"\tSYMBOL TABLE\n"); fprintf(fp4,"LABEL\tADDRESS\n"); buff[0]='\0'; fscanf(fp1,"%s%s%s%s",label,inst,op1,op2); if(strcmp(inst,"START")==0) { a=atoi(op1); loctr=a; fprintf(fp2,"\nADDRESS\tMNEMONICS"); fprintf(fp2,"\n%d\t%s\t%s\t%s\n",loctr,label,inst,op1); } else loctr=0; while(!feof(fp1)) { fscanf(fp1,"%s%s%s%s",label,inst,op1,op2); if(strcmp(inst,"END")!=0) { if(strcmp(label,"$")!=0) fprintf(fp4,"\n%s\t%d",label,loctr); while(!feof(fp3)) { fscanf(fp3,"%s%d",buff,&d); if(strcmp(inst,buff)==0) { flag=1; break; } } b=atoi(op1); if(strcmp(inst,"WORD")==0) loctr+=3; else if(strcmp(inst,"RESW")==0) loctr+=3*b; else if(strcmp(inst,"RESB")==0) loctr+=b; else if(strcmp(inst,"BYTE")==0) loctr+=1; else if(flag) loctr+=3; } fprintf(fp2,"%d\t%s\t%s\t%s\n",loctr,label,inst,op1); } fprintf(fp2,"\n\nPRGLEN=%d\n",(loctr-a)); fclose(fp1); fclose(fp2); fclose(fp3); fclose(fp4); }
Output Files :
SYM.TXT
SYMBOL TABLE
LABEL ADDRESS
FIRST 1000
BUFFER 1006
RETADR 1014
OUTPUT.TXT
ADDRESS MNEMONICS
1000 COPY START 1000
1003 FIRST STL RETADR
1006 $ STA BUFFER
1014 BUFFER RESB 08
1023 RETADR RESW 03
1023 $ END FIRST
PRGLEN=23
No comments:
Post a Comment