0% found this document useful (0 votes)
42 views

Assembler Basics: Department of Computer Science National Tsing Hua University

The document discusses the basic functions of an assembler. An assembler translates assembly language code into object code by converting mnemonic codes to opcodes, symbolic operands to addresses, and constants to numbers. It also selects the proper instruction format and addressing mode. The document provides an example assembly language program and shows the corresponding object code generated by the assembler in a multi-pass process using tables to track operation codes and symbols.

Uploaded by

Dileep Kalalayam
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PPT, PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
42 views

Assembler Basics: Department of Computer Science National Tsing Hua University

The document discusses the basic functions of an assembler. An assembler translates assembly language code into object code by converting mnemonic codes to opcodes, symbolic operands to addresses, and constants to numbers. It also selects the proper instruction format and addressing mode. The document provides an example assembly language program and shows the corresponding object code generated by the assembler in a multi-pass process using tables to track operation codes and symbols.

Uploaded by

Dileep Kalalayam
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PPT, PDF, TXT or read online on Scribd
You are on page 1/ 27

CS2422 Assembly Language and System Programming

Assembler Basics

Department of Computer Science


National Tsing Hua University
Today’s Topic
 Assembler: Basic Functions
 Section 2.1 of Beck’s “System Software” book.

 Reading Assignment: pages 43-52.

1
Role of Assembler

Source Object
Assembler Code Linker
Program

Executable
Code

Loader

2
Example Program Fig. 2.1 (1/4)
 Purpose
 Reads records from input device (code F1) and
store in BUFFER
 Copies them to output device (code 05)
 At the end of the file, writes an extra EOF on the
output device, then RSUB to the operating system
 Data transfer (RD, WD)
 End of each record is marked with a null character
 End of the file is indicated by a zero-length record
 Subroutines (JSUB, RSUB)
 RDREC, WRREC
 Save link register first before nested jump

3
Example Program Fig. 2.1 (2/4)
5 COPY START 1000 LOAD PROG AT LOC 1000
10 FIRST STL RETADR SAVE RETURN ADDRESS
15 CLOOP JSUB RDREC READ INPUT RECORD
20 LDA LENGTH TEST FOR EOF (LENGTH = 0)
25 COMP ZERO
30 JEQ ENDFIL EXIT IF EOF FOUND
35 JSUB WRREC WRITE OUTPUT RECORD
40 J CLOOP LOOP
45 ENDFIL LDA EOF INSERT END OF FILE MARKER
50 STA BUFFER
55 LDA THREE SET LENGTH = 3
60 STA LENGTH
65 JSUB WRREC WRITE EOF
70 LDL RETADR GET RETURN ADDRESS
75 RSUB RETURN TO CALLER
80 EOF BYTE C’EOF’
85 THREE WORD 3
90 ZERO WORD 0
95 RETADR RESW 1
100 LENGTH RESW 1 4
105 BUFFER RESB 4096 4096-BYTE BUFFER AREA
Example Program Fig. 2.1 (3/4)

110 .
115 . SUBROUTINE TO READ RECORD INTO BUFFER
120 .
125 RDREC LDX ZERO CLEAR LOOP COUNTER
130 LDA ZERO CLEAR A TO ZERO
135 RLOOP TD INPUT TEST INPUT DEVICE
140 JEQ RLOOP LOOP UNTIL READY
145 RD INPUT READ CHARACTER INTO A
150 COMP ZERO TEST FOR END OF RECORD
155 JEQ EXIT EXIT LOOP IF EOR
160 STCH BUFFER,X STORE CHAR IN BUFFER
165 TIX MAXLEN LOOP UNLESS MAX LENGTH
170 JLT RLOOP HAS BEEN REACHED
175 EXIT STX LENGTH SAVE RECORD LENGTH
180 RSUB RETURN TO CALLER
185 INPUT BYTE X’F1’ CODE FOR INPUT DEVICE
190 MAXLEN WORD 4096 5
Example Program Fig. 2.1 (4/4)

195 .
200 . SUBROUTINE TO WRITE RECORD FROM BUFFER
205 .
210 WRREC LDX ZERO CLEAR LOOP COUNTER
215 WLOOP TD OUTPUT TEST OUTPUT DEVICE
220 JEQ WLOOP LOOP UNTIL READY
225 LDCH BUFFER,X GET CHAR FROM BUFFER
230 WD OUTPUT WRITE CHARACTER
235 TIX LENGTH LOOP UNTIL ALL CHAR
240 JLT WLOOP HAVE BEEN WRITTEN
245 RSUB RETURN TO CALLER
250 OUTPUT BYTE X’05’ CODE FOR OUTPUT DEVICE
255 END FIRST

6
Assembler Directives
 Pseudo-Instructions
 Not translated into machine instructions
 Providing information to the assembler
 Basic assembler directives
 START
 END
 BYTE
 WORD
 RESB
 RESW

7
Functions of a Basic Assembler
 Mnemonic code (or instruction name)  opcode
 Symbolic operands (e.g., variable names) 
addresses
 Choose the proper instruction format and
addressing mode
 Constants  Numbers
 Output to object files and listing files

8
Example Program & Object Code (1/3)
Line Loc Source statement Object code
5 1000 COPY START 1000
10 1000 FIRST STL RETADR 141033
15 1003 CLOOP JSUB RDREC 482039
20 1006 LDA LENGTH 001036
25 1009 COMP ZERO 281030
30 100C JEQ ENDFIL 301015
35 100F JSUB WRREC 482061
40 1012 J CLOOP 3C1003
45 1015 ENDFIL LDA EOF 00102A
50 1018 STA BUFFER 0C1039
55 101B LDA THREE 00102D
60 101E STA LENGTH 0C1036
65 1021 JSUB WRREC 482061
70 1024 LDL RETADR 081033
75 1027 RSUB 4C0000
80 102A EOF BYTE C’EOF’ 454F46
85 102D THREE WORD 3 000003
90 1030 ZERO WORD 0 000000
95 1033 RETADR RESW 1
100 1036 LENGTH RESW 1
9
105 1039 BUFFER RESB 4096
Example Program & Object Code (2/3)

110 .
115 . SUB TO READ RECORD INTO BUFFER
120 .
125 2039 RDREC LDX ZERO 041030
130 203C LDA ZERO 001030
135 203F RLOOP TD INPUT E0205D
140 2042 JEQ RLOOP 30203F
145 2045 RD INPUT D8205D
150 2048 COMP ZERO 281030
155 204B JEQ EXIT 302057
160 204E STCH BUFFER,X 549039
165 2051 TIX MAXLEN 2C205E
170 2054 JLT RLOOP 38203F
175 2057 EXIT STX LENGTH 101036
180 205A RSUB 4C0000
185 205D INPUT BYTE X’F1’ F1
190 205E MAXLEN WORD 4096 001000 10
Example Program & Object Code (3/3)

195 .
200 . SUB TO WRITE RECORD FROM BUFFER
205 .
210 2061 WRREC LDX ZERO 041030
215 2064 WLOOP TD OUTPUT E02079
220 2067 JEQ WLOOP 302064
225 206A LDCH BUFFER,X 509039
230 206D WD OUTPUT DC2079
235 2070 TIX LENGTH 2C1036
240 2073 JLT WLOOP 382064
245 2076 RSUB 4C0000
250 2079 OUTPUT BYTE X’05’ 05
255 END FIRST

11
Examples
 Mnemonic code (or instruction name)  opcode
 Examples:
STL 1033  14 10 33

0001 0100 0 001 0000 0011 0011

LDA 1036  00 10 36

0000 0000 0 001 0000 0011 0110

12
Symbolic Operands
 We are not likely to write memory addresses
directly in our code
 Instead, we will define variable names
 Other examples of symbolic operands:
 Labels (for jump instructions)
 Subroutines
 Constants

13
Converting Symbols to Numbers
 Isn’t it straightforward?
 Isn’t it simply the sequential processing of the
source program, one line at a time?
 Not so, if we have forward references
 we don’t know the value of the symbol,
because it is defined later in the code

COPY START 1000



LDA LEN


LEN RESW 1

14
Two-Pass Assembler
 Pass 1
 Assign addresses to all statements in the program
 Save the values assigned to all labels for use in
Pass 2
 Perform some processing of assembler directives
 Pass 2
 Assemble instructions by translating opcode and
symbolic operands
 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

15
Two-Pass Assembler
 From input line: LABEL, OPCODE, OPERAND
 Operation Code Table (OPTAB)
 Symbol Table (SYMTAB)
 Location Counter (LOCCTR)
Source
program

Pass 1 Intermediate Pass 2 Object


file code

OPTAB SYMTAB SYMTAB

16
OPTAB (Operation Code Table)
 Content
 Mnemonic, machine code (instruction format,
length) etc.
 Characteristic
 Static table
 Implementation
 Array or hash table, easy for search

17
SYMTAB (Symbol Table)
 Content
 Label name, value, flag, (type,
length) etc. COPY 1000
 Characteristic FIRST 1000
CLOOP 1003
 Dynamic table (insert, delete,
ENDFIL 1015
search) EOF 1024
 Implementation THREE 102D
 Hash table, non-random keys, ZERO 1030
hashing function RETADR 1033
LENGTH 1036
BUFFER 1039
RDREC 2039

18
Two Pass Assembler – Pass 1
read first input line
if OPCODE = ‘START’ then
save #[OPERAND] as starting address
initialize LOCCTR to starting address
write line to intermediate file
read next input line
else initialize LOCCTR to 0
while OPCODE  ‘END’ do
if this is not a comment line then
if there is a symbol in the LABEL field then
search SYMTAB for LABEL
if found then
set error flag (duplicate symbol)
else
insert (LABEL, LOCCTR) into SYMTAB 19
Two Pass Assembler – Pass 1
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
else if OPCODE = ‘RESB’ then
add #[OPERAND] to LOCCTR
else if OPCODE = ‘BYTE’ then
find length of constant in bytes
add length to LOCCTR
else set error flag (invalid op code)
write line to intermediate file
read next input line // end while
write last line to intermediate file
save (LOCCTR – starting address) as program length 20
Two Pass Assembler – Pass 2
read first input line from intermediate file
if OPCODE = ‘START’ then
write listing line
read next input line
write Header record to object program
initialize first Text record
while OPCODE  ‘END’ do
if this is not a comment line then
search OPTAB for OPCODE
if found then
if there is a symbol in OPERAND field then
search SYMTAB for OPERAND
if found then store symbol value as operand address
else store 0 as operand address and set error flag
(undefined symbol) 21
Two Pass Assembler – Pass 2
else store 0 as operand address
assemble the object code instructions
else if OPCODE = ‘BYTE’ or ‘WORD’ then
convert constant to object code
if object code will not fit into the current Text record then
write Text record to object file
initialize new Text record
add object code to Text record
write listing line
read next input line
write last Text record to object file
write End record to object program
write last listing line

22
Object Program

 Header
Col. 1 H
Col. 2~7 Program name
Col. 8~13 Starting address (hex)
Col. 14-19 Length of object program in bytes (hex)
 Text
Col.1 T
Col.2~7 Starting address in this record (hex)
Col. 8~9 Length of object code in this record in bytes (hex)
Col. 10~69 Object code (69-10+1)/6=10 instructions
 End
Col.1 E
Col.2~7 Address of first executable instruction (hex)
(END program_name)
23
Fig. 2.3
H COPY 001000 00107A
T 001000 1E 141033 482039 001036 281030 301015 482061 ...
T 00101E 15 0C1036 482061 081044 4C0000 454F46 000003 000000
T 002039 1E 041030 001030 E0205D 30203F D8205D 281030 …
T 002057 1C 101036 4C0000 F1 001000 041030 E02079 302064 …
T 002073 07 382064 4C0000 05
E 001000 starting address

24
1036 x x x x x x RESW 1
1033 x x x x x x RESW 1
1030 0 0 0 0 0 0 0 WORD 0
102D 0 0 0 0 0 3 3 WORD 3
102A 4 5 4 F 4 6 ‘E’ ‘O’ ‘F’ BYTE C’EOF’
1027 4 C 0 0 0 0 RSUB
1024 0 8 1 0 3 3 LDL RETADR

100C 3 0 1 0 1 5 JEQ ENDFIL


1009 2 8 1 0 3 0 COMP ZERO
1006 0 0 1 0 3 6 LDA LENGTH
1003 4 8 2 0 3 9 JSUB RDREC
1000 1 4 1 0 3 3 STL RETADR

0
One-Pass Assemblers
 Forward references can be resolved in One-Pass
Assemblers too!
 Add a linked list to the Symbol Table to keep
track of unresolved references. (See p.95)
 We will discuss 1-pass assembler again (Section
2.4.1)

26

You might also like