single pass assembler

16
SEMINAR ON “SINGLE PASS ASSEMBLERS” alchand Institute Of Technolog

Upload: satyamevjayte-haxor

Post on 14-Jun-2015

524 views

Category:

Software


7 download

DESCRIPTION

Single Pass Assembler,Details of Single pass assembler,why it is used & program of single pass assembler

TRANSCRIPT

Page 1: Single Pass Assembler

SEMINAR ON

“SINGLE PASS ASSEMBLERS”

Walchand Institute Of Technology

Page 2: Single Pass Assembler

ASSEMBLER OVERVIEW

•TRANSLATE ASSEMBLY LANGUAGE PROGRAMS TO OBJECT PROGRAMS OR MACHINE CODE IS CALLED AN ASSEMBLER.

Page 3: Single Pass Assembler

ASSEMBLERS

• AN ASSEMBLER IS A PROGRAM THAT ACCEPTS AS INPUT AN ASSEMBLY LANGUAGE PROGRAM (SOURCE) AND PRODUCES ITS MACHINE LANGUAGE EQUIVALENT (OBJECT CODE) ALONG WITH THE INFORMATION FOR THE LOADER.

AssemblerObject

CodeLoader

Executable CodeLinker

Fig. : Role of Assemblers

Page 4: Single Pass Assembler

AN ASSEMBLER DOES THE FOLLOWING:

1. GENERATE MACHINE INSTRUCTIONS

• EVALUATE THE MNEMONICS TO PRODUCE THEIR MACHINE CODE

• EVALUATE THE SYMBOLS, LITERALS, ADDRESSES TO PRODUCE THEIR EQUIVALENT MACHINE ADDRESSES

• CONVERT THE DATA CONSTANTS INTO THEIR MACHINE REPRESENTATIONS

Page 5: Single Pass Assembler

ONE PASS ASSEMBLERS

• ONE-PASS ASSEMBLERS ARE USED WHEN

• IT IS NECESSARY OR DESIRABLE TO AVOID A SECOND PASS OVER THE SOURCE PROGRAM• THE EXTERNAL STORAGE FOR THE INTERMEDIATE FILE

BETWEEN TWO PASSES IS SLOW OR IS INCONVENIENT TO USE

• MAIN PROBLEM

FORWARD REFERENCES

• DATA ITEMS

• LABELS ON INSTRUCTIONS

Page 6: Single Pass Assembler

FORWARD REFERENCE

• FOR ANY SYMBOL THAT HAS NOT YET BEEN DEFINED

1. OMIT THE ADDRESS TRANSLATION

2. INSERT THE SYMBOL INTO SYMTAB, AND MARK THIS SYMBOL UNDEFINED

3. THE ADDRESS THAT REFERS TO THE UNDEFINED SYMBOL IS ADDED TO A LIST OF FORWARD REFERENCES ASSOCIATED WITH THE SYMBOL TABLE ENTRY

4. WHEN THE DEFINITION FOR A SYMBOL IS ENCOUNTERED, THE PROPER ADDRESS FOR THE SYMBOL IS THEN INSERTED INTO ANY INSTRUCTIONS PREVIOUS GENERATED ACCORDING TO THE FORWARD REFERENCE LIST

Page 7: Single Pass Assembler

SOLUTIONS FOR ONE PASS ASSEMBLER

TWO METHODS CAN BE USED:

• ELIMINATING FORWARD REFERENCES:

EITHER ALL LABELS USED IN FORWARD REFERENCES ARE DEFINED IN THE SOURCE PROGRAM BEFORE THEY ARE REFERENCED, OR FORWARD REFERENCES TO DATA ITEMS ARE PROHIBITED.

• GENERATING THE OBJECT CODE IN MEMORY:

NO OBJECT PROGRAM IS WRITTEN OUT AND NO LOADER IS NEEDED. THE PROGRAM NEEDS TO BE RE-ASSEMBLED EVERY TIME.

Page 8: Single Pass Assembler

ALGORITHM

STEP 1 : START THE PROGRAM EXECUTION.

STEP 2 : ASSEMBLER SIMPLY GENERATE OBJECT CODE AS IT SCANS THE SOURCE CODE.

STEP 3 : IF THE INSTRUCTION OPERAND IS A SYMBOL TEXT, HAS NOT YET BEEN DEFINED, THE

OPERANDS ADDRESS IS OMITTED.

STEP 4 : WHEN NEARLY HALF THE PROGRAM TRANSLATION IS OVER, SOME OF THE FORWARD REFERENCE PROBLEM ARE EXISTED.

STEP 5 : COMBINE THE PROCESS TO THE END OF THE PROGRAM TO FILL FORWARD REFERENCE PROPERTY.

STEP 6 : AT THE END OF THE PROGRAM, THE SYMBOL TABLE ENTRIES WITH ‘X’ ARE UNDEFINED.

STEP 7 : STOP THE PROGRAM EXECUTION.

Page 9: Single Pass Assembler
Page 10: Single Pass Assembler

TO WRITE A C PROGRAM TO IMPLEMENT SINGLE PASS ASSEMBLER.

INPUT

ENTER YOUR ASSEMBLY INSTRUCTIONS

LDA 5000

SUB Z

STA 9988

HLT

*

Page 11: Single Pass Assembler

PROGRAM#INCLUDE<STDIO.H>

#INCLUDE<CONIO.H>

#INCLUDE<STDLIB.H>

VOID MAIN()

{

FILE *F1,*F2;

CHAR CH,STR[30],STR1[10],STR2[30],CSTR[15];INT I,J,NUM,Q,R;

CLRSCR();

PRINTF("ENTER YOUR ASSEMBLY INSTRUCTIONS\N");

F1=FOPEN("ASIN","W");

WHILE(1)

{ CH=GETCHAR();

IF(CH=='*')

BREAK;

FPUTC(CH,F1);

}

FCLOSE(F1);

F1=FOPEN("ASIN","R");

F2=FOPEN("ASOUT","W");

Page 12: Single Pass Assembler

WHILE(1)

{ CH=GETCHAR();

IF(CH=='*')

BREAK;

FPUTC(CH,F1);

}

FCLOSE(F1);

F1=FOPEN("ASIN","R");

F2=FOPEN("ASOUT","W");

WHILE(1)

{

FGETS(STR,25,F1);

STRNCPY(STR1,STR,3);

STR1[3]='\0';

J=0

Page 13: Single Pass Assembler

FOR(I=3;I<STRLEN(STR);I++)

{S

TR2[J]=STR[I];

J++;

}S

TR2[J]='\0';

IF((STRCMP(STR1,"LDA"))==0)

{

FPUTS("3A\T",F2);

FPUTS(STR2,F2);

} ELSE IF((STRCMP(STR1,"MOV"))==0)

{

FPUTS("47\N",F2);

} ELSE IF((STRCMP(STR1,"ADD"))==0)

{

FPUTS("80\N",F2);

Page 14: Single Pass Assembler

} ELSE IF((STRCMP(STR1,"SUB"))==0)

{

FPUTS("90\N",F2);

} ELSE IF((STRCMP(STR1,"HLT"))==0)

{

FPUTS("76\N",F2); BREAK;

} ELSE IF((STRCMP(STR1,"STA"))==0)

{

FPUTS("32\T",F2);

NUM=ATOI(STR2); Q=NUM/100; R=NUM%100;

IF(R==0)

FPUTS("00\T",F2);

ELSE

FPUTS(ITOA(R,CSTR,10),F2); FPUTS("\T",F2);

FPUTS(ITOA(Q,CSTR,10),F2);

FPUTS("\N",F2);

} ELSE

{

FPUTS("ERROR\N",F2);

}}

FCLOSE(F1);

FCLOSE(F2);

F2=FOPEN("ASOUT","R");

PRINTF("\NTHE OBJECT CODE CONTENTS\N");

CH=FGETC(F2);

WHILE(CH!=EOF)

{

PUTCHAR(CH);

CH=FGETC(F2);

}

FCLOSE(F2);

GETCH();

}

Page 15: Single Pass Assembler

INPUT OUTPUTENTER YOUR ASSEMBLY INSTRUCTIONS THE OBJECT CODE CONTENTS

LDA 5000 3A 00 50

SUB Z 90

STA 9988 32 88 99

HLT 76

Page 16: Single Pass Assembler

Thank You

Questions??