Here is the code for First Pass of an Assembler.
You are encouraged to post the screenshot of the output in comment section.
#include<stdio.h>
#include<string.h>
int main (void)
{
char name[8][8],value[8][4];
inti,j,l,len,k=0,val=-4,m=0;
char l1[8][6],l4[8][6];
int l2[8],l3[8];
char c1[8][6]={{"ABCD"},{"NULL"},{"NULL"},{"NULL"},{"NULL"},{"FOUR"},{"TEMP"},{"NULL"}};
char c2[8][6]={{"START"},{"USING"},{"L"},{"A"},{"ST"},{"DC"},{"DC"},{"END"}};
char c3[8][6]={{"0"},{"*"},{"1"},{"1"},{"1"},{"F4"},{"1F"},{"NULL"}};
char c4[8][6]={{"NULL"},{"15"},{"FOUR"},{"=F5"},{"TEMP"},{"NULL"},{"NULL"},{"NULL"}};
char mot[8][8]={"L","ST","A"};
for(i=0;i<8;i++)
{
printf("%s%s%s%s%s%s%s%s",c1[i],"\t",c2[i],"\t",c3[i],"\t",c4[i],"\n");
}
for(i=0;i<8;i++)
{
for(m=0;m<3;m++)
{
if(strcmp(c2[i],mot[m])==0||strcmp(c2[i],"DC")==0)
{
val+=4;
break;
}
}
if(strcmp(c1[i],"NULL")!=0)
{
strcpy(l1[k],c1[i]);
l2[k]=val;
k++;
}
}
printf("Symbol Table");
printf("\n\n\n");
for(i=0;i<k;i++)
{
if(l2[i]==-4)
l2[i]=0;
printf("%s\t%d\t\n\n",l1[i],l2[i]);
}
return 0;
}
LITERAL Table:
#include<stdio.h>
#include<string.h>
int main (void)
{
char name[8][8],value[8][4];
inti,j,l,k=0,val=0;
int m=0,n=0;
char l1[8][6],ch='R';
int l2[8],l3[8];
char c1[8][6]={{"ABCD"},{"NULL"},{"NULL"},{"NULL"},{"NULL"},{"FOUR"},{"TEMP"},{"NULL"}};
char c2[8][6]={{"START"},{"USING"},{"L"},{"A"},{"ST"},{"DC"},{"Dc"},{"END"}};
char c3[8][6]={{"0"},{"*"},{"1"},{"1"},{"1"},{"F4"},{"1F"},{"NULL"}};
char c4[8][6]={{"NULL"},{"15"},{"FOUR"},{"=F5"},{"TEMP"},{"NULL"},{"NULL"},{"NULL"}};
char mot[8][8]={{"L"},{"A"},{"ST"}};
char pot[8][8]={{"START"},{"END"},{"USING"},{"DC"}};
for(i=0;i<8;i++)
{
printf("%s%s%s%s%s%s%s%s",c1[i],"\t",c2[i],"\t",c3[i],"\t",c4[i],"\n");
}
for(i=0;i<8;i++)
{
for(n=0;n<3;n++)
{
if(strcmp(c2[i],mot[n])==0||strcmp(c2[i],"DC")==0)
{
val+=4;
}
}
if(c4[i][0]=='=')
{
printf("Literal Found");
for(l=0;l<strlen(c4[i]);l++)
l1[k][l]=c4[i][l];
}
}
l2[k]=val;
l3[k]=4;
k++;
printf("\n\n\tLITERAL TABLE\n");
printf("%s\t%s\t%s\t%s\n","Symbol","Value","length","Relocation");
for(i=0;i<k;i++)
{
printf("%s\t%d\t%d\t%c\n",l1[i],l2[i],l3[i],ch);
}
return 0;
}
Comments
Post a Comment