Breaking News
recent

Program for Pass one of a two pass assembler in C | CS331 System Software Lab

Aim:Implement Pass one of a two pass assembler.
pass one of a two pass assembler
How to implement Pass one of a two pass assembler?
  1. Create filename.c file using given c program below
  2. Create input.txt,optab.txt,symtab.txt files (all file contents are given below)
  3. rum "cc filename.c"
  4. type "./a.out"
"If you got error! please comment below."
Program for Pass one of a two pass assembler in C
#include<stdio.h>
#include<string.h>
void main()
{
        FILE *f1,*f2,*f3,*f4;
        int lc,sa,l,op1,o,len;
        char m1[20],la[20],op[20],otp[20];
        f1=fopen("input.txt","r");
        f3=fopen("symtab.txt","w");
        fscanf(f1,"%s%s%d",la,m1,&op1);
        if(strcmp(m1,"START")==0)
        {
                sa=op1;
                lc=sa;
                printf("\t%s\t%s\t%d\n",la,m1,op1);
        }
        else
        {
                lc=0;
        }
        fscanf(f1,"%s%s",la,m1);
        while(!feof(f1))
        {
                fscanf(f1,"%s",op);
                printf("\n%d\t%s\t%s\n",lc,la,m1,op);
                if(strcmp(la,"-")!=0)
                {
                        fprintf(f3,"\n%d\t%s\n",lc,la);
                }
                f2=fopen("optab.txt","r");
                fscanf(f2,"%s%d",otp,&o);
                while(!feof(f2))
                {
                        if(strcmp(m1,otp)==0)
                        {
                                lc=lc+3;
                                break;
                        }
                        fscanf(f2,"%s%d",otp,&o);
                        }
                        fclose(f2);
                        if(strcmp(m1,"WORD")==0)
                        {
                                lc=lc+3;
                        }
                        else if(strcmp(m1,"RESW")==0)
                        {
                                op1=atoi(op);
                                lc=lc+(3*op1);
                        }
                        else if(strcmp(m1,"BYTE")==0)
                        {
                                if(op[0]=='X')
                                {
                                        lc=lc+1;
                                }
                                else
                                {
                                      len=strlen(op)-2;
                                        lc=lc+len;
                                }
                        }
                        else if(strcmp(m1,"RESB")==0)
                        {
                                op1=atoi(op);
                                lc=lc+op1;
                        }
                        fscanf(f1,"%s%s",la,m1);
                }
                if(strcmp(m1,"END")==0)
                {
                        printf("program length=\n%d",lc-sa);
                }
                fclose(f1);
                fclose(f3);
}

input.txt
copy    START   1000
LDA ALPHA
ADD ONE
SUB TWO
STA BETA
ALPHA BYTE C'KLNCE
ONE RESB 2
TWO WORD 5
BETA RESW 1
_ END _

optab.txt
LDA     00
STA 23
ADD 01
SUB 05

symtab.txt
1000    LDA

1000 ONE

1003 STA

1003 BYTE

1003 RESB

1003 WORD

1003 RESW

1003 END

No comments:

Powered by Blogger.