#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