KEMBAR78
Assembler - System Programming | PPTX
SHREE SWAMI ATMANAND SARASWATI INSTITUTE
OF TECHNOLOGY
System Programming (2150708)
PREPARED BY: (Group:2)
Bhumi Aghera(130760107001)
Monika Dudhat(130760107007)
Radhika Talaviya(130760107029)
Rajvi Vaghasiya(130760107031)
GUIDED BY:
Prof. Dharmendra Singh
Prof. Maitry Noticewala
One pass assembler, Two pass assembler,
Advanced Assembler Directives
INDEX
1. One-pass assembler
2. Forward Reference
3. Two-pass assembler using variant-I
4. Two-pass assembler using variant-II
5. Advanced Assembler Directives
6. Design of two pass assembler
One-pass assembler
• Translate assembly language programs to object programs or machine code is
called an Assembler.
• The pass of an assembler is scan of the source program of the source program to
generate a machine code.
• If the operand contains an undefined symbol, use 0 as the address and write the
text record to the object program.
• Forward references are entered into lists as in the load-and-go assembler.
• When the definition of a symbol is encountered, the assembler generates another
Text record with the correct operand address of each entry in the reference list.
• When loaded, the incorrect address 0 will be updated by the latter Text record
containing the symbol definition.
Go To Index
Example:
START 101
READ X
READ Y
MOVER AREG, X
MULT AREG, Y
MOVEM AREG, RESULT
PRINT RESULT
STOP
X DS 1
Y DS 1
RESULT DS 1
END
Here,
X→108
Y→109
RESULT→110
Step:-1
 Now, we give location
counter(LC).
LC
101
102
103
104
105
106
107
108
109
110
110
Example:
Instruction LC Machine
code
READ X 101 09 0 108
READ Y 102 09 0 109
MOVER AREG, X 103 04 1 108
MULT AREG, Y 104 01 1 109
MOVEM AREG, RESULT 105 05 1 110
PRINT RESULT 106 10 0 110
STOP 107 00 0 000
X DS 1 108 --
Y DS 1 109 --
RESULT DS 1 110 --
Step:-2
LC Opcode Register Address
101 09 0 108
102 09 0 109
103 04 1 108
104 01 1 109
105 05 1 110
106 10 0 110
107 00 0 000
Step:-3
Example
Forward Reference
Go To Index
• Omits the operand address if the symbol has not yet been defined.
• Enters this undefined symbol into SYMTAB and indicates that it is undefined .
• Adds the address of this operand address to a list of forward references associated
with the SYMTAB entry.
• When the definition for the symbol is encountered, scans the reference list and
inserts the address.
• At the end of the program, reports the error if there are still SYMTAB entries
indicated undefined symbols.
• One pass assembler does not allows forward reference.
• Forward reference is using of variable before it declare.
x
Example:
START 101
MOVER AREG,X
L1: ADD BREX,ONE
COMP BREG,TEN
BC EQ,LAST
ADD AREG,ONE
BC ANY,L1
LAST STOP
X DC “5”
ONE DC “1”
TEN DC “10”
END
LC
101
102
103
104
105
106
107
108
109
110
111
Opcode Register Address
04 1 ---
01 2 ---
60 2 ---
07 3 ---
01 1 ---
07 6 ---
000 00 ---
Here, 5 forward reference.
 Table for forward reference
Address Forward reference symbol
101 X
102 ONE
103 TEN
104 LAST
105 ONE
Step-1
START 101
MOVER AREG,X
L1: ADD BREX,ONE
COMP BREG,TEN
BC EQ,LAST
ADD AREG,ONE
BC ANY,L1
LAST STOP
X DC “5”
ONE DC “1”
TEN DC “10”
END
LC
101
102
103
104
105
106
107
108
109
110
111
Opcode Register Address
04 1 108
01 2 109
60 2 110
07 3 107
01 1 109
07 6 102
00 0 000
00 0 005
00 0 001
00 0 010
Example
Step-2
Go To Index
• Figure 1 shows an assembly program and its intermediate code using Variant I.
• The first operand in an assembly statement is represented by a single digit number
which is either a code in the range 1…4 that represents a CPU register, where 1
represents AREG, 2 represents BREG, etc., or the condition code itself, which is in
the range 1…6 and has meaning.
• The second operand, which is a memory operand, is represented by a pair of the form
(operand class, code)
where operand class is one of C,S and L: standing for Constant, Symbol and Literal,
respectively.
• For a constant, the code field contains the representation of the constant itself.
• For example, in figure 1 the operand descriptor for the statement START 200 is
(C,200). For a symbol table or literal, the code field contains the entry number of the
operand in SYMTAB or LITTAB.
Two pass assembler using variant-I
• Thus entries for a symbol XYZ and a literal=‘25’ would be of the form(S, 17) and
(L, 35), respectively.
START 200 (AD,01) (C,200)
READ A (IS,09) (S,01)
LOOP MOVER AREG, A (IS,04) (1)(S,01)
⁞ ⁞
SUB AREG, =‘1’ (IS,02) (1)(L,01)
BC GT, LOOP (IS,07) (4)(S,02)
STOP (IS,00)
A DS 1 (DL,02) (C,1)
LTORG (DL,03)
….. …..
Figure 1: Intermediate code, variant I
• This method of representing symbolic operand requires a change in our strategy for
SYMTAB management.
• We have so far assumed that a SYMTAB entry is made for a symbol only when its
definition is encountered in the program, i.e., when the symbol occurs in the table
field of an assembly statement.
MOVER AREG, A
• However, while processing a forward reference it would be necessary to enter A in
SYMTAB, say in entry number n, so that it can be represented by (S,n) in the
intermediate code.
• At this point, the address and length fields of A’s entry cannot be filled in.
• Therefore, two kinds of entries may exist in SYMTAB at any time-for defined
symbols and forward references. This fact is important for use during error detection.
Example:
START 200
MOVER AREG=‘5’
MOVEM AREG, X
L1 MOVER BREG=‘2’
ORIGIN L1+3
LTORG
NEXT ADD AREG=‘1’
SUB BREG=‘2’
BC LT, BACK
LTORG
BACK EQU L1
ORIGIN NEXT+5
MULT CREG=‘4’
STOP
X DS 1
END
LTORG
 Now, we give location counter(LC).
LC
-
200
201
202
-
205,206
207
208
209
210,211
212
-
LC
212
213
214
-
215
Create SYMTAB
START 200
MOVER AREG=‘5’
MOVEM AREG, X
L1 MOVER BREG=‘2’
ORIGIN L1+3
LTORG
NEXT ADD AREG=‘1’
SUB BREG=‘2’
BC LT, BACK
LTORG
BACK EQU L1
ORIGIN NEXT+5
MULT CREG=‘4’
STOP
X DS 1
END
LTORG
LC
-
200
201
202
-
205,206
207
208
209
210,211
212
-
LC
212
213
214
-
215
Symbol ADDRESS
0 X 214
1 L1 202
2 NEXT 207
3 BACK 212
Create LITTAB, POOLTAB
START 200
MOVER AREG=‘5’
MOVEM AREG, X
L1 MOVER BREG=‘2’
ORIGIN L1+3
LTORG
NEXT ADD AREG=‘1’
SUB BREG=‘2’
BC LT, BACK
LTORG
BACK EQU L1
ORIGIN NEXT+5
MULT CREG=‘4’
STOP
X DS 1
END
LTORG
LC
-
200
201
202
-
205,206
207
208
209
210,211
212
-
LC
212
213
214
-
215
Literal ADDRESS
0 =‘5’ 205
1 =‘2’ 206
2 =‘1’ 210
3 =‘2’ 211
4 =‘4’ 215
Literal
no.
0 0
1 2
2 4
LITTAB
POOLTA
B
Create IC(Intermediate Code)
START 200
MOVER AREG=‘5’
MOVEM AREG, X
L1 MOVER BREG=‘2’
ORIGIN L1+3
LTORG
NEXT ADD AREG=‘1’
SUB BREG=‘2’
BC LT, BACK
LTORG
BACK EQU L1
ORIGIN NEXT+5
MULT
CREG=‘4’
STOP
X DS 1
END
LTORG
IC
(AD,00) (C,200)
(IS,04) (RG,01) (L,0)
(IS,05) (RG,01) (S,0)
(IS,04) (RG,02) (L,1)
(AD,03) (C,205)
(AD,05)(C,5)(AD,05)(C,2)
(IS,01)(RG,01)(L,2)
(IS,02)(RG,02)(L,3)
(IS,07)(CC,01)(S,3)
(AD,05)(C,1)(AD,05)(C,2)
(AD,04)(S,1)
(AD,05)(C,212)
IC
(IS,03)(RG,03)(L,4)
(IS,00)
(DL,01)(C,1)
(AD,02)
(DL,02)(C,4)
Machine code
LC
-
200
201
202
-
205,206
207
208
209
210,211
212
LC
-
212
213
214
-
215
Opcode Register Address
- - -
04 01 205
05 01 214
04 02 206
- - -
00
00
00
00
205
206
01 01 210
02 02 211
07 01 202
00
00
00
00
210
211
04 03 202
Machine code
Operand Register Address
- - -
- - -
03 03 215
00 00 00
- - -
00 00 215
Two Pass assembler using variant - II
• This variant differs from variant I in that the operand field of the intermediate code
may be either in processed from as in variant I, or in the source from itself.
• For a declarative statement or an assembler directive, the operand field has to be
processed in the first pass to support LC processing.
• Hence the operand field of its intermediate code would contain the processed from of
the operand.
• For imperative statements, the operand field is processed to identify literal references
and enter them in the LITTAB.
• Hence operands that are literals are represented as (L,m) in the intermediate code.
• There is no reason why symbolic references in operand fields of imperative statements
should be processed during pass I, so they are put in the source form itself in the
intermediate code.
Go To Index
Example
LC
START 100
READ A 100
READ B 101
MOVER BREG, A 102
MULT BREG, B 103
MOVEM BREG, D 104
STOP 105
A DS 1 106
B DS 1 107
D DS 1 108
END 109
Example
LC IC code
START 100 (AD,01)(C,100)
100 READ A (IS,09) A
101 READ B (IS,09) B
102 MOVER BREG, A (IS,04) BREG, A
103 MULT BREG, B (IS,03) BREG, B
104 MOVEM BREG, D (IS,05) BREG, D
105 STOP (IS,00)
106 A DS 1 (DL,01)(C,1)
107 B DS 1 (DL,01)(C,1)
108 D DS 1 (DL,01)(C,1)
109 END (AD,02)
Index Name Address
0 A 106
1 B 107
2 D 108
Symbol Table
Example
IC code LC Machine code
(AD,01)(C,100) 00 00 000
(IS,09) A 100 09 00 106
(IS,09) B 101 09 00 107
(IS,04) BREG, A 102 04 02 106
(IS,03) BREG, B 103 03 02 107
(IS,05) BREG, D 104 05 02 108
(IS,00) 105 00 00 000
Advanced Assembler Directives
i. ORIGIN
• The syntax of this directive is ORIGIN <address specification>
where <address specification> is an <operand specification> or <constant>.
• This directive instructs the assembler to put the address given by <address
specification> in the location counter.
• The ORIGIN statement is useful when the target program does not consist of a single
contiguous area of memory.
• The ability to use an <operand specification> in the ORIGIN provides the ability to
change the address in the location counter in a relative manner.
• If the symbol LOOP is associated with the address 202, then the statement
ORIGIN LOOP+2
puts the address 204 in location counter.
Go To Index
Advanced Assembler Directives
ii. EQU
• The EQU directive has the syntax <symbol> EQU <address specification>.
where <address specification> is either a <constant> or
< symbolic name > −
+
<displacement>.
• The EQU statement simply associates the name <symbol> with the address specified
by <address specification>.
• However, the address in the location counter is not affected.
• If the symbol LOOP is associated with the address 202, then the statement
BACK EQU LOOP
will associate the symbol BACK with the address of LOOP, i.e. 202.
• In the second pass, the statement BC LT, BACK is assembled as ‘+07 1 202’.
Advanced Assembler Directives
iii. LTORG
• The LTORG directive, which stands for ‘origin of literals’, allows a programmer to
specify where literals should be placed.
• The assembler uses the following scheme for placement of literals: When the use of a
literal is seen in a statement, the assembler enters it into a literal pool unless a
matching literal already exists in a pool.
• At every LTORG statement and also at the END statement, the assembler allocates
memory to the literals of the literal pool.
• A literal pool would contain all literals used in the program since the start of the
program or since the previous LTORG statement.
• If a program does not use LTORG statement, the assembler would enter all literals
used in the program into a single pool and allocate memory to them when it
encounters the END statement.
Design of 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.
• Pass I uses the following data structures:
Pass 1 Pass 2
Assembly
Language
Machine
Language
Forward references table,
String storage buffer, Partially
configured object file
OPTAB A table of mnemonic opcode and related information
SYMTAB Symbol table
LITTAB A table of literals used in the program
POOLTAB A table of information concerning literal pools
Go To Index
Design of two pass assembler
• Tasks performed by the passes of a two-pass assembler are as follows:
Pass-I 1. Separate the symbol, mnemonic opcode and operand fields.
2. Build the symbol table.
3. Perform LC processing.
4. Construct intermediate representation.
Pass-II Synthesize the target program.
• Pass I performs analysis of the source program and synthesis of the intermediate
representation while Pass II processes the intermediate representation to synthesize
the target program.
Pass I Pass II
OPTAB SYMTAB LITTAB
Source
program
Source program
Intermediate
code
Program
listing
Design of two pass assembler
Target
Program
Figure: Use of data structures and files in a two-pass assembler
Design of two pass assembler
• The source program would be read by Pass I on a statement-by-statement basis.
• After processing, a source statement can be written into a file for subsequent use in
Pass II.
• The intermediate code generated for it would be written into another file.
• The target code and the program listing can be written as separate files by Pass II.
• Since all these files are sequential in nature, it is beneficial to use the techniques of
blocking and buffering of records.
Go To Index

Assembler - System Programming

  • 1.
    SHREE SWAMI ATMANANDSARASWATI INSTITUTE OF TECHNOLOGY System Programming (2150708) PREPARED BY: (Group:2) Bhumi Aghera(130760107001) Monika Dudhat(130760107007) Radhika Talaviya(130760107029) Rajvi Vaghasiya(130760107031) GUIDED BY: Prof. Dharmendra Singh Prof. Maitry Noticewala One pass assembler, Two pass assembler, Advanced Assembler Directives
  • 2.
    INDEX 1. One-pass assembler 2.Forward Reference 3. Two-pass assembler using variant-I 4. Two-pass assembler using variant-II 5. Advanced Assembler Directives 6. Design of two pass assembler
  • 3.
    One-pass assembler • Translateassembly language programs to object programs or machine code is called an Assembler. • The pass of an assembler is scan of the source program of the source program to generate a machine code. • If the operand contains an undefined symbol, use 0 as the address and write the text record to the object program. • Forward references are entered into lists as in the load-and-go assembler. • When the definition of a symbol is encountered, the assembler generates another Text record with the correct operand address of each entry in the reference list. • When loaded, the incorrect address 0 will be updated by the latter Text record containing the symbol definition. Go To Index
  • 4.
    Example: START 101 READ X READY MOVER AREG, X MULT AREG, Y MOVEM AREG, RESULT PRINT RESULT STOP X DS 1 Y DS 1 RESULT DS 1 END Here, X→108 Y→109 RESULT→110 Step:-1  Now, we give location counter(LC). LC 101 102 103 104 105 106 107 108 109 110 110
  • 5.
    Example: Instruction LC Machine code READX 101 09 0 108 READ Y 102 09 0 109 MOVER AREG, X 103 04 1 108 MULT AREG, Y 104 01 1 109 MOVEM AREG, RESULT 105 05 1 110 PRINT RESULT 106 10 0 110 STOP 107 00 0 000 X DS 1 108 -- Y DS 1 109 -- RESULT DS 1 110 -- Step:-2
  • 6.
    LC Opcode RegisterAddress 101 09 0 108 102 09 0 109 103 04 1 108 104 01 1 109 105 05 1 110 106 10 0 110 107 00 0 000 Step:-3 Example
  • 7.
    Forward Reference Go ToIndex • Omits the operand address if the symbol has not yet been defined. • Enters this undefined symbol into SYMTAB and indicates that it is undefined . • Adds the address of this operand address to a list of forward references associated with the SYMTAB entry. • When the definition for the symbol is encountered, scans the reference list and inserts the address. • At the end of the program, reports the error if there are still SYMTAB entries indicated undefined symbols. • One pass assembler does not allows forward reference. • Forward reference is using of variable before it declare.
  • 8.
    x Example: START 101 MOVER AREG,X L1:ADD BREX,ONE COMP BREG,TEN BC EQ,LAST ADD AREG,ONE BC ANY,L1 LAST STOP X DC “5” ONE DC “1” TEN DC “10” END LC 101 102 103 104 105 106 107 108 109 110 111 Opcode Register Address 04 1 --- 01 2 --- 60 2 --- 07 3 --- 01 1 --- 07 6 --- 000 00 --- Here, 5 forward reference.  Table for forward reference Address Forward reference symbol 101 X 102 ONE 103 TEN 104 LAST 105 ONE Step-1
  • 9.
    START 101 MOVER AREG,X L1:ADD BREX,ONE COMP BREG,TEN BC EQ,LAST ADD AREG,ONE BC ANY,L1 LAST STOP X DC “5” ONE DC “1” TEN DC “10” END LC 101 102 103 104 105 106 107 108 109 110 111 Opcode Register Address 04 1 108 01 2 109 60 2 110 07 3 107 01 1 109 07 6 102 00 0 000 00 0 005 00 0 001 00 0 010 Example Step-2
  • 10.
    Go To Index •Figure 1 shows an assembly program and its intermediate code using Variant I. • The first operand in an assembly statement is represented by a single digit number which is either a code in the range 1…4 that represents a CPU register, where 1 represents AREG, 2 represents BREG, etc., or the condition code itself, which is in the range 1…6 and has meaning. • The second operand, which is a memory operand, is represented by a pair of the form (operand class, code) where operand class is one of C,S and L: standing for Constant, Symbol and Literal, respectively. • For a constant, the code field contains the representation of the constant itself. • For example, in figure 1 the operand descriptor for the statement START 200 is (C,200). For a symbol table or literal, the code field contains the entry number of the operand in SYMTAB or LITTAB. Two pass assembler using variant-I
  • 11.
    • Thus entriesfor a symbol XYZ and a literal=‘25’ would be of the form(S, 17) and (L, 35), respectively. START 200 (AD,01) (C,200) READ A (IS,09) (S,01) LOOP MOVER AREG, A (IS,04) (1)(S,01) ⁞ ⁞ SUB AREG, =‘1’ (IS,02) (1)(L,01) BC GT, LOOP (IS,07) (4)(S,02) STOP (IS,00) A DS 1 (DL,02) (C,1) LTORG (DL,03) ….. ….. Figure 1: Intermediate code, variant I
  • 12.
    • This methodof representing symbolic operand requires a change in our strategy for SYMTAB management. • We have so far assumed that a SYMTAB entry is made for a symbol only when its definition is encountered in the program, i.e., when the symbol occurs in the table field of an assembly statement. MOVER AREG, A • However, while processing a forward reference it would be necessary to enter A in SYMTAB, say in entry number n, so that it can be represented by (S,n) in the intermediate code. • At this point, the address and length fields of A’s entry cannot be filled in. • Therefore, two kinds of entries may exist in SYMTAB at any time-for defined symbols and forward references. This fact is important for use during error detection.
  • 13.
    Example: START 200 MOVER AREG=‘5’ MOVEMAREG, X L1 MOVER BREG=‘2’ ORIGIN L1+3 LTORG NEXT ADD AREG=‘1’ SUB BREG=‘2’ BC LT, BACK LTORG BACK EQU L1 ORIGIN NEXT+5 MULT CREG=‘4’ STOP X DS 1 END LTORG  Now, we give location counter(LC). LC - 200 201 202 - 205,206 207 208 209 210,211 212 - LC 212 213 214 - 215
  • 14.
    Create SYMTAB START 200 MOVERAREG=‘5’ MOVEM AREG, X L1 MOVER BREG=‘2’ ORIGIN L1+3 LTORG NEXT ADD AREG=‘1’ SUB BREG=‘2’ BC LT, BACK LTORG BACK EQU L1 ORIGIN NEXT+5 MULT CREG=‘4’ STOP X DS 1 END LTORG LC - 200 201 202 - 205,206 207 208 209 210,211 212 - LC 212 213 214 - 215 Symbol ADDRESS 0 X 214 1 L1 202 2 NEXT 207 3 BACK 212
  • 15.
    Create LITTAB, POOLTAB START200 MOVER AREG=‘5’ MOVEM AREG, X L1 MOVER BREG=‘2’ ORIGIN L1+3 LTORG NEXT ADD AREG=‘1’ SUB BREG=‘2’ BC LT, BACK LTORG BACK EQU L1 ORIGIN NEXT+5 MULT CREG=‘4’ STOP X DS 1 END LTORG LC - 200 201 202 - 205,206 207 208 209 210,211 212 - LC 212 213 214 - 215 Literal ADDRESS 0 =‘5’ 205 1 =‘2’ 206 2 =‘1’ 210 3 =‘2’ 211 4 =‘4’ 215 Literal no. 0 0 1 2 2 4 LITTAB POOLTA B
  • 16.
    Create IC(Intermediate Code) START200 MOVER AREG=‘5’ MOVEM AREG, X L1 MOVER BREG=‘2’ ORIGIN L1+3 LTORG NEXT ADD AREG=‘1’ SUB BREG=‘2’ BC LT, BACK LTORG BACK EQU L1 ORIGIN NEXT+5 MULT CREG=‘4’ STOP X DS 1 END LTORG IC (AD,00) (C,200) (IS,04) (RG,01) (L,0) (IS,05) (RG,01) (S,0) (IS,04) (RG,02) (L,1) (AD,03) (C,205) (AD,05)(C,5)(AD,05)(C,2) (IS,01)(RG,01)(L,2) (IS,02)(RG,02)(L,3) (IS,07)(CC,01)(S,3) (AD,05)(C,1)(AD,05)(C,2) (AD,04)(S,1) (AD,05)(C,212) IC (IS,03)(RG,03)(L,4) (IS,00) (DL,01)(C,1) (AD,02) (DL,02)(C,4)
  • 17.
    Machine code LC - 200 201 202 - 205,206 207 208 209 210,211 212 LC - 212 213 214 - 215 Opcode RegisterAddress - - - 04 01 205 05 01 214 04 02 206 - - - 00 00 00 00 205 206 01 01 210 02 02 211 07 01 202 00 00 00 00 210 211 04 03 202 Machine code Operand Register Address - - - - - - 03 03 215 00 00 00 - - - 00 00 215
  • 18.
    Two Pass assemblerusing variant - II • This variant differs from variant I in that the operand field of the intermediate code may be either in processed from as in variant I, or in the source from itself. • For a declarative statement or an assembler directive, the operand field has to be processed in the first pass to support LC processing. • Hence the operand field of its intermediate code would contain the processed from of the operand. • For imperative statements, the operand field is processed to identify literal references and enter them in the LITTAB. • Hence operands that are literals are represented as (L,m) in the intermediate code. • There is no reason why symbolic references in operand fields of imperative statements should be processed during pass I, so they are put in the source form itself in the intermediate code. Go To Index
  • 19.
    Example LC START 100 READ A100 READ B 101 MOVER BREG, A 102 MULT BREG, B 103 MOVEM BREG, D 104 STOP 105 A DS 1 106 B DS 1 107 D DS 1 108 END 109
  • 20.
    Example LC IC code START100 (AD,01)(C,100) 100 READ A (IS,09) A 101 READ B (IS,09) B 102 MOVER BREG, A (IS,04) BREG, A 103 MULT BREG, B (IS,03) BREG, B 104 MOVEM BREG, D (IS,05) BREG, D 105 STOP (IS,00) 106 A DS 1 (DL,01)(C,1) 107 B DS 1 (DL,01)(C,1) 108 D DS 1 (DL,01)(C,1) 109 END (AD,02) Index Name Address 0 A 106 1 B 107 2 D 108 Symbol Table
  • 21.
    Example IC code LCMachine code (AD,01)(C,100) 00 00 000 (IS,09) A 100 09 00 106 (IS,09) B 101 09 00 107 (IS,04) BREG, A 102 04 02 106 (IS,03) BREG, B 103 03 02 107 (IS,05) BREG, D 104 05 02 108 (IS,00) 105 00 00 000
  • 22.
    Advanced Assembler Directives i.ORIGIN • The syntax of this directive is ORIGIN <address specification> where <address specification> is an <operand specification> or <constant>. • This directive instructs the assembler to put the address given by <address specification> in the location counter. • The ORIGIN statement is useful when the target program does not consist of a single contiguous area of memory. • The ability to use an <operand specification> in the ORIGIN provides the ability to change the address in the location counter in a relative manner. • If the symbol LOOP is associated with the address 202, then the statement ORIGIN LOOP+2 puts the address 204 in location counter. Go To Index
  • 23.
    Advanced Assembler Directives ii.EQU • The EQU directive has the syntax <symbol> EQU <address specification>. where <address specification> is either a <constant> or < symbolic name > − + <displacement>. • The EQU statement simply associates the name <symbol> with the address specified by <address specification>. • However, the address in the location counter is not affected. • If the symbol LOOP is associated with the address 202, then the statement BACK EQU LOOP will associate the symbol BACK with the address of LOOP, i.e. 202. • In the second pass, the statement BC LT, BACK is assembled as ‘+07 1 202’.
  • 24.
    Advanced Assembler Directives iii.LTORG • The LTORG directive, which stands for ‘origin of literals’, allows a programmer to specify where literals should be placed. • The assembler uses the following scheme for placement of literals: When the use of a literal is seen in a statement, the assembler enters it into a literal pool unless a matching literal already exists in a pool. • At every LTORG statement and also at the END statement, the assembler allocates memory to the literals of the literal pool. • A literal pool would contain all literals used in the program since the start of the program or since the previous LTORG statement. • If a program does not use LTORG statement, the assembler would enter all literals used in the program into a single pool and allocate memory to them when it encounters the END statement.
  • 25.
    Design of twopass 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. • Pass I uses the following data structures: Pass 1 Pass 2 Assembly Language Machine Language Forward references table, String storage buffer, Partially configured object file OPTAB A table of mnemonic opcode and related information SYMTAB Symbol table LITTAB A table of literals used in the program POOLTAB A table of information concerning literal pools Go To Index
  • 26.
    Design of twopass assembler • Tasks performed by the passes of a two-pass assembler are as follows: Pass-I 1. Separate the symbol, mnemonic opcode and operand fields. 2. Build the symbol table. 3. Perform LC processing. 4. Construct intermediate representation. Pass-II Synthesize the target program. • Pass I performs analysis of the source program and synthesis of the intermediate representation while Pass II processes the intermediate representation to synthesize the target program.
  • 27.
    Pass I PassII OPTAB SYMTAB LITTAB Source program Source program Intermediate code Program listing Design of two pass assembler Target Program Figure: Use of data structures and files in a two-pass assembler
  • 28.
    Design of twopass assembler • The source program would be read by Pass I on a statement-by-statement basis. • After processing, a source statement can be written into a file for subsequent use in Pass II. • The intermediate code generated for it would be written into another file. • The target code and the program listing can be written as separate files by Pass II. • Since all these files are sequential in nature, it is beneficial to use the techniques of blocking and buffering of records.
  • 29.