A simple Two-Pass Assembler Main Functions



Yüklə 445 b.
tarix08.10.2017
ölçüsü445 b.
#3550


A Simple Two-Pass Assembler


Main Functions

  • Translate mnemonic operation codes to their machine language equivalents

  • Assign machine addresses to symbolic labels used by the programmers



Basic Functions



Example 2.1







Purpose of Example 2.1 (COPY)

  • It is a copy function that reads some records from a specified input device and then copies them to a specified output device

    • Reads a record from the input device (code F1)
    • Copies the record to the output device (code 05)
    • Repeats the above steps until encountering EOF.
    • Then writes EOF to the output device
    • Then call RSUB to return to the caller


RDREC and WRREC

  • Data transfer

    • A record is a stream of bytes with a null character (0016) at the end.
    • If a record is longer than 4096 bytes, only the first 4096 bytes are copied.
    • EOF is indicated by a zero-length record. (I.e., a byte stream with only a null character.
    • Because the speed of the input and output devices may be different, a buffer is used to temporarily store the record
  • Subroutine call and return

    • On line 10, “STL RETADDR” is called to save the return address that is already stored in register L.
    • Otherwise, after calling RD or WR, this COPY cannot return back to its caller.


Assembler Directives

  • Assembler directives are pseudo instructions

    • They will not be translated into machine instructions.
    • They only provide instruction/direction/information to the assembler.
  • Basic assembler directives :

    • START :
      • Specify name and starting address for the program
    • END :
      • Indicate the end of the source program, and (optionally) the first executable instruction in the program.


Assembler Directives (cont’d)

    • BYTE :
      • Generate character or hexadecimal constant, occupying as many bytes as needed to represent the constant.
    • WORD :
      • Generate one-word integer constant
    • RESB :
    • RESW :
      • Reserve the indicated number of words for a data area


An Assembler’s Job

  • Convert mnemonic operation codes to their machine language codes

  • Convert symbolic (e.g., jump labels, variable names) operands to their machine addresses

  • Use proper addressing modes and formats to build efficient machine instructions

  • Translate data constants into internal machine representations

  • Output the object program and provide other information (e.g., for linker and loader)



Object Program Format

  • Header

    • Col. 1 H
    • Col. 2~7 Program name
    • Col. 8~13 Starting address of object program (hex)
    • Col. 14-19 Length of object program in bytes (hex)
  • Text

    • Col.1 T
    • Col.2~7 Starting address for object code in this record (hex)
    • Col. 8~9 Length of object code in this record in bytes (hex)
    • Col. 10~69 Object code, represented in hexa (2 col. per byte)
  • End

    • Col.1 E
    • Col.2~7 Address of first executable instruction in object program (hex)








The Object Code for COPY

  • H COPY 001000 00107A

  • T 001000 1E 141033 482039 001036 281030 301015 482061 3C1003 00102A 0C1039 00102D

  • T 00101E 15 0C1036 482061 081044 4C0000 454F46 000003 000000

  • T 002039 1E 041030 001030 E0205D 30203F D8205D 281030 302057 549039 2C205E 38203F

  • T 002057 1C 101036 4C0000 F1 001000 041030 E02079 302064 509039 DC2079 2C1036

  • T 002073 07 382064 4C0000 05

  • E 001000



Two Pass Assembler

  • Pass 1

    • Assign addresses to all statements in the program
    • Save the values (addresses) assigned to all labels (including label and variable names) for use in Pass 2 (deal with forward references)
    • Perform some processing of assembler directives (e.g., BYTE, RESW, these can affect address assignment)
  • Pass 2

    • Assemble instructions (generate opcode and look up addresses)
    • Generate data values defined by BYTE, WORD
    • Perform processing of assembler directives not done in Pass 1
    • Write the object program and the assembly listing


A Simple Two Pass Assembler Implementation



Three Main Data Structures

  • Operation Code Table (OPTAB)

  • Location Counter (LOCCTR)

  • Symbol Table (SYMTAB)



OPTAB (operation code table)

  • Content

    • The mapping between mnemonic and machine code. Also include the instruction format, available addressing modes, and length information.
  • Characteristic

    • Static table. The content will never change.
  • Implementation

    • Array or hash table. Because the content will never change, we can optimize its search speed.
  • In pass 1, OPTAB is used to look up and validate mnemonics in the source program.

  • In pass 2, OPTAB is used to translate mnemonics to machine instructions.



Location Counter (LOCCTR)

  • This variable can help in the assignment of addresses.

  • It is initialized to the beginning address specified in the START statement.

  • After each source statement is processed, the length of the assembled instruction and data area to be generated is added to LOCCTR.

  • Thus, when we reach a label in the source program, the current value of LOCCTR gives the address to be associated with that label.



Symbol Table (SYMTAB)

  • Content

    • Include the label name and value (address) for each label in the source program.
    • Include type and length information (e.g., int64)
    • With flag to indicate errors (e.g., a symbol defined in two places)
  • Characteristic

    • Dynamic table (I.e., symbols may be inserted, deleted, or searched in the table)
  • Implementation

    • Hash table can be used to speed up search
    • Because variable names may be very similar (e.g., LOOP1, LOOP2), the selected hash function must perform well with such non-random keys.


The Pseudo Code for Pass 1







The Pseudo Code for Pass 2







Yüklə 445 b.

Dostları ilə paylaş:




Verilənlər bazası müəlliflik hüququ ilə müdafiə olunur ©www.genderi.org 2024
rəhbərliyinə müraciət

    Ana səhifə