Professional Documents
Culture Documents
Poglavlje V
Programiranje va
asembleru
C Kod
program.c
Asembler
Compajler C51
Objektni kod
program.obj
Objektni kod
program.obj
Linker BL51
Mainski kod
program
Uvod
ta je asembler?
Program koji prevodi simboliki kod (asemblerski jezik) u izvrni
objektni kod.
Objektni kod se moe izvriti na 8051 kompatibilnom MC
Pisanje programa na mainskom jeziku!
Simboliki prepoznatljive instrukcije
Tri osnovna dela asemblerskog programa
Mainske instrukcije kod koji se izvrava
Asemblerske direktive definiu strukturu programa i simbole i
generiu kod koji se ne izvrava (podatke, poruke i sl.)
Asemblerske kontrole upravljaju tokom asembliranja
Uvod
Modularno programiranje?
Sloenost i veliina programa pisanje programa u jednom ili vie
delova (modula)
Pristup modularnom programiranju kao i pri projektovanju hardvera.
Crna kutija sa ulazima i izlazima
Pogodnosti modularnog programiranja
Efikasan razvoj programa. Manji programi se lake razumevaju,
projektuju i testiraju.
Viestruka upotreba podprograma.
Jednostavnije debagiranja i izmena programa
Segment kao osnovni gradivni elemenat
Uvod
Segment
Blok programa ili podataka u memoriji.
Apsolutni ili relokatibilni.
Relokatibilni ima ime, tip i druge atribute. Segmenti sa istim imenom iz
razliitih modula (parcijalni segmenti) se kombinuju u jedan segment pomou
linkera.
Direktna prezentacija memorijskih prostora. Bit segmenti
FF
Unutranji
RAM
FFFF
Specijalni
Registri
Programska
memorija
64 K
FFFF
Spoljanji
RAM
64 K
80
IDATA
Unutranji
RAM
128 B
16 B /128 b
7F
DATA
2F
20
CODE
XDATA
BDATA
BIT
Uvod
Modul
Sadri vie segmenta ili parcijalnih segmenata.
Parcijalni ako postoji segment sa istim imenom u nekom drugom
modulu
Izvorni kod koji se moe prevoditi nezavisno.
Sadre definicije svih simbola koji se koriste u modulu.
Moe biti napisan kao jedan ASCII tekstualni fajl ili kao vie fajlova
korienjem direktive INCLUDE.
Elementi modula:
Asemblerske instrukcije
Direktive
Kontrole
Komentari
Simboli
Labele
Uvod
Porces prevoenja programa sa jednim modulom
Keil asembler A51.EXE. Razvojno okruenje, IDE.
Primer poziva sa komandne linije
A51 PROGRAM.A51
Izlaz iz asemblera
A51 MACRO ASSEMBLER V6.00 ASSEMBLY COMPLETE. 0
WARNING(S), 0 ERROR(S)
Linkovanje objektnih modula
Linker BL51.EXE generie apsolutni objektni fajl i map fajl koji sadri
statistike informacije i odgovarajue poruke.Sadri vie segmenta ili
parcijalnih segmenata.
BL51 PROGRAM.OBJ
Izlaz iz linkera
BL51 LINKER/LOCATER V4.00
LINK/LOCATE RUN COMPLETE. 0 WARNING(S), 0 ERROR(S)
Uvod
Porces prevoenja programa sa vie modula
Primer poziva sa komandne linije
A51 MODUL_1.A51
A51 MODUL_2.A51
A51 MODUL_3.A51
Ili
A51 MODUL_1.A51 MODUL_2.A51 MODUL_3.A51
Linkovanje objektnih modula
BL51 MODUL_1.OBJ MODUL_2.OBJ MODUL_3.OBJ
Direktive
Nasuprot instrukcijama, direktive ne generiu mainski kod
Imaju specijalni kod koji je smeten u asemblerski program i daju mu
instrukcije kako da izvri odreene funkcije
Mogu biti koriene za definisanje simbola, rezervaciju i inicijalizaciju
memorijskog prostora i kontrolu smetanja programskog koda
Kontrola segmenta
Pod segmentom se podrazumeva kontinualni programski
blok ili blok podataka
Primer:
Definicija funkcije (u programskoj memoriji)
Polje podataka (u memoriji podataka)
Primer:
PODACI
SEGMENT
<segment_memory_class>
SEGMENT
DATA
RSEG
PODACI
Apsolutni segment
Apsolutni segment oznaava fiksni memorijski segment. Kreira se
direktivama CSEG, DSEG i XSEG.
Konana lokacija segmenta poznata je u trenutku kompajliranja
Format direktive je sledei:
CSEG AT <address> ; definie apsolutni kodni segment
DSEG AT <address> ; definie apsolutni segment podataka
XSEG AT <address> ; definie apsolutni segment podataka u
; spoljanjem ramu
Primer:
CSEG
AT
0300H
DSEG
AT
040H
Primer:
ORG
80H
SEKUNDE:
MINUTI: DS
DSEG
ORG 30H
DS
1
1
;data segment
Definisanje simbola
Direktiva definisanja simbola dodeljuje simboliko ime
nekom iskazu ili registru
Iskaz moe biti konstanta, referenca na adresu ili drugo
simboliko ime
Znaaj primene simbolikih imena u itljivosti programa
Izmena programa jednostavnija dovoljno promeniti samo
u iskazu direktive
Ostali iskazi koji se referenciraju na simbol automatski se
podeavaju
<expression>
<register>
<expression>
<register>
Relacioni operatori
EQU
EQU
SET
EQU
SET
R3
;simb. ime registra
200 ;simb. ime constante
TOTAL/5
10
TABLE*TABLE
Svaka od ovih direktiva dodeljuje vrednost adrese simbolu. Format direktive je:
Symbol
Symbol
Symbol
Symbol
Symbol
BIT
CODE
DATA
IDATA
XDATA
<bit_address>
<code_address>
<data_address>
<idata_address>
<xdata_address>
bit_address
code_address
data_address
idata_address
xdata_address
BIT
2EH
Port2
DATA A0H
Inicijalizacija/rezervacija memorije
Direktive za inicijalizaciju i rezervisanje:
DB bajt, DW re i DD dupla re
Ove direktive inicijalizuju i rezerviu memorijski prostor u
formi bajta, rei ili duple rei u kodnom prostoru
Direktive za rezervisanje memorije bez inicijalizacije:
DS i DBIT
Ove direktive rezerviu specificirani broj bajtova ili bitova u
tekuem segmenu
DB (Define Byte)
Inicijalizacija kodne memorije bajt vrednostima
Format:
<label>:
DB
<expression>, <expression>,
label
Simboliko ime adrese gde se smetaju bajt vrednosti
expression
vrednost bajta, moe biti string karaktera, simbol, ili 8bitna konstanta
DB (Define Byte)
Primer:
CSEG AT 200H
MSG:
DB Please enter your password, 0
ARRAY: DB 10H,20H,30H,40H,50H
Prvi string karaktera smeta se kao ASCII string poev od
lokacije 200H u programskoj memoriji
([200H]=50H, [201H]=6CH i t.d.)
DB direktiva moe biti deklarisana samo u kodnom
segmentu
Ako se definie u drugom segmentu, asembler generie
greku
BSEG AT
DBIT 32
20H
;rezervisanje 32 bita
DW (Define Word)
DW direktiva inicijalizuje kodnu memoriju 16-bitnim reima
Ima format:
<label>:
DW
Primer:
;alociranje 2
CNTVAL: DW
;10 vrednosti
XLOC:
DW
<expression>, <expression>,
reci
1025H, 2340H
1234H pocev od lokacije XLOC
10 DUP (1234H)
<expression>, <expression>,
820056EFH, 10203040H
3 DUP ( 0 )
DS (Define Storage)
DS direktiva rezervie specificirani broj bajtova u tekuem
segmentu
Moe biti koriena u tekuem aktivnom segmentu
CSEG, ISEG, DSEG or XSEG
Ima format:
<label>:
DS
<expression>
DS (Define Storage)
Primer:
XSEG
AT 1000H
Ulaz:
DS
TipSignala: DS
USING direktiva
Ova direktiva definie koja e registarska banka (registri R0 do R7) biti
koriena u programu.
Direktiva ne vri izmenu sadraja PSW registra, ve se to mora
definisati programski
Primer:
USING 0
PUSH AR0
PUSH AR1
;Izbor RB 0
;smestanje u stek R0 iz RB0
;smestanje u stek R1 iz RB0
USING 1
PUSH AR0
PUSH AR1
Kontrolne direktive
Ove direktive se prepoznaju po simbolu $ koji se nalazi na poetku.
Predstavljaju komande koje definiu koje se sve fajlovi koriste u toku
kompajliranja programa, gde e biti smeteni izvrni fajlovi kao konani
izgled kompajliranog programa
$INCLUDE
Govori asembleru da koristi podatke smetene u drugom fajlu
Primer:
$INCLUDE (TABELA.ASM)
RET
RET