Two pass Assembler

20 %
80 %
Information about Two pass Assembler
Software

Published on October 9, 2014

Author: ShubhamShah001

Source: slideshare.net

Description

Its an complete presentation of how two pass assembler works,two pass assembler program,comparison between one pass and two pass.

1. WALCHAND INSTITUTE OF TECHNOLOGY, SOLAPUR PRESENTING A SEMINAR ON TWO PASS ASSEMBLERS

2. TWO PASS ASSEMBLER • Processing the source program into two passes. • The internal tables and subroutines that are used only during Pass 1. • The SYMTAB, LITTAB, and OPTAB are used by both passes. • The main problems to assemble a program in one pass involves forward references. Pass 1 Forward references table String storage buffer Partially configured object file Assembly Language Pass 2 Machine Language

3. • PASS 1 • Assign addresses to all statements in the program. • Addresses of symbolic labels are stored. • Some assemble directives will be processed. • PASS 2 • Translate opcode and symbolic operands. • Generate data values defined by BYTE,WORD etc. • Assemble directives will be processed. • Write the object program and assembly listing.

4. DATA STRUCTURES • Two major data structures: • Operation Code Table (OPTAB): is used to look up mnemonic operation codes and translate them to their machine language equivalents • Symbol Table (SYMTAB): is used to store values (addresses) assigned to labels • Variable: • Location Counter (LOCCTR) is used to help the assignment of addresses • LOCCTR is initialized to the beginning address specified in the START statement • The length of the assembled instruction or data area to be generated is added to LOCCTR

5. Algorithm for Pass 1 of Assembler(3/1) read first input line if OPCODE=‘START’ then begin save #[OPERAND] as starting address initialize LOCCTR to starting address write line to intermediate file read next input line end else initialize LOCCTR to 0 while OPCODE≠’END’ do begin if this is not a comment line then begin if there is a symbol in the LABEL field then

6. Algorithm for Pass 1 of Assembler(3/2) begin search SYMTAB for LABEL if found then set error flag (duplicate symbol) else insert (LABEL, LOCCTR) into SYMTAB end {if symbol} search OPTAB for OPCODE if found then add 3 {instruction length} to LOCCTR else if OPCODE=‘WORD’ then add 3 to LOCCTR else if OPCODE=‘RESW’ then add 3 * #[OPERAND] to LOCCTR

7. Algorithm for Pass 1 of Assembler(3/3) else if OPCODE=‘RESB’ then add #[OPERAND] to LOCCTR else if OPCODE=‘BYTE’ then begin find length of constant in bytes add length to LOCCTR end {if BYTE} else set error flag (invalid operation code) end {if not a comment} write line to intermediate file read next input line end {while not END} Write last line to intermediate file Save (LOCCTR-starting address) as program length

8. Algorithm for Pass 2 of Assembler(3/1) read first input line (from intermediate file) If OPCODE=‘START’ then begin write listing line read next input line end {if START} Write Header record to object program Initialize first Text record While OPCODE≠ ‘END’ do begin if this is not a comment line then begin search OPTAB for OPCODE if found then begin

9. Algorithm for Pass 2 of Assembler(3/2) if there is a symbol in OPERAND field then begin search SYMTAB for OPERAND if found then store symbol value as operand address else begin store 0 as operand address set error flag (undefined symbol) end end {if symbol} else store 0 as operand address assemble the object code instruction end {if opcode found}

10. Algorithm for Pass 2 of Assembler(3/3) else if OPCODE=‘BYTE’ or ‘WORD’ then convert constant to object code if object code will not fit into the current Text record then begin write Text record to object program initialize new Text record end add object code to Text record end {if not comment} write listing line read next input line end {while not END} write last Text record to object program Write End record to object program Write last listing line

11. #include<stdio.h> #include<string.h> #include<conio.h> void main() { char *code[9][4]={ {"PRG1","START","",""}, {"","USING","*","15"}, {"","L","",""}, {"","A","",""}, {"","ST","",""}, {"FOUR","DC","F",""}, {"FIVE","DC","F",""}, {"TEMP","DS","1F",""}, {"","END","",""} }; char av[2],avail[15]={'N','N','N','N','N','N','N','N','N','N','N','N','N','N','N'}; int i,j,k,count[3],lc[9]={0,0,0,0,0,0,0,0,0},loc=0; clrscr(); Program

12. printf("----------------------------------------------------n"); printf("LABELttOPCODEn"); printf("----------------------------------------------------nn"); for(i=0;i<=8;i++) { for(j=0;j<=3;j++) { printf("%stt",code[i][j]); } j=0; printf("n"); } getch(); printf("-----------------------------------------------------"); printf("nVALUES FOR LC : nn"); for(j=0;j<=8;j++) { if((strcmp(code[j][1],"START")!=0)&&(strcmp(code[j][1],"USING")!=0)&&(strcmp(code[j][1],"L")!=0)) lc[j]=lc[j-1]+4; printf("%dt",lc[j]); }

13. printf("nnSYMBOL TABLE:n----------------------------------------------------n"); printf("SYMBOLttVALUEttLENGTHttR/A"); printf("n----------------------------------------------------n"); for(i=0;i< 9;i++) { if(strcmp(code[i][1],"START")==0) { printf("%stt%dtt%dtt%cn",code[i][0],loc,4,'R'); } else if(strcmp(code[i][0],"")!=0) { printf("%stt%dtt%dtt%cn",code[i][0],loc,4,'R'); loc=4+loc; } else if(strcmp(code[i][1],"USING")==0) { } else { loc=4+loc;

14. printf("----------------------------------------------------"); printf("nnBASE TABLE:n-------------------------------------------------------n"); printf("REG NOttAVAILIBILITYtCONTENTS OF BASE TABLE"); printf("n-------------------------------------------------------n"); for(j=0;j<=8;j++) { if(strcmp(code[j][1],"USING")!=0) { } else { strcpy(av,code[j][3]); } } count[0]=(int)av[0]-48; count[1]=(int)av[1]-48; count[2]=count[0]*10+count[1]; avail[count[2]-1]='Y';

15. for(k=0;k< 16;k++) { printf(" %dtt %cn",k,avail[k-1]); } printf("-------------------------------------------------------n"); printf("Continue..??"); getchar(); printf("PASS2 TABLE:nn"); printf("LABELttOP1ttLCtt"); printf("n----------------------------------------------------n"); loc=0; for(i=0;i<=8;i++) { for(j=0;j<=3;j++) { printf("%stt",code[i][j]); } j=0; printf("n"); } printf("-----------------------------------------------------"); getch();

16. ---------------------------------------------------- LABEL OPCODE ---------------------------------------------------- PRG1 START USING * 15 L A ST FOUR DC F FIVE DC F TEMP DS 1F END ----------------------------------------------------- VALUES FOR LC : 0 0 0 4 8 12 16 20 24 OUTPUT

17. SYMBOL TABLE: ---------------------------------------------------- SYMBOL VALUE LENGTH R/A ---------------------------------------------------- PRG1 0 4 R FOUR 12 4 R FIVE 16 4 R TEMP 20 4 R ----------------------------------------------------

18. BASE TABLE: ------------------------------------------------------- REG NO AVAILIBILITY CONTENTS OF BASE TABLE ------------------------------------------------------- 0 1 N 2 N 3 N 4 N 5 N 6 N 7 N 8 N 9 N 10 N 11 N 12 N 13 N

19. Continue..?? PASS2 TABLE: LABEL OP1 LC ---------------------------------------------------- PRG1 START USING * 15 L A ST FOUR DC F FIVE DC F TEMP DS 1F END -----------------------------------------------------

Add a comment

Related presentations

Speaker: Matt Stine Developing for the Cloud Track Marc Andressen has famou...

This presentation explains how to develop a Web API in Java using (JAX-RS or Restl...

1 App,

1 App,

November 10, 2014

How to bring innovation to your organization by streamlining the deployment proces...

Cisco Call-control solutions can handle voice, video and data

Nathan Sharp of Siemens Energy recently spoke at the SAP Project Management in Atl...

Related pages

2 pass assembler - Scribd

2 pass assembler - Download as Word Doc (.doc), PDF File (.pdf), Text File ... Implementation of Pass One of a Two Pass Assembler. System Software 2mks.
Read more

Two-pass assemblers - FIU SCIS

Two-pass assemblers. An assembler is a translator, that translates an assembler program into a conventional machine language program. Basically, the ...
Read more

Simple Pass2 Assembler - Scribd

A Simple Two-Pass Assembler Main Functions • Translate mnemonic operation codes to their machine language equivalents • Assign machine addresses to ...
Read more

how is 2 pass-assembler different from one pass assembler ...

These are 2 questions that i don't understand : 1.How does the One-Pass Assembler resolve the future symbol problem ? 2.How is Two-Pass Assembler different ...
Read more

Two Pass Assembler - Projects Geek

Language processing activity consists of two phases, Analysis phase and synthesis phase. Analysis of source program consists of three components, Lexical ...
Read more

pass one of a two pass assembler in C - Forget Code

Tags for pass one of a two pass assembler in C. c program for pass one of a two pass assembler; c program pass 1 of 2 pass assembler; creating an ...
Read more

What is the difference between one pass and two pass ...

The difference between one pass and two pass assemblers is basically in the name. A one pass assembler passes over the source file exactly once, in.
Read more

Two Pass Assemblers - Entc Engg

Design of 2 Pass Assemblers. An assembler is a translator, that translates an assembler program into a conventional machine language program. Basically ...
Read more

Pass One of a Two Pass Assembler (Concept && Code ...

Want to watch this again later? Sign in to add this video to a playlist. This video aims at explaining the working of the Pass One of a two pass ...
Read more