0% found this document useful (0 votes)
34 views10 pages

Absolute

Uploaded by

dabahe4893
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
34 views10 pages

Absolute

Uploaded by

dabahe4893
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
You are on page 1/ 10

// SINGLE PASS MACRO PROCESSOR

//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:

You might also like