Ex:8 Passs two of direct link loader
#include<stdio.h>
#include<conio.h>
#include<string.h>
#include<stdlib.h>
char sub[10];
struct E1
{
char ctrlname[10];
char sym[10];
int addr;
int length;
}e[10];
void substr(char *inp,int i,int j)
{
int k,x=0;
char str[10];
for(k=i;k<=j;k++)
if(inp[k]!=' ')
sub[x++]=inp[k];
sub[x]='\0';
}
void main()
{
int i,j,n,paddr,csaddr,ctrllen,esptr=0;
char str1[10],str[20][80];
clrscr();
printf("\n enter the program start adress:\n");
scanf("%d",&paddr);
csaddr=paddr;
strcpy(str[0],"HPROGA 0000000000063");
strcpy(str[1],"DLISTA 000040ENDA 000060");
strcpy(str[2],"E001000");
strcpy(str[3],"HPROGB 000000000073");
strcpy(str[4],"DLISTB 000086ENDB 000070");
strcpy(str[5],"E001000");
strcpy(str[6],"HPROGC 000000000053");
strcpy(str[7],"DLISTC 000052ENDC 000085");
strcpy(str[8],"E001000");
strcpy(str[9],"END");
n=10;
for(i=0;i<n;i++)
{
if(str[i][0]=='H')
{
substr(str[i],1,6);
strcpy(e[esptr].ctrlname,sub);
strcpy(e[esptr].sym,"-");
e[esptr].addr=csaddr;
substr(str[i],13,18);
strcpy(str1,sub);
ctrllen=e[esptr++].length=atoi(str1);
while(str[i][0]!='E')
{
if(str[i][0]=='D')
{
for(j=1;j<strlen(str[i]);j=j+12)
{
strcpy(e[esptr].ctrlname,"-");
substr(str[i],j,j+5);
strcpy(e[esptr].sym,sub);
substr(str[i],j+6,j+11);
e[esptr].addr=atoi(sub)+csaddr;
e[esptr++].length=0;
}
}
i++;
}
csaddr=csaddr+ctrllen;
}
}
printf("\nCTRLSECT\tSYMBOL\tADDRESS\tLENGTH\n");
for(i=0;i<esptr;i++)
printf("\n%s\t%s\t%d\t%d",e[i].ctrlname,e[i].sym,e[i].addr,e[i].length);
getch();
}
Output:
enter the program start adress:
4000
CTRLSECT
SYMBOL ADDRESS LENGTH
PROGA -
-
LISTA 4040 0
-
ENDA0 4060 0
PROGB -
-
LISTB 4092 0
-
ENDB0 4076 0
PROGC -
-
LISTC 4131 0
4000 6
4006 73
4079 53
-
ENDC0 4164 0
No comments:
Post a Comment