Sie sind auf Seite 1von 12

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)

17-May-12

FIGURE 71

Assembling a source program

Assembler

FIGURE 72

Pseudo code sketch of a two-pass operator

PASS 1 Establish symbol table - Computing address/symbol

PASS 2 Convert mnemonic code into machine code

17-May-12

FIGURE 73

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

17-May-12

Formant of Assembly language


case insensitive
[label:] mnemonic [operation] [,operand].. ; comment

Example :
PAR EQU JNB 500 TI, $ ; #define symbol ; 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 ()

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

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

17-May-12

(B) EQU
like the named constant define in C (#define)

Example: BASE EQU other constants :

10

#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: DSEG AT 30H EQU 40 DS LENGTH SEGMENT MOV MOV MOV BJNZ END CODE

LENGTH: BUFFER: PROG

LOOP: .

R7, #LENGTH R0, #BUFFER @R0, #0 R7, LOOP

17-May-12

Example 2: XSEG AT 4000H EQU 1000 DS XLENGTH SEGMENT MOV CLR MOVX INC MOV CJNE MOV CJNE END CODE

XLENGTH: XBUFFER: PROG LOOP:

DPTR, #XLENGTH A @DPTR, A DTPR A, DPL A, #LOW(XBUFFER+XLENGTH+1),LOOP A, DPH A, #HIGH(XBUFFER+XLENGTH+1),LOOP

FIGURE 74

Use of the EXTRN and PUBLIC assembler directives

(3) Program link Multi-file : EXTERN, PUBLIC directive

17-May-12

FIGURE 75

Defining and initiating absolute and relocatable segments

RSEG directive reallocatable segment

FIGURE 76

Assembler controls supported by ASM51

17-May-12

FIGURE 76 (continued)

Assembler controls supported by ASM51

FIGURE 77

Linker operation

10

17-May-12

FIGURE 78a 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 78a Annotated example: linking relocatable segments and modules. (a) ECHO.LST. (b) IO.LST. (c) EXAMPLE.M51.

Symbol Table

11

17-May-12

FIGURE 78d (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

Das könnte Ihnen auch gefallen