Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- PASS -1
- begin
- read first input line
- if OPCODE = 'START' then
- begin
- save #[OPERAND] as starting address
- initialized LOCCTR to starting address
- write line to intermediate file
- read next input line
- end {if START}
- else
- initialized 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
- 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 lengh} to LOCCTR
- else if OPCODE = 'WORD' then
- add 3 to LOCCTR
- else if OPCODE = 'RESW' then
- 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
- end
- 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 file
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement