0% found this document useful (0 votes)
1K views

Two Pass Assembler Algorithm

The two pass assembler algorithm uses three main data structures: 1. The operation code table (OPTAB) is used to translate mnemonics to machine code equivalents. 2. The symbol table stores label names and values assigned in the first pass. 3. The location counter (LOCCTR) tracks the current location in memory and is incremented as code is generated. The algorithm makes two passes over the source code. In the first pass, it assigns addresses to labels and directives. In the second pass, it translates mnemonics to machine code and writes the object code to an output file.
Copyright
© © All Rights Reserved
Available Formats
Download as DOCX, PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
1K views

Two Pass Assembler Algorithm

The two pass assembler algorithm uses three main data structures: 1. The operation code table (OPTAB) is used to translate mnemonics to machine code equivalents. 2. The symbol table stores label names and values assigned in the first pass. 3. The location counter (LOCCTR) tracks the current location in memory and is incremented as code is generated. The algorithm makes two passes over the source code. In the first pass, it assigns addresses to labels and directives. In the second pass, it translates mnemonics to machine code and writes the object code to an output file.
Copyright
© © All Rights Reserved
Available Formats
Download as DOCX, PDF, TXT or read online on Scribd
You are on page 1/ 2

Two Pass Assembler Algorithm Data structures Used

Pass 1: Data Structures


begin 1. Operation Code Table (OPTAB)
read first input line Used to look up mnemonic operation codes and translate them into machine
if OPCODE = 'START' then language equivalents Contains the mnemonic operation code and its machine
begin language equivalent In more complex assemblers, contains information like
save #[OPERAND] as starting address instruction format and length.
initialized LOCCTR to starting address
write line to intermediate file 2. Symbol Table
read next input line Used to store values (addresses) assigned to labels Includes the name and value for
end {if START} each label Flags to indicate error conditions, e.g. duplicate definition of labels
else May contain other info like type or length about the data area or instruction labeled
initialized LOCCTR to 0
while OPCODE != 'END' do 3. LOCCTR
begin Used to help in the assignment of addresses Initialized to the beginning address
if this is not a comment line then specified in the START statement After each source statement is processed, the
begin length of the assembled instruction or data area to be generated is added. Gives the
if there is a symbol in the LABEL field then address of a label
begin
search SYMTAB for LABEL In Two pass algorithm:
if found then
set error flag (duplicate symbol) Pass 1 (Define symbols):
else (a)Assign addresses to all statements (LOC)
insert (LABEL, LOCCTR) into SYMTAB (b) Save the addresses assigned to all labels in symbol table
end {if symbol} (c) Perform some processing for assembler directives
search OPTAB for OPCODE
if found then
add 3 {instruction lengh} to LOCCTR Pass 2 (Generate object code):
else if OPCODE = 'WORD' then a. Translate opcode and operands
add 3 to LOCCTR b. Generate data values for WORD
else if OPCODE = 'RESW' then c. Write object program
add 3 * #[OPERAND] to LOCCTR
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
Pass 2:

begin
read first input file {from intermediate file}
if OPCODE = 'START' then
begin
write listing line
read next input line
end {if START}
write header record to object program
initialized 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
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}
else if OPCODE = 'BYTE' or 'WORD' then
convert constant to object code
if object code not fit into the current Text record then
begin
write Text record to object program
initialized 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
end

You might also like