17-May-12
Chapter 7
Assembly Language Programming
Chap 7 Assembly Language
Programming
• Assembler
– Change mnemonic code into machine code
– Label can be used to represent symbolic address/data
– Directives : like pre-processing operator (#) in C
language.
• Linkage Editor
– Link objective code into executable file
(*.obj → *.exe)
1
17-May-12
FIGURE 7–1
Assembling a source program
Assembler
FIGURE 7–2
Pseudo code sketch of a two-pass operator
PASS 1 –
Establish symbol table
- Computing
address/symbol
PASS 2 –
Convert mnemonic code
into machine code
2
17-May-12
FIGURE 7–3
Use of the generic JMP mnemonic
Symbol Table :
Symbol →Address/Data
• Assembly program
– Machine instructions
MOV A, #0
– Assembler Directives
• Like Variable declaration in high-level language
– Assembler controls
• Conditional compiling
– Comments
After ; to EOL
……. ; this is a comment
3
17-May-12
• Formant of Assembly language
– case insensitive
[label:] mnemonic [operation] [,operand].. ; comment
Example :
PAR
…
EQU
500
; #define symbol
JNB
TI, $
; HERE: JNB TI, HERE
• Constant expression
– Implement by assembler
Examples:
MOV A, ‘9’-’0’
; ‘ ‘ means char constant
• Operators in constant expressions
– Arithmetic : + - * / MOD
– Logic : AND OR NOT XOR
– Relational : EQ NE LT LE GT GE
= <> < <= > >=
– Special : SHR SHL HIGH LOW ()
4
17-May-12
• Precedence of constant
()
HIGH LOW
/ MOD SHR SHL
+EQ NE LT LE GT GE =
NOT
AND
OR
XOR
<> < <= > >=
• Directives
(1) Assembler state control
• ORG – define the location of the code
• END – directive to tell assembler the end of source file
• USING – set the register bank
Examples :
ORG 100H
ORG $+100H
USING 3
PUSH AR7 ; now AR7 means $23H
….
END
5
17-May-12
(2) Symbol define
–
–
–
–
–
Segment
EQU
Storage initialization/reservation
Program link
Segment selection
(A) Segment define
In low-level language, the programmer need to manage the
location of program/data in memory
symbol
…..
SEGMENT
segment_type
; the following program was form a segment
; called symbol,
; The content is segment_type (code or data)
segment_type can be one of
• CODE (program)
• XDATA (the extended data segment)
• DATA (direct address space, 00-7fH)
• IDATA (indirect address space, 00-7FH 80-FFH for 8052)
• BIT (bit address space)
• CSEG AT (equivalent to SEGMENT CODE)
• DSEG AT
• XSEG AT
• ISEG AT
• BSEG AT
6
17-May-12
(B) EQU
like the named constant define in C (#define)
Example:
BASE EQU
10
other constants :
#10H, $(current location)
(C) Storage initialization/reservation
–
–
–
–
DS
DBIT
DB
DW
(define space, like unintialized array)
(define bit data)
(define byte data)
(define word data, low-byte in lower address)
Example 1:
LENGTH:
BUFFER:
PROG
…
LOOP:
DSEG AT 30H
EQU
40
DS
LENGTH
SEGMENT
MOV
MOV
MOV
BJNZ
CODE
R7, #LENGTH
R0, #BUFFER
@R0, #0
R7, LOOP
….
END
7
17-May-12
Example 2:
XLENGTH:
XBUFFER:
PROG
…
XSEG AT 4000H
EQU
1000
DS
XLENGTH
SEGMENT
MOV
CLR
MOVX
INC
MOV
CJNE
MOV
CJNE
LOOP:
CODE
DPTR, #XLENGTH
A
@DPTR, A
DTPR
A, DPL
A, #LOW(XBUFFER+XLENGTH+1),LOOP
A, DPH
A, #HIGH(XBUFFER+XLENGTH+1),LOOP
….
END
FIGURE 7–4
Use of the EXTRN and PUBLIC assembler directives
(3) Program link
Multi-file : EXTERN, PUBLIC directive
8
17-May-12
FIGURE 7–5
Defining and initiating absolute and relocatable segments
RSEG directive – reallocatable segment
FIGURE 7–6
Assembler controls supported by ASM51
9
17-May-12
FIGURE 7–6 (continued)
FIGURE 7–7
Assembler controls supported by ASM51
Linker operation
10
17-May-12
FIGURE 7–8a
Annotated example: linking relocatable segments and modules. (a) ECHO.LST. (b) IO.LST. (c)
EXAMPLE.M51.
Address-relative content
Need to fix in linkage
- reallocatable
FIGURE 7–8a
Annotated example: linking relocatable segments and modules. (a) ECHO.LST. (b) IO.LST. (c)
EXAMPLE.M51.
Symbol Table
11
17-May-12
FIGURE 7–8d (continued)
(c) EXAMPLE.M51.
Annotated example: linking relocatable segments and modules. (a) ECHO.LST. (b) IO.LST.
Output of linkage editor
-Symbol table
-Reallocatable address were
computed already
12