Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
h>
#include<conio.h>
#include<string.h>
FILE *sp,*ip,*tp;
char POT[][7]={�START�,�END�,�LTORG�,�EQU�,�ORIGIN�};
char MOT[][6]={�MOVER�,�MOVEM�,�ADD�,�SUB�,�MUL�,�DIV�};
char reg[][5]={�AREG�,�BREG�,�CREG�,�DREG�};
char declstat[][3]={�DC�,�DS�};
int countl=0,counts=0,countp=0,p;
int symbol_no;
int symbol_addr;
}symbol;
int litral_no;
char litral_name[10];
int litral_addr;
}litral;
symbol s[10];
litral l[10];
int i,e;
for(i=0;i<5;i++)
e = strcmp(tok1,POT[i]);
if(e==0)
return(i+1);
return(-1);
int i,e;
for(i=0;i<6;i++)
e = strcmp(tok1,MOT[i]);
if(e==0)
return(i+1);
return(-1);
int i,e;
for(i=0;i<4;i++)
{
e = strcmp(tok1,reg[i]);
if(e==0)
return(i+1);
return(-1);
int i,e;
for(i=0;i<2;i++)
e = strcmp(tok1,declstat[i]);
if(e==0)
return(i+1);
return(-1);
int i,e;
for(i=0;i<=counts;i++)
e = strcmp(tok1,s[i].symbol_name);
if(e==0)
return(i);
return(-1);
int i,len,i1=0;
char a[5];
len=strlen(tok2);
tok2[len-1]=�\0?;
for(i=2;tok2[i]!=�\0?;i++,i1++)
a[i1]=tok2[i];
a[i1]=�\0?;
return(atoi(a));
void pass1()
int lc=0,ch,i=0,j,p,n,m,m1,m2,m3,m4,e,k1,a=0,ltorg=0,litral=0,value,x;
char buffer[80],tok1[10],tok2[10],tok3[10],tok4[10];
sp=fopen(�asm.txt�,�r�);
ip=fopen(�ir.txt�,�w�);
while(fgets(buffer,80,sp))
{
n = sscanf(buffer,�%s%s%s%s�,tok1,tok2,tok3,tok4);
switch(n)
case 1 :
//END
m = search_in_POT(tok1);
POOLTAB[countp] = l[a].litral_no;
a = a+litral;
countp++;
litral=0;
if(m==2)
x=lc;
for(i=POOLTAB[countp-1];i<=countl;i++)
l[i-1].litral_addr = lc;
lc++;
for(i=POOLTAB[countp-1];i<=countl;i++)
value=litral_value(l[i-1].litral_name);
x++;
else
if(ltorg==0)
for(i=0;i<countl;i++)
{
l[i].litral_addr = lc;
value=litral_value(l[i].litral_name);
lc++;
else
for(i=POOLTAB[countp-1];i<=countl;i++)
l[i-1].litral_addr = lc;
value=litral_value(l[i-1].litral_name);
lc++;
ltorg++;
if(m==1)
lc=0;
break;
if(m==1)
lc = atoi(tok2);
fprintf(ip,�AD 0%d C %d\n�,m,lc);
else
lc = atoi(tok2);
break;
case 3 : m1 = search_in_MOT(tok1);
m2 = search_in_reg(tok2);
m3 = search_in_POT(tok2);
if(m1>=01)
if(tok3[1]==�=�)
l[countl].litral_no = countl+1;
strcpy(l[countl].litral_name,tok3);
countl++;
litral++;
else
int m11=search_in_symbol_tab(tok3,counts);
if(m11==-1)
s[counts].symbol_no = counts+1;
strcpy(s[counts].symbol_name,tok3);
else
if(strcmp(tok2,�DC�)==0)
m4=search_in_symbol_tab(tok1,counts);
s[m4].symbol_addr = lc;
k1=atoi(tok3);
fprintf(ip,�AD 05 C %d\n�,k1);
else
if(strcmp(tok2,�DS�)==0)
m4=search_in_symbol_tab(tok1,counts);
s[m4].symbol_addr = lc;
x=lc;
k1=atoi(tok3);
lc = lc + k1 � 1;
fprintf(ip,�AD 06 C %d\n�,k1);
if(m3==4)
m4=search_in_symbol_tab(tok3,counts);
s[counts].symbol_no = counts+1;
strcpy(s[counts].symbol_name,tok1);
s[counts].symbol_addr= s[m4].symbol_addr;
counts++;
lc�;
lc++;
break;
case 4 :
s[counts].symbol_no = counts+1;
strcpy(s[counts].symbol_name,tok1);
s[counts].symbol_addr = lc;
counts++;
m1 = search_in_MOT(tok2);
m2 = search_in_reg(tok3);
if(m1>=01)
if(tok3[1]==�=�)
l[countl].litral_no = countl+1;
strcpy(l[countl].litral_name,tok4);
countl++;
litral++;
else
int m11=search_in_symbol_tab(tok4,counts);
if(m11==-1)
s[counts].symbol_no = counts+1;
strcpy(s[counts].symbol_name,tok4);
counts++;
else
if(strcmp(tok3,�DC�)==0)
m4=search_in_symbol_tab(tok2,counts);
s[m4].symbol_addr = lc;
k1=atoi(tok4);
fprintf(ip,�AD 05 C %d\n�,k1);
else
if(strcmp(tok3,�DS�)==0)
m4=search_in_symbol_tab(tok2,counts);
s[m4].symbol_addr = lc;
x=lc;
k1=atoi(tok4);
fprintf(ip,�AD 06 C %d\n�,k1);
lc++;
break;
}
fclose(ip);
void disp_intermediate()
char chr;
ip=fopen(�ir.txt�,�r�);
printf(�\n\tIntermediate Code:-\n�);
while(!feof(ip))
chr=fgetc(ip);
printf(�%c�,chr);
void disp_symbol_table()
printf(�\n*****Symbol Table*****\n�);
printf(���������-\n�);
printf(�|S_no\t|S_name\t|S_addr\t|\n�);
printf(���������-\n�);
for(p=0;p<counts;p++)
printf(�|%d\t|%s\t|%d\t|\n�,s[p].symbol_no,s[p].symbol_name,s[p].symbol_addr);
printf(���������-\n�);
void disp_litral_table()
{
printf(�\n*****Litral Table*****\n�);
printf(���������-\n�);
printf(�|L_no\t|L_name\t|L_addr\t|\n�);
printf(���������-\n�);
for(p=0;p<countl;p++)
printf(�|%d\t|%s\t|%d\t|\n�,l[p].litral_no,l[p].litral_name,l[p].litral_addr);
printf(���������-\n�);
void disp_pool_table()
printf(�\n\t*****POOLTAB*****\n�);
printf(�\t������\n�);
printf(�\t|P_no\t|Index\t|\n�);
printf(�\t������\n�);
for(p=0;p<countp;p++)
printf(�\t|%d\t|%d\t|\n�,(p+1),POOLTAB[p]);
printf(�\t������\n�);
void main()
int ch;
char chr;
clrscr();
do
printf(�\n\tMENU�);
printf(�\n6.Exit�);
scanf(�%d�,&ch);
switch(ch)
case 1:
sp=fopen(�asm.txt�,�r�);
while(!feof(sp))
chr=fgetc(sp);
printf(�%c�,chr);
fclose(sp);
break;
case 2:
pass1();
disp_intermediate();
break;
case 3:
disp_symbol_table();
break;
case 4:
disp_litral_table();
break;
case 5:
disp_pool_table();
break;
case 6:
exit(0);
default:
printf(�\nInvalid Choice�..�);
}while(ch!=6);
getch();