Absolute
Absolute
//DIYA P S
//ROLL NO: 24
PROGRAM
#include<stdio.h>
#include<string.h>
struct DEFTAB
{
char opcode[10];
char operand[50];
}dt[50];
struct NAMTAB
{
char name[10];
int start;
int end;
}nt[5];
struct ARGTAB
{
char arg[10];
}at[5];
struct PARAMTAB
{
char param[10];
char val[4];
}pt[5];
int n,p,m,g;
int check_param(char x[50])
{
int i;
for(i=0;i<p;i++)
if(strcmp(pt[i].param,x)==0)
return i;
return -1;
}
int check_macro(char x[20])
{
int i;
for(i=0;i<m;i++)
if(strcmp(nt[i].name,x)==0)
return i;
return -1;
}
void store()
{
FILE *f,*fp;
int k,i,j;
char a[20],b[20],c[40],temp[20],lab[20];
n=0;p=0;m=0;g=0;
f=fopen("INPUT.txt","r");
fp=fopen("exp.txt","w");
while(!feof(f))
{
fscanf(f,"%s\t%s\t%s\n",a,b,c);
if(strcmp(b,"MACRO")==0)
{
strcpy(nt[m].name,a);
nt[m].start=0;
k=1;
j=0;
i=0;
while(c[i]!='\0')
{
if(c[i]!=',')
{
temp[j]=c[i];
j++;
}
else
{
temp[j]='\0';
j=0;
strcpy(pt[p].param,temp);
pt[p].val[0]='?';
pt[p].val[1]=p+49;
pt[p].val[2]='\0';
p++;
}
i++;
}
temp[j]='\0';
strcpy(pt[p].param,temp);
pt[p].val[0]='?';
pt[p].val[1]=p+49;
pt[p].val[2]='\0';
p++;
strcpy(dt[n].opcode,b);
strcpy(dt[n].operand,c);
n++;
}
else if(k==1)
{
i=check_param(c);
strcpy(dt[n].opcode,b);
if(i==-1)
strcpy(dt[n].operand,c);
else
strcpy(dt[n].operand,pt[i].val);
n++;
if(strcmp(b,"MEND")==0)
{
k=0;
nt[m].end=n-1;
m++;
}
}
else if((check_macro(b))!=-1)
{
i=0;
g=0;
j=0;
while(c[i]!='\0')
{
if(c[i]!=',')
{
temp[j]=c[i];
j++;
}
else
{
temp[j]='\0';
j=0;
strcpy(at[g].arg,temp);
g++;
}
i++;
}
temp[j]='\0';
strcpy(at[g].arg,temp);
g++;
strcpy(a,"NULL");
for(i=1;i<n-1;i++)
{
if(dt[i].operand[0]=='?')
{
j=dt[i].operand[1]-49;
strcpy(temp,at[j].arg);
}
else
strcpy(temp,dt[i].operand);
fprintf(fp,"%s\t%s\t%s\n",a,dt[i].opcode,temp);
}
}
else
fprintf(fp,"%s\t%s\t%s\n",a,b,c);
}
fclose(f);
fclose(fp);
}
int main()
{
int i;
store();
printf("\n DEFTAB:\n");
for(i=0;i<n;i++)
printf("%s\t%s\n",dt[i].opcode,dt[i].operand);
printf("\n NAMETAB:\nNAME\tSTART\tEND\n");
for(i=0;i<m;i++)
printf("%s\t%d\t%d\n",nt[i].name,nt[i].start,nt[i].end);
printf("\n ARGTAB: \nPosition\tArgument\n");
for(i=0;i<g;i++)
printf("%d\t\t%s\n",i+1,at[i].arg);
}
INPUT.txt:
COPY START 0
RDBUF MACRO &INDEV,&BUFADR,&RECLTH
NULL CLEAR X
NULL CLEAR A
NULL CLEAR S
NULL LDT #4096
NULL TD &INDEV
NULL JEQ *-3
NULL RD &INDEV
NULL COMPR A,S
NULL JEQ *+11
NULL STCH &BUFADR
NULL STX &RECLTH
NULL MEND NULL
FIRST STL RETADR
NULL RDBUF F1,BUFFER,LENGTH
NULL LDA ONE
NULL RDBUF F3,AREA,SIZE
NULL LDB TWO
NULL END FIRST
EXP.txt:
COPY START 0
FIRST STL RETADR
NULL CLEAR X
NULL CLEAR A
NULL CLEAR S
NULL LDT #4096
NULL TD F1
NULL JEQ *-3
NULL RD F1
NULL COMPR A,S
NULL JEQ *+11
NULL STCH BUFFER
NULL STX LENGTH
NULL LDA ONE
NULL CLEAR X
NULL CLEAR A
NULL CLEAR S
NULL LDT #4096
NULL TD F3
NULL JEQ *-3
NULL RD F3
NULL COMPR A,S
NULL JEQ *+11
NULL STCH AREA
NULL STX SIZE
NULL LDB TWO
NULL END FIRST
OUTPUT:
//ABSOLUTE LOADER
//DIYA P S
//ROLL NO: 24
PROGRAM
#include<stdio.h>
#include<conio.h>
#include<string.h>
#include<stdlib.h>
void main()
{
FILE *fp;
int i,addr1,l,j,staddr1;
char name[10],line[50],name1[10],addr[10],rec[10],ch,staddr[10];
printf("Enter program name:" );
scanf("%s",name);
fp=fopen("input.txt","r");
fscanf(fp,"%s",line);
for(i=2,j=0;i<8,j<6;i++,j++)
name1[j]=line[i];
name1[j]='\0';
printf("name from obj. %s\n",name1);
if(strcmp(name,name1)==0)
{
do
{
fscanf(fp,"%s",line);
if(line[0]=='T')
{
for(i=2,j=0;i<8,j<6;i++,j++)
staddr[j]=line[i];
staddr[j]='\0';
staddr1=atoi(staddr);
i=12;
while(line[i]!='$')
{
if(line[i]!='^')
{
printf("00%d \t %c%c\n", staddr1,line[i],line[i+1]);
staddr1++;
i=i+2;
}
else i++;
}
}
else if(line[0]='E')
fclose(fp);
}while(!feof(fp));
}
}
INPUT:
input.txt:
H^SAMPLE^001000^0035
T^001000^0C^001003^071009$
T^002000^03^111111$
E^001000
OUTPUT:
//RELOCATING LOADER
//DIYA P S
//ROLL NO: 24
PROGRAM
#include<stdio.h>
#include<conio.h>
#include<string.h>
#include<stdlib.h>
void convert(char h[12]);
char bitmask[12];
char bit[12]={0};
void main()
{
printf("DIYA P S \n24\n\n");
char add[6],length[10],input[10],binary[12],relocbit,ch,pn[5];
int start,inp,len,i,address,opcode,addr,actualadd,tlen;
FILE *fp1,*fp2;
printf("Enter the actual starting address : ");
scanf("%x",&start);
fp1=fopen("RLIN.txt","r");
fp2=fopen("RLOUT.txt","w");
fscanf(fp1,"%s",input);
fprintf(fp2," ----------------------------\n");
fprintf(fp2," ADDRESS\tCONTENT\n");
fprintf(fp2," ----------------------------\n");
while(strcmp(input,"E")!=0)
{
if(strcmp(input,"H")==0)
{
fscanf(fp1,"%s",pn);
fscanf(fp1,"%s",add);
fscanf(fp1,"%s",length);
fscanf(fp1,"%s",input);
}
if(strcmp(input,"T")==0)
{
fscanf(fp1,"%x",&address);
fscanf(fp1,"%x",&tlen);
fscanf(fp1,"%s",bitmask);
address+=start;
convert(bitmask);
len=strlen(bit);
if(len>=11)
len=10;
for(i=0;i<len;i++)
{
fscanf(fp1,"%x",&opcode);
fscanf(fp1,"%x",&addr);
relocbit=bit[i];
if(relocbit=='0')
actualadd=addr;
else
actualadd=addr+start;
fprintf(fp2,"\n %x\t\t%x%x\n",address,opcode,actualadd);
address+=3;
}
fscanf(fp1,"%s",input);
}
}
fprintf(fp2," ----------------------------\n");
fclose(fp1);
fclose(fp2);
printf("\n\n The contents of output file(RLOUT.TXT\n");
fp2=fopen("RLOUT.txt","r");
ch=fgetc(fp2);
while(ch!=EOF)
{
printf("%c",ch);
ch=fgetc(fp2);
}
fclose(fp2);
getch();
}
void convert(char h[12])
{
int i,l;
strcpy(bit,"");
l=strlen(h);
for(i=0;i<l;i++)
{
switch(h[i])
{
case '0':
strcat(bit,"0");
break;
case '1':
strcat(bit,"1");
break;
case '2':
strcat(bit,"10");
break;
case '3':
strcat(bit,"11");
break;
case '4':
strcat(bit,"100");
break;
case '5':
strcat(bit,"101");
break;
case '6':
strcat(bit,"110");
break;
case '7':
strcat(bit,"111");
break;
case '8':
strcat(bit,"1000");
break;
case '9':
strcat(bit,"1001");
break;
case 'A':
strcat(bit,"1010");
break;
case 'B':
strcat(bit,"1011");
break;
case 'C':
strcat(bit,"1100");
break;
case 'D':
strcat(bit,"1101");
break;
case 'E':
strcat(bit,"1110");
break;
case 'F':
strcat(bit,"1111");
break;
}
}
}
INPUT:-
RLIN.txt:
OUTPUT:-
RLOUT.txt: