Assembler Features
Assembler Features
Todays Topic
Section 2.3 of Becks System Software book -Machine Independent Assembler Features
Literals Symbol Defining Statements Expressions Program Blocks Control Sections and Program Linking
Literals
Design idea
Let programmers write the value of a constant operand as a part of the instruction that uses it Avoid having to define the constant elsewhere in the program and make up a label for it
0000 0000 0003 0006 000A 000D 0010 0013 0017 001A 001D 0020 0023 0026 002A 0030 0033 0036 1036 1000
ENDFIL
START STL LDB BASE +JSUB LDA COMP JEQ +JSUB J LDA STA LDA STA +JSUB J LTORG RESW RESW RESB EQU EQU
0 RETADR #LENGTH LENGTH RDREC LENGTH #0 ENDFIL WRREC CLOOP =CEOF BUFFER #3 LENGTH WRREC @RETADR
17202D 69202D 4B101036 032026 290000 332007 4B10105D 3F2FEC 032010 0F2016 010003 0F200D 4B10105D 3E2003
115 120 125 130 132 133 135 140 145 150 155 160 165 170 175 180 185
1036 1038 103A 103C 1040 1043 1046 1049 104B 104E 1051 1053 1056 1059 105C
. READ RECORD INTO BUFFER . RDREC CLEAR X B410 CLEAR A B400 CLEAR S B440 +LDT #MAXLEN 75101000 RLOOP TD INPUT E32019 JEQ RLOOP 332FFA RD INPUT DB2013 COMPR A,S A004 JEQ EXIT 332008 STCH BUFFER,X 57C003 TIXR T B850 JLT RLOOP 3B2FEA EXIT STX LENGTH 134000 RSUB 4F0000 INPUT BYTE XF1 F1
4
195 200 205 210 212 215 220 225 230 235 240 245 255
. . WRITE RECORD FROM . WRREC CLEAR X LDT LENGTH WLOOP TD =X05 JEQ WLOOP LDCH BUFFER,X WD =X05 TIXR T JLT WLOOP RSUB END FIRST
BUFFER B410 774000 E32011 332FFA 53C003 DF2008 B850 3B2FEF 4F0000
Immediate operands
Operand value is assembled as part of the machine instruction 55 0020 LDA #3 010003
Literals
The assembler generates the specified value as a constant at some other memory location 45 001A ENDFIL LDA =CEOF 032010
Literal pools
Normally literals are placed into a pool at the end of the program
See Fig. 2.10 (END statement)
In some cases, it is desirable to place literals into a pool at some other location in object program
Use assembler directive LTORG: create a literal pool that contains all of the literal operands used since the previous LTROG, and place it where LTORG was encountered Reason: keep literal operand close to the instruction
5 10 13 14 15 20 25 30 35 40 45 50 55 60 65 70 93
0000 0000 0003 0006 000A 000D 0010 0013 0017 001A 001D 0020 0023 0026 002A 002D 0030 0033 0036 1036 1000
ENDFIL
START 0 STL RETADR LDB #LENGTH BASE LENGTH +JSUB RDREC LDA LENGTH COMP #0 JEQ ENDFIL +JSUB WRREC J CLOOP LDA =CEOF STA BUFFER LDA #3 STA LENGTH +JSUB WRREC J @RETADR LTORG =CEOF RESW 1 RESW 1 RESB 4096 EQU * EQU BUFEND -
17202D 69202D 4B101036 032026 290000 332007 4B10105D 3F2FEC 032010 0F2016 010003 0F200D 4B10105D 3E2003 454F46
(Figure 2.10)
BUFFER
8
115 120 125 130 132 133 135 140 145 150 155 160 165 170 175 180 185
1036 1038 103A 103C 1040 1043 1046 1049 104B 104E 1051 1053 1056 1059 105C
. READ RECORD INTO BUFFER . RDREC CLEAR X B410 CLEAR A B400 CLEAR S B440 +LDT #MAXLEN 75101000 RLOOP TD INPUT E32019 JEQ RLOOP 332FFA RD INPUT DB2013 COMPR A,S A004 JEQ EXIT 332008 STCH BUFFER,X 57C003 TIXR T B850 JLT RLOOP 3B2FEA EXIT STX LENGTH 134000 RSUB 4F0000 INPUT BYTE XF1 F1
9
195 200 205 210 212 215 220 225 230 235 240 245 255
105D 105F 1062 1065 1068 106B 106E 1070 1073 1076
. . WRITE RECORD FROM . WRREC CLEAR X LDT LENGTH WLOOP TD =X05 JEQ WLOOP LDCH BUFFER,X WD =X05 TIXR T JLT WLOOP RSUB END FIRST * =X05
BUFFER B410 774000 E32011 332FFA 53C003 DF2008 B850 3B2FEF 4F0000 05
10
Duplicate literals
215 230 1062 WLOOP 106B TD WD =X05 =X05
Assembler should recognize duplicate literals and store only one copy of specified data value
By comparing defining character string, e.g. =X05 By comparing the generated data value, e.g. =CEOF and =X454F46, but benefits are usually not great enough to justify the additional complexity in the assembler
11
Use LITTAB:
Literal name, operand value & length, operand address Build LITTAB with literal name, operand value/length When LTORG is encountered, assign address to each literal not yet assigned an address, update LOCCTR Search LITTAB for each literal encountered and generate the operand address Data values of literals in literal pool are generated similarly as using BYTE or WORD statements Generate modification record for literals that represent an address in the program
Pass 1
Pass 2
12
Todays Topic
Section 2.3 of Becks System Software book -Machine Independent Assembler Features
Literals Symbol Defining Statements Expressions Program Blocks Control Sections and Program Linking
13
14
Example 1:
MAXLEN 133 EQU +LDT 4096 #MAXLEN +LDT #4096 R1 R2 R3
Example 2:
BASE COUNT INDEX EQU EQU EQU
Example 3:
MAXLEN EQU BUFEND-BUFFER
15
Todays Topic
Section 2.3 of Becks System Software book -Machine Independent Assembler Features
Literals Symbol Defining Statements Expressions Program Blocks Control Sections and Program Linking
16
Expressions (1/2)
Expressions are evaluated by assembler to produce a single operand address or value Absolute or relative expressions
MAXLEN EQU BUFEND-BUFFER BUFEND and BUFFER are relative terms, representing addresses relative to program beginning change with program start address But, BUFEND-BUFFER has absolute value
When relative terms are paired with opposite signs, the dependency on starting address is canceled out; the result is an absolute value
17
Expressions (2/2)
No relative terms may enter into a multiplication or division operation; the followings are errors:
Type R R R A
Todays Topic
Section 2.3 of Becks System Software book -Machine Independent Assembler Features
Literals Symbol Defining Statements Expressions Program Blocks Control Sections and Program Linking
19
Program Blocks
Program blocks
Refer to segments of code that are rearranged within a single object program unit USE [blockname] Assembler will rearrange these segments to put together all source lines belonging to a block At the beginning, statements are assumed to be part of the unnamed (default) block
If no USE statements are included, the entire program belongs to this single block
20
Line
5 10 15 20 25 30 35 40 45 50 55 60 65 70 92 95 100 103 105 106 107 0000 0000 0003 0006 0009 000C 000F 0012 0015 0018 001B 001E 0021 0024 0000 0000 0003 0000 0000 1000 1000
Source statement
0 COPY 0 FIRST 0 CLOOP 0 0 0 0 0 3 0 blocks: ENDFIL Default (0) 0 0 CDATA (1) 0 CBLKS (2) 0 0 1 1 RETADR 1 LENGTH 2 2 BUFFER 2 BUFEND MAXLEN START STL JSUB LDA COMP JEQ JSUB J LDA STA LDA STA JSUB J USE RESW RESW USE RESB EQU EQU 0 RETADR 17202D RDREC 4B2021 LENGTH 032026 #0 290000 ENDFIL 332006 WRREC 4B203B CLOOP 3F2FEE =CEOF 032055 BUFFER 0F2056 #3 010003 LENGTH 0F2048 WRREC 4B2029 @RETADR 3E203F CDATA 1 (Figure 2.11) 1 CBLKS 4096 * 21 BUFEND - BUFFER
115 120 123 125 130 132 133 135 140 145 150 155 160 165 170 175 180 183 185
0027 0027 0029 002B 002D 0031 0034 0037 003A 003C 003F 0042 0044 0047 004A 0006 0006
. . 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1
READ RECORD INTO BUFFER USE RDREC CLEAR X B410 CLEAR A B400 CLEAR S B440 +LDT #MAXLEN 75101000 RLOOP TD INPUT E32038 JEQ RLOOP 332FFA RD INPUT DB2032 COMPR A,S A004 JEQ EXIT 332008 STCH BUFFER,X 57A02F TIXR T B850 JLT RLOOP 3B2FEA EXIT STX LENGTH 13201F RSUB 4F0000 USE CDATA 22 INPUT BYTE XF1 F1
195 200 205 208 210 212 215 220 225 230 235 240 245 252 253 255
004D 004D 004F 0052 0055 0058 005B 005E 0060 0063 0007
. . . 0 0 0 0 0 0 0 0 0 0 1
WRITE RECORD FROM BUFFER USE WRREC CLEAR X LDT LENGTH WLOOP TD =X05 JEQ WLOOP LDCH BUFFER,X WD =X05 TIXR T JLT WLOOP RSUB USE CDATA LTORG * =CEOF * =X05 END FIRST
0007 1 000A 1
Pass 1
Each program block has a separate location counter Each label is assigned an address that is relative to the start of the block that contains it At end of Pass 1, last value of the location counter for each block indicates the length of that block The assembler can then assign to each block a starting address in the object program The address of each symbol can be computed by adding the assigned block starting address and the relative address of the symbol to that block
24
Pass 2
Line Loc/Block
5 10 15 20 25 30 35 40 45 50 55 60 65 70 92 95 100 103 105 106 107 0000 0000 0003 0006 0009 000C 000F 0012 0015 0018 001B 001E 0021 0024 0000 0000 0003 0000 0000 1000 1000 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 2 2 2
Source statement
COPY FIRST CLOOP START STL JSUB LDA COMP JEQ JSUB J LDA STA LDA STA JSUB J USE RESW RESW USE RESB EQU EQU
Object code
0 RETADR 17202D RDREC 4B2021 LENGTH 032060 #0 290000 ENDFIL 332006 WRREC 4B203B CLOOP 3F2FEE =CEOF 032055 BUFFER 0F2056 #3 010003 LENGTH 0F2048 WRREC 4B2029 @RETADR 3E203F CDATA 1 (Figure 2.12) 1 CBLKS 4096 * 25 BUFEND - BUFFER
ENDFIL
115 120 123 125 130 132 133 135 140 145 150 155 160 165 170 175 180 183 185
0027 0027 0029 002B 002D 0031 0034 0037 003A 003C 003F 0042 0044 0047 004A 0006 0006
. . 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1
READ RECORD INTO BUFFER USE RDREC CLEAR X B410 CLEAR A B400 CLEAR S B440 +LDT #MAXLEN 75101000 RLOOP TD INPUT E32038 JEQ RLOOP 332FFA RD INPUT DB2032 COMPR A,S A004 JEQ EXIT 332008 STCH BUFFER,X 57A02F TIXR T B850 JLT RLOOP 3B2FEA EXIT STX LENGTH 13201F RSUB 4F0000 USE CDATA 26 INPUT BYTE XF1 F1
195 200 205 208 210 212 215 220 225 230 235 240 245 252 253 255
004D 004D 004F 0052 0055 0058 005B 005E 0060 0063 0007
. . . 0 0 0 0 0 0 0 0 0 0 1
WRITE RECORD FROM BUFFER USE WRREC CLEAR X LDT LENGTH WLOOP TD =X05 JEQ WLOOP LDCH BUFFER,X WD =X05 TIXR T JLT WLOOP RSUB USE CDATA LTORG * =CEOF * =X05 END FIRST
0007 1 000A 1
Figure 2.12
28
Program Readability
Program readability
No extended format instructions (lines 15, 35, 65) No need for base relative addressing (line 13, 14) LTORG is used to make sure the literals are placed ahead of any large data areas (line 253) It is not necessary to physically rearrange the generated code in the object program; loader can handle it See Fig. 2.13, Fig. 2.14
Object code
29
Figure 2.13
H COPY 000000 001071 T 000000 1E 172063 4B2021 032060 290000 332006 4B203B ... T 00001E 09 0F2048 4B2029 3E203F T 000027 1D B410 B400 B440 75101000 E32038 332FFA T 000044 09 3B2FEA 13201F 4F0000 T 00006C 01 F1 T 00004D 19 B410 772017 E3201B 332FFA 53A016 DF2012 T 00006D 04 454F46 05 E 000000 CDATA
30
Figure 2.14
31
Todays Topic
Section 2.3 of Becks System Software book -Machine Independent Assembler Features
Literals Symbol Defining Statements Expressions Program Blocks Control Sections and Program Linking
32
Control sections
Most often used for subroutines or other logical subdivisions of a program Programmer can assemble, manipulate, and load each of these control sections separately Instructions in one control section may need to refer to instructions or data in another section Thus, there should be some means for linking control sections together Fig. 2.15, 2.16: three control sections (COPY, RDREC, WRREC)
33
5 6 7 10 15 20 25 30 35 40 45 50 55 60 65 70 95 100 103
0000
0000 0003 0007 000A 000D 0010 0014 0017 001A 001D 0020 0023 0027 002A 002D
COPY
FIRST CLOOP
ENDFIL
RETADR LENGTH
* BUFFER BUFEND MAXLEN
START 0 EXTDEF BUFFER,BUFEND,LENGTH EXTREF RDREC,WRREC STL RETADR 172027 +JSUB RDREC 4B100000 LDA LENGTH 032023 COMP #0 290000 JEQ ENDFIL 332007 +JSUB WRREC 4B100000 J CLOOP 3F2FEC LDA =CEOF 032016 STA BUFFER 0F2016 LDA #3 010003 STA LENGTH 0F200A +JSUB WRREC 4B100000 J @RETADR 3E2000 RESW 1 (Figure 2.16) RESW 1 LTORG =CEOF 454F46 RESB 4096 EQU * 34 EQU BUFEND - BUFFER
109 115 120 122 125 130 132 133 135 140 145 150 155 160 165 170 175 180 185 190
0000 RDREC CSECT . READ RECORD INTO BUFFER . EXTREF BUFFER,LENGTH,BUFEND 0000 CLEAR X B410 0002 CLEAR A B400 0004 CLEAR S B440 0006 LDT MAXLEN 77201F 0009 RLOOP TD INPUT E3201B 000C JEQ RLOOP 332FFA 000F RD INPUT DB2015 0012 COMPR A,S A004 0014 JEQ EXIT 332009 0017 +STCH BUFFER,X 57900000 001B TIXR T B850 001D JLT RLOOP 3B2FE9 0020 EXIT +STX LENGTH 13100000 0024 RSUB 4F0000 0027 INPUT BYTE XF1 F1 35 0028 MAXLEN WORD BUFEND BUFFER 000000
193 195 200 205 207 210 212 215 220 225 230 235 240 245 255
0000 WRREC CSECT . . WRITE RECORD FROM BUFFER . EXTREF LENGTH,BUFFER 0000 CLEAR X B410 0002 +LDT LENGTH 77100000 0006 WLOOP TD =X05 E32012 0009 JEQ WLOOP 332FFA 000C +LDCH BUFFER,X 53900000 0010 WD =X05 DF2008 0013 TIXR T B850 0015 JLT WLOOP 3B2FEF 0018 RSUB 4F0000 END FIRST 001B * =X05 05
36
External definition
EXTDEF name [, name] Declare symbols that are defined in this control section and used by other sections
External reference
EXTREF name [,name] Declare symbols that are used in this control section and are defined elsewhere
For EXTREF labels, assembler has no idea where the corresponding control section will be loaded use 0
15 0003 160 0017 190 0028 CLOOP +JSUB RDREC 4B100000 +STCH BUFFER,X 57900000 MAXLEN WORD BUFEND-BUFFER 000000
37
Implementation
Assembler must include information in object program that will cause loader to insert proper values where required Define record
Col. 1 D Col. 2-7 Name of external symbol defined in this control section Col. 8-13 Relative address within this control section (hex) Col.14-73 Repeat info in Col. 2-13 for other external symbols Col. 1 R Col. 2-7 Name of external symbol referred to in this section Col. 8-73 Name of other external reference symbols
Refer record
38
Modification Record
Modification record
Col. 1 M Col. 2-7 Starting address of the field to be modified (hex) Col. 8-9 Length of the field to be modified, in half-bytes (hex) Col.11-16 External symbol whose value is to be added to or subtracted from the indicated field Note: control section name is automatically an external symbol, i.e. it is available for use in Modification records. Figure 2.17 M00000405+RDREC M00000705+COPY
Example
39
40
H RDREC 000000 00002B R BUFFER LENGTH BUFEND T 000000 1D B410 B400 B440 77201F E3201B 332FFA DB2015 ... T 00001D 0E 3B2FE9 13100000 4F0000 F1 000000 M 000018 05+BUFFER M 000021 05+LENGTH M 000028 06+BUFEND 190 MAXLEN WORD BUFEND - BUFFER M 000028 06-BUFFER E
H WRREC 000000 00001C R LENGTH BUFFER T 000000 1C B410 77100000 E32012 332FFA 53900000 DF2008 ... M 000003 05+LENGTH M 00000D 05+BUFFER E
41
Earlier definitions
Required all of the relative terms be paired in an expression (an absolute expression), or that all except one be paired (a relative expression) Both terms in each pair must be relative within the same control section Ex: BUFEND-BUFFER Ex: RDREC-COPY
New restriction
In general, assembler cannot determine whether or not the expression is legal at assembly time. This work will be handled by a linking loader.
42