O slideshow foi denunciado.
Seu SlideShare está sendo baixado. ×
Anúncio
Anúncio
Anúncio
Anúncio
Anúncio
Anúncio
Anúncio
Anúncio
Anúncio
Anúncio
Anúncio
Anúncio
Próximos SlideShares
Single pass assembler
Single pass assembler
Carregando em…3
×

Confira estes a seguir

1 de 20 Anúncio

Mais Conteúdo rRelacionado

Diapositivos para si (20)

Semelhante a Two pass Assembler (20)

Anúncio

Mais recentes (20)

Anúncio

Two pass Assembler

  1. 1. WALCHAND INSTITUTE OF TECHNOLOGY, SOLAPUR PRESENTING A SEMINAR ON TWO PASS ASSEMBLERS
  2. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 19. Continue..?? PASS2 TABLE: LABEL OP1 LC ---------------------------------------------------- PRG1 START USING * 15 L A ST FOUR DC F FIVE DC F TEMP DS 1F END -----------------------------------------------------

×