0% found this document useful (0 votes)
19 views4 pages

2 Pass Macro Processor

System software

Uploaded by

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

2 Pass Macro Processor

System software

Uploaded by

aysha saheera
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as DOCX, PDF, TXT or read online on Scribd

2 pass macro processor

Pass 1:

#include <stdio.h>

#include <stdlib.h>

#include <string.h>

void main()

FILE *f1, *f2, *f3;

char mne[20], opnd[20], la[20];

f1 = fopen("[Link]", "r");

f2 = fopen("[Link]", "w+");

f3 = fopen("[Link]", "w+");

fscanf(f1, "%s%s%s", la, mne, opnd);

while (strcmp(mne, "MEND") != 0)

if (strcmp(mne, "MACRO") == 0)

fprintf(f2, "%s\n", la);

fprintf(f3, "%s\t%s\n", la, opnd);

else

fprintf(f3, "%s\t%s\n", mne, opnd);

fscanf(f1, "%s%s%s", la, mne, opnd);

fprintf(f3, "%s", mne);

fclose(f1);

fclose(f2);

fclose(f3);

printf("\nPass 1 of 2 pass macroprocessor is successful.");


}

Pass 2:

#include <stdio.h>

#include <string.h>

#include <stdlib.h>

void main()

FILE *f1, *f2, *f3, *f4, *f5;

int i, len;

char mne[20], opnd[20], la[20], name[20], mne1[20], opnd1[20], arg[20];

f1 = fopen("[Link]", "r");

f2 = fopen("[Link]", "r");

f3 = fopen("[Link]", "r");

f4 = fopen("[Link]", "w+");

f5 = fopen("[Link]", "w");

fscanf(f1, "%s%s%s", la, mne, opnd);

while (strcmp(mne, "END") != 0)

if (strcmp(mne, "MACRO") == 0)

fscanf(f1, "%s%s%s", la, mne, opnd);

while (strcmp(mne, "MEND") != 0)

fscanf(f1, "%s%s%s", la, mne, opnd);

else

fscanf(f2, "%s", name);

if (strcmp(mne, name) == 0)
{

len = strlen(opnd);

for (i = 0; i < len; i++)

if (opnd[i] != ',')

fprintf(f4, "%c", opnd[i]);

else

fprintf(f4, "\n");

fseek(f2, SEEK_SET, 0);

fseek(f4, SEEK_SET, 0);

fscanf(f3, "%s%s", mne1, opnd1);

fprintf(f5, ".\t%s\t%s\n", mne1, opnd);

fscanf(f3, "%s%s", mne1, opnd1);

while (strcmp(mne1, "MEND") != 0)

if ((opnd1[0] == '&'))

fscanf(f4, "%s", arg);

fprintf(f5, "-\t%s\t%s\n", mne1, arg);

else

fprintf(f5, "-\t%s\t%s\n", mne1, opnd1);

fscanf(f3, "%s%s", mne1, opnd1);

else

fprintf(f5, "%s\t%s\t%s\n", la, mne, opnd);

fscanf(f1, "%s%s%s", la, mne, opnd);

}
fprintf(f5, "%s\t%s\t%s\n", la, mne, opnd);

fclose(f1);

fclose(f2);

fclose(f3);

fclose(f4);

fclose(f5);

printf("\nPass 2 of 2 Pass Macroprocessor is Successful.");

[Link]

EX1 MACRO &A,&B

- LDA &A

- STA &B

- MEND -

SAMPLE START 1000

- EX1 N1,N2

N1 RESW 1

N2 RESW 1

- END –

[Link]

EX1 &A,&B

LDA &A

STA &B

MEND

[Link]

EX1

You might also like