µ-PROCESOROVÁ TECHNIKA

Transkript

µ-PROCESOROVÁ TECHNIKA
ST EDNÍ PR MYSLOVÁ ŠKOLA, OSTRAVA - MORAVSKÁ OSTRAVA, KRATOCHVÍLOVA 7
(studijní text)
µ-PROCESOROVÁ TECHNIKA
Studijní text smí být používán pouze k výuce µ-procesorové techniky v SPŠ, Ostrava – Moravská Ostrava, Kratochvílova 7.
Není dovoleno dokument jakkoliv upravovat a samostatn používat jeho ásti.
SPŠ, OSTRAVA - MORAVSKÁ OSTRAVA, KRATOCHVÍLOVA 7
1
Charakteristika jazyka symbolických adres...................................................................................................... 3
Jazyk symbolických adres - úvod ................................................................................................................ 3
Jazyk symbolických adres - p eklad ............................................................................................................ 3
Cvi ení k probrané kapitole ......................................................................................................................... 5
2
Operandy a výrazy............................................................................................................................................ 6
2.1 Struktura p íkazové ádky............................................................................................................................ 6
2.2
íselné soustavy – direktívy assembleru ..................................................................................................... 6
2.3 Cvi ení k probrané kapitole ......................................................................................................................... 7
3
Zp soby adresování.......................................................................................................................................... 8
3.1 Obecné pojmy.............................................................................................................................................. 8
3.2 Styk s vn jší pam tí ..................................................................................................................................... 8
3.3 Cvi ení k probrané kapitole ......................................................................................................................... 9
4
Instruk ní soubor monolitického µ-po íta e typu 8051 ................................................................................. 10
4.1 Úvod do problematiky ............................................................................................................................... 10
4.2 D lení instrukcí podle funkce .................................................................................................................... 11
4.3 Cvi ení k probrané kapitole ....................................................................................................................... 11
5
Instruk ní soubor monolitických µ-po íta s jádrem I8051 ......................................................................... 12
5.1 Instrukce aritmetických operací................................................................................................................. 12
5.2 Instrukce logických operací a posun ........................................................................................................ 13
5.3 Instrukce p esun dat ................................................................................................................................. 14
5.4 Instrukce bitových operací......................................................................................................................... 15
5.5 Instrukce skok , volání a jiné .................................................................................................................... 15
6
P íklady použití instrukcí v programu ............................................................................................................ 17
6.1 Jednoduché programové segmenty ............................................................................................................ 17
6.2 Cvi ení k probrané kapitole ....................................................................................................................... 17
7
Aritmetické operace s ísly v r zných íselných soustavách ......................................................................... 18
7.1 Se ítání osmi bitových a šestnácti bitových ísel ...................................................................................... 18
7.2 Se ítání BCD ísel ..................................................................................................................................... 20
7.3 Rozdíl osmi bitových ísel......................................................................................................................... 21
7.4 Rozdíl šestnácti bitových ísel................................................................................................................... 22
7.5 Algoritmus násobení osmi bitových ísel .................................................................................................. 23
7.6 Cvi ení k probrané kapitole ....................................................................................................................... 24
8
Brzdící a zpož ovací smy ky ........................................................................................................................ 25
8.1 Brzdící smy ky .......................................................................................................................................... 25
8.2 Zpož ovací smy ky .................................................................................................................................. 28
8.3 Cvi ení k probrané kapitole ....................................................................................................................... 30
9
Zadání a rozbor projektu íslo jedna (p evodník BCD pro 7-mi segmentový display) .................................. 31
9.1 Zadání projektu .......................................................................................................................................... 31
9.2 Rozbor projektu ......................................................................................................................................... 32
10 P íloha – instruk ní soubor............................................................................................................................. 33
1.1
1.2
1.3
2 / 33
SPŠ, OSTRAVA - MORAVSKÁ OSTRAVA, KRATOCHVÍLOVA 7
1
Charakteristika jazyka symbolických adres
Klí ové pojmy: instrukce, pseudoinstrukce, editor, p eklada , zdrojový text, strojový kód.
1.1
Jazyk symbolických adres - úvod
Program v pam ti monolitického µ-po íta e je tvo en posloupností instrukcí ve strojovém kódu. Instrukce
jsou zapsány v binárním tvaru a obvykle jsou interpretovány v hexa tvaru (lepší itelnost).
Programování ve strojovém kódu je tedy velmi náro né na pozornost programátora (napsat delší program
bez chyb je velmi obtížné).
V sou asné dob se k programování používá jazyk symbolických adres a p eklada . Existují i nástroje
umož ující zápis zdrojového textu nap íklad v programovacím jazyce „C“. Kompilátory však nejsou univerzáln
optimalizovány. Tento zp sob zápisu m že být sice rychlejší, ale obvykle neumožní dosažení maximálního využití
pam tí monolitického µ-po íta e ani dosažení maximální rychlosti p eb hu programu.
V jazyce symbolických adres jsou instrukce vytvá eny jednoduchou syntaxí (mnemonickou zkratkou). To
umožní jejich snadné zapamatování.
P eklada je program provozovaný na „hostitelském po íta i“. Jeho úkolem je p eklad programu ze
zdrojové formy do strojového kódu monolitického µ-po íta e. Jazyk symbolických adres dovoluje ve spojení
s p eklada em (assembler-em) následující:
nahradit hexa tvar instrukce mnemonickým kódem;
symbolický zápis operand (registry, adresy, konstanty);
ozna ení místa v programu symbolickým náv štím;
ur ení po áte ní adresy pro uložení programu v pam ti;
uložení po átk zvolených segment programu na zvolené adresy;
zápis konstant v r zných íselných soustavách (nej ast ji: dec, hex, bin);
použití pseudoinstrukcí (makroinstrukce a direktivy assembleru).
K programování se používají p íkazy (instrukce jsou ur eny procesorovému jádru, pseudoinstrukce jsou
ur eny p eklada i).
Jazyk symbolických adres je tedy nástroj umož ující relativn
monolitický µ-po íta .
1.2
komfortní tvorbu program
pro
Jazyk symbolických adres - p eklad
P eklada je software-ový nástroj umož ující p eklad programu z formy zdrojového textu (forma vhodná
pro lov ka) do formy strojového kódu (forma vhodná pro monolitický µ-po íta ).
P i své innosti p eklada obvykle podává informace o syntaktických chybách, soupis jmen a náv ští,
výpis makroinstrukcí a jejich rozvoj.
P ed spušt ním p eklada e musí být k dispozici zdrojový text programu. Použitý editor musí text
generovat ve tvaru ASCII (American Standard Code for Information Interchange). Soubor musí být opat en
p íponou asm (*.asm).
K p ekladu zdrojového souboru do strojového kódu lze využít nap íklad p eklada a51.exe, jehož
parametrem je jméno p ekládaného souboru. Výsledkem p ekladu jsou soubory opat ené p íponou *.obj (objekt) a
*.lst (listing).
Soubor *.obj obsahuje program ur ený k zápisu do pam ti monolitického µ-po íta e vyjád ený v hexa
tvaru. Tento soubor musí být obvykle dále upravován.
Soubor *.lst obsahuje p vodní zdrojový text a navíc ísla p íkazových ádek, kódy instrukcí a jejich
adresy v pam ti programu. V p ípad , že se ve zdrojovém textu vyskytují syntaktické chyby obsahuje *.lst
komentovaná hlášení v místech jejich výskytu.
3 / 33
SPŠ, OSTRAVA - MORAVSKÁ OSTRAVA, KRATOCHVÍLOVA 7
Soubor *.obj je použit ke konverzi do binárního tvaru *.bin. (Tento soubor bude použit programátorem1
k zápisu kódu do pam ti monolitického µ-po íta e.) N kdy tato konverze probíhá ve skryté podob (konvertor je
sou ástí programátoru).
K realizaci p ekladu je výhodné použít dávkový soubor (zde !.bat), který obsahuje následující p íkazy:
a51 %1.asm
hexbin %1.obj %1.bin i
del %1.hex
rename %1.obj %1.hex
… dávkový soubor zajistí p eklad zdrojového textu *.asm, vytvo ení souboru *.hex (ten je využíván
simulátorem). Parametr i ur í tvar souboru *.bin.
K zápisu zdrojového textu programu lze využít editor EDIT, který je sou ástí opera ního systému
Windows. Proces p ekladu lze realizovat z p íkazové ádky. Oba programy mohou byt sou asn spušt ny
v oknech.
Ukázka zápisu programu, p ekladu a hlášení o chyb
Ukázka zápisu
programu
(syntaktická chyba).
Použití
dávkového
souboru pro
p eklad.
1
Nástroj k zápisu programu do pam ti monolitického µ-po íta e.
4 / 33
SPŠ, OSTRAVA - MORAVSKÁ OSTRAVA, KRATOCHVÍLOVA 7
Ohlášení
chyby
p eklada em.
Ozna ení
chyby
v listingu.
1.3
Cvi ení k probrané kapitole
Objasn te pojmy zdrojový text a strojový kód.
Popište postup realizace p ekladu zdrojového textu do strojového kódu.
Vysv tlete funkci dávkového souboru použitého k p ekladu zdrojového textu do strojového kódu.
5 / 33
SPŠ, OSTRAVA - MORAVSKÁ OSTRAVA, KRATOCHVÍLOVA 7
2
Operandy a výrazy
Klí ové pojmy: náv ští, typ operace, operand, komentá , pseudoinstrukce.
2.1
Struktura p íkazové ádky
Vzhledem k tomu, že název souboru (zdrojového textu) m že mít pouze osm znak , je vhodné na za átku
programu uvést bližší specifikaci programu, popis použitých I/O bran, pam ových bun k a další informace, které
umožní snadnou identifikaci souboru i po delší dob .
Vlastní program je zapo at p íkazem (direktivou p eklada e) .code. Další ádky obsahují program a na
jeho konci je op t p íkaz (direktiva p eklada e) .end. Jednotlivé ádky programu lze d lit do ty polí (pole jsou
z d vodu lepší p ehlednosti zápisu od sebe odd lena tabulátorem).
Navesti:
typ_operace
operand(y)
;komentá
Náv ští ~ je nepovinné a slouží k ozna ení po átku programového bloku, nebo adresy skoku ( ádky
zdrojového textu nejsou íslovány a není uvedena ani adresa instrukcí v pam ti). N které p eklada e vyžadují, aby
náv ští nebylo delší než šest znak , první znak musí být písmeno a náv ští je ukon eno znakem dvojte ka.
Typ operace ~ obsahuje mnemonickou zkratku instrukce, nebo pseudoinstrukce.
Pole operand ~ obsahuje jména registr , náv ští, nebo data se kterými instrukce operuje. V závislosti
na použité instrukci se m ní po et operand (0 ÷ 3).
P .:
add
a,r3 Jednotlivé operandy jsou odd lovány árkou. P ed n kterými operandy se používají
prefixy (# ~ hash, nebo @ ~ obchodní a).
Komentá ~ obsahuje r zné informace, které up es ují a objas ují funkci použitých p íkaz . Komentá
je d ležitou sou ástí tvo eného programu a jeho ú elem je zajišt ní srozumitelnosti programu v pr b hu zápisu,
lad ní a p i p ípadné pozd jší modifikaci. Komentá je p edznamenán znakem st edník. Znaky vpravo od
st edníku se neú astní p ekladu (nemusí být psány cesky, mohou být psány esky).
2.2
íselné soustavy – direktívy assembleru
K zápisu operand se používají následující vyjád ení:
•
Hexadecimální íslo ~ k rozlišení se využívá dvojice znak h´2. Zápis musí za ínat znaky 0 ÷ 9
(nelze h´F7, ale h´0F7). Rozsah znak 0 ÷ F.
•
Dekadické íslo ~ k rozlišení se využívá dvojice znak d´ (jedná se o privilegovanou íselnou
soustavu – použití rozlišovacích znak je nepovinné). Rozsah znak 0 ÷ 9.
•
Oktávové íslo ~ k rozlišení se využívají dvojice znak o´ nebo q´. Rozsah znak 0 ÷ 7.
•
Binární íslo ~ k rozlišení se využívá dvojice znak b´. Rozsah znak 0 ÷ 1.
•
Znaková konstanta ~ slouží ke konverzi znak do ASCII. P íklad: ´A´ ~ d´65, ´A´+1 ~ d´66.
•
Jméno s p i azenou hodnotou ~ aplikuje se prost ednictvím direktiv .set nebo .equ.
•
Jméno definované jako náv ští ~ k ozna ení adresy v pam ti programu.
•
Výraz ~ vzniká kombinací výše uvedených zápis .
Jména se používají ve zdrojovém textu k ozna ení: instrukcí, pseudoinstrukcí, pam ových bun k,
konstant, náv ští a maker. Používání jmen usnad uje zápis programu, ale i p emís ování blok v pam ti.
Podle zdroje jména d líme na:
2
o
jména rezervovaná ~ ozna ení instrukcí a direktiv;
o
jména definovaná p eklada em ~ do asná jména používaná v pr b hu p ekladu;
o
jména definovaná uživatelem ~ ozna ení náv ští, pam ových bun k, maker, …
znak apostrof
6 / 33
SPŠ, OSTRAVA - MORAVSKÁ OSTRAVA, KRATOCHVÍLOVA 7
Podle rozsahu platnosti d líme jména na:
lokální ~ mají platnost pouze v ur itých programových segmentech;
globální ~ mají platnost v rámci celého projektu.
Direktivy p eklada e ~ ovliv ují p eklad zdrojového textu do strojového kódu.
Nejpoužívan jší direktivy …
.code ~ po átek vlastního programu
.org ~ nastavení adresy pro následující instrukci (Nap íklad obsluha p erušení – p erušovací vektor. Je
pot eba sledovat zda nedošlo k vícenásobnému použití adres.)
.equ ~ p i azení symbolického jména pam ové bu ce, I / O brán , konstant , bitu
.set ~ obdoba equ, ale údaj lze v pr b hu zápisu programu m nit
.db ~ vyhrazení pam ového prostoru (až osm osmibitových položek (k uložení datových konstant)
.dw ~ jako db, ale až osm šestnácti bitových konstant
.end ~ ozna ení ukon ení zdrojového textu
2.3
Cvi ení k probrané kapitole
Popište jak vypadá typická struktura p íkazové ádky.
Vyjmenujte nej ast ji používané íselné soustavy.
Objasn te rozdíl mezi instrukcí a direktivou.
7 / 33
SPŠ, OSTRAVA - MORAVSKÁ OSTRAVA, KRATOCHVÍLOVA 7
3 Zp soby adresování
Klí ové pojmy: p ímá adresa, nep ímá adresa, relativní adresa.
3.1
Obecné pojmy
Instrukce zapsaná v jazyce symbolických adres mnemonickou zkratkou provádí operace s ur itými daty
nebo pam ovými bu kami.
Adresa ~ íselné ozna ení místa v pam ti (pojem adresa se m že vztahovat i k I/O port m a registr m
speciálních funkcí).
P ímý operand ~ nejedná se o adresu v pravém slova smyslu, ale o íselnou hodnotu (konstantu)
obsaženou v instrukci.
P ímá adresa ~ základní zp sob adresování. Instrukce obsahuje „po adové“ íslo bu ky v pam ti (ale i
ozna ení registru nebo portu).
y
x
z
M
E
M
0
K objasn ní pojmu
relativní adresování
3.2
Nep ímá adresa ~ sou ástí instrukce je adresa místa, na kterém se nachází
adresa p ímá. asto se používá k modifikaci datových oblastí prost ednictvím
smy ek.
Registrové adresování ~ zvláštní p ípad nep ímého adresování (adresa se
nachází v registru (registrech)).
Relativní adresování ~ úplná (absolutní) adresa vyjad uje „vzdálenost“
vybrané pam ové bu ky od po átku pam ti (p . y-o nebo z-0). Relativní adresa je
„vzdálenost“ vybrané pam ové bu ky od vztažné adresy x (p . y-x nebo z-x). Tato
adresa m že mít kladnou i zápornou orientaci. Relativní adresa je kratší, to umož uje
vyšší rychlost b hu programu a menší nároky na pam ový prostor v pam ti
programu.
Auto relativní adresování ~ zvláštní p ípad relativního adresování. Bázovou
adresou je adresa práv provád né instrukce.
Styk s vn jší pam tí
Ze schémat I/O bran je patrné, že pouze P0 je obousm rná. Brány P1, P2 a P3 jsou tzv. pseudoobousm rné.
Poznámka: Podle údaj výrobce m že být výstupní tranzistor (k zajišt ní logické úrovn L) zat žován proudem o
velikosti až 1,6 mA.
8
0
5
1
P0
ALE
data
latch
adresa
(L)
P2
adresa
(H)
RD
WR
RD
WR
M
E
M
Komunikace s vn jší pam tí dat
P i styku s externí pam tí programu je využíván signál PSEN, p i styku s pam tí dat signály RD a WR.
P i tení programu se vždy využívá 16-ti bitová adresa. P i komunikaci s pam tí dat lze použít 16-ti bitovou, nebo
8-mi bitovou adresu. Rychlost komunikace souvisí s použitím adresového prostoru. Mnohdy je výhodné rozd lit
pam do „stránek“ o velikosti 256 B a jednotlivé stránky volit prost ednictvím P2. Adresování v prostoru jedné
stránky je pak rychlejší. Nep esahuje-li externí pam dat velikost 256 B, lze P2 využít jako standardní I/O port.
Sestupná hrana signálu ALE zajistí zápis dolního bajtu adresy do vn jšího bufferu. S ur itým odstupem je
generován signál PSEN (ur uje dobu tení z pam ti programu (p ed vzestupnou hranou PSEN je tení bajtu
z pam ti programu dokon eno)).
8 / 33
SPŠ, OSTRAVA - MORAVSKÁ OSTRAVA, KRATOCHVÍLOVA 7
Pro zahájení komunikace s pam tí dat musí být signály ALE, PSEN, RD a WR na úrovni H. Signály RD
a WR ur ují sm r toku dat. P ed vzestupnou hranou RD nebo WR je p enos dat dokon en.
U monolitických µ-po íta s jádrem na bázi 8051 jsou využívány následující adresovací metody: p ímý
operand, p ímé adresování, nep ímé registrové adresování a auto relativní adresování.
K rozlišení r zných zp sob adresování se u 8051 používají prefixy. P ímý operand je ozna en prefixem
hash #. P ímá adresa je používána nej ast ji a proto se realizuje bez prefixu. K odlišení nep ímé adresy slouží
prefix obchodní a @.
Adresa jednoho z operand je asto vyjád ena nižšími t emi bity opera ního kódu (R0 ÷ R7 aktuální
registrové banky, A, B, AB, DPTR, C). Instrukce je kratší a b h programu m že být rychlejší.
P ímý operand je tvo en jedno bajtovou konstantou. P ímá adresa je tvo ena druhým bajtem instrukce a
lze takto adresovat nižších 128 B RWM nebo SFR. Nep ímé registrové adresování lze realizovat využitím R0
nebo R1 aktuální registrové banky (lze takto adresovat základní i rozší enou pam
(128 + 128 B)).
Prost ednictvím DPTR lze adresovat pam programu, nebo vn jší pam dat. Auto relativní adresování se
využívá k v tvení programu.
V sou asné dob se asto používají pam ti se sériovou sb rnicí (pomalejší komunikace, ale jednodušší
struktura obvodu).
3.3
Cvi ení k probrané kapitole
Objasn te pojem adresa.
Popište nep ímé adresování.
Uve te signály, které souvisí s adresováním vn jší pam ti.
9 / 33
SPŠ, OSTRAVA - MORAVSKÁ OSTRAVA, KRATOCHVÍLOVA 7
4 Instruk ní soubor monolitického µ-po íta e typu 8051
Klí ové pojmy: instrukce, pseudoinstrukce, makroinstrukce.
4.1
Úvod do problematiky
Instrukce je kódovaný p íkaz ur ený procesorovému jádru. Krom instrukcí se používají tzv.
pseudoinstrukce, tyto jsou ur eny p eklada i (nep ekládají se do cílového programu, ale ovliv ují p eklad).
Pseudoinstrukce d líme na direktivy assembleru (viz. téma 2.2) a makroinstrukce (zjednodušen vyjád eno
ozna ují p edem definované posloupnosti instrukcí). Makroinstrukce nezkracují program, ale šet í as
programátora a zlepšují p ehlednost zápisu zdrojového textu.
Instruk ní soubor monolitických µ-po íta na bázi jádra I8051 je tvo en 111 instrukcemi. Je však
použito pouze 43 r zných mnemonických zkratek pro 33 odlišných funkcí. (N kterým funkcím p ísluší v tší po et
vyjád ení (nap .: mov, movx, movc ~ p esuny), jiné mají shodnou mnemonickou zkratku, ale jiný operand nebo
jiný zp sob adresování).
Celkový po et instrukcí tvo ících instruk ní soubor je dán aplikací požadovaných funkcí na r zné druhy
operand .
D lení instrukcí podle r zných kritérií
D lení s ohledem na dobu pot ebnou k provedení
•
jedno taktové instrukce ~ 64 instrukcí
•
dvou taktové instrukce ~ 45 instrukcí
•
ty taktové instrukce ~ 2 instrukce
D lení s ohledem na velikost instrukce
o
jedno bajtové instrukce ~ 49 instrukcí
o
dvou bajtové instrukce ~ 46 instrukcí
o
t í bajtové instrukce ~ 16 instrukcí
D lení s ohledem na realizovanou funkci
instrukce aritmetických operací ~ 24 instrukcí
instrukce logických operací a posun ~ 25 instrukcí
instrukce p esun ~ 28 instrukcí
instrukce bitových operací ~ 12 instrukcí
instrukce skok , volání a jiné ~ 22 instrukcí
Legenda pro ozna ení operand v obecném zápisu instrukcí
rn
~
registry R0 ÷ R7
data
~
numerická hodnota
ri
~
registry R0 a R1
Sreg
~
zdrojové místo
dir
~
bu ka MEM (p ímá adresa)
Dreg
~
cílové místo
rel
~
relativní adresa
bit
~
ozna ení bitu
adr
~
absolutní adresa
reg
~
místo nebo hodnota
10 / 33
SPŠ, OSTRAVA - MORAVSKÁ OSTRAVA, KRATOCHVÍLOVA 7
4.2
D lení instrukcí podle funkce
Instrukce aritmetických operací ~ umožní zv tšení (zmenšení) obsahu pam ového místa. Jedná se o osmi
bitový aritmetický sou et (voliteln i s p íznakem p enosu). Rozdíl osmi bitových hodnot s ohledem na
p enos. Korekci p i manipulaci s BCD ísly. Sou in a podíl osmi bitových ísel. Lze pracovat jak
s pam ovými místy, tak i konstantami.
Instrukce logických operací a posun ~ umožní operace AND, OR (IOR), XOR, NOT a rotace. Lze pracovat jak
s pam ovými místy, tak i konstantami.
Instrukce p esun ~ umožní (využitím p ímého a nep ímého adresování) realizovat p esuny osmi bitových
hodnot v rámci celého adresového prostoru. Dále umožní realizovat vzájemnou zám nu obsah
pam ových míst, na ítání datových konstant z pam ti programu a operace se zásobníkem.
Instrukce bitových operací ~ umožní nastavení (nulování) bit v bitov adresovaném prostoru pam ti a ve
speciálních funk ních registrech p ístupných bitovou adresou. Logický sou et nebo sou in bitu
s p íznakem p enosu. (Funkce p íznaku p enosu je zde obdobná jako funkce akumulátoru pro
aritmetické operace.)
Instrukce skok , volání podprogram a jiné ~ umožní nepodmín né i podmín né skoky v programu. Dále
umožní volání podprogram , návrat z podprogram a obsluhu p erušení. Zde adíme i instrukce
využitelné k v tvení program na základ vyhodnocení podmínky po p edchozím provedení operace.
4.3
Cvi ení k probrané kapitole
Objasn te pojmy instrukce a pseudoinstrukce.
Popište kritéria použitá k d lení instrukcí.
Uve te symbolické ozna ení operand pro zápis instrukcí.
11 / 33
SPŠ, OSTRAVA - MORAVSKÁ OSTRAVA, KRATOCHVÍLOVA 7
5 Instruk ní soubor monolitických µ-po íta
s jádrem I8051
Není-li to výslovn uvedeno, instrukce neovliv uje p íznakové bity v PSW.
5.1
Instrukce aritmetických operací
add
a,Sreg
~ p i tení obsahu zdrojového místa k obsahu akumulátoru. Výsledek operace je
uložen v akumulátoru. Instrukce ovliv uje bity: C, AC, OV a P.
add
add
add
add
a,rn
a,dir
a,@ri
a,#data
~ sou
~ sou
~ sou
~ sou
et akumulátoru a registru aktuální registrové banky.
et akumulátoru a p ímo adresované bu ky pam ti RWM.
et akumulátoru a nep ímo adresované bu ky pam ti RWM.
et akumulátoru a datové konstanty.
addc
a,Sreg
~ p i tení obsahu zdrojového místa a p íznaku p enosu k obsahu akumulátoru.
Výsledek operace je uložen v akumulátoru. Instrukce ovliv uje bity: C, AC, OV a P.
addc
addc
addc
addc
a,rn
a,dir
a,@ri
a,#data
~ sou
~ sou
~ sou
~ sou
et akumulátoru, C a registru aktuální registrové banky.
et akumulátoru, C a p ímo adresované bu ky pam ti RWM.
et akumulátoru, C a nep ímo adresované bu ky pam ti RWM.
et akumulátoru, C a datové konstanty.
subb
a,Sreg
~ ode tení obsahu zdrojového místa a C od obsahu akumulátoru. Výsledek
operace je uložen v akumulátoru. Instrukce ovliv uje bity: C, AC, OV a P.
subb
subb
subb
subb
a,rn
a,dir
a,@ri
a,#data
~ rozdíl akumulátoru a registru aktuální registrové banky.
~ rozdíl akumulátoru a p ímo adresované bu ky pam ti RWM.
~ rozdíl akumulátoru a nep ímo adresované bu ky pam ti RWM.
~ rozdíl akumulátoru a datové konstanty.
inc
reg
~ zvýšení obsahu adresovaného místa o jedna (inkrementace).
inc
inc
inc
inc
inc
a
rn
dir
@ri
dptr
~ inkrementace akumulátoru.
~ inkrementace adresovaného registru aktuální registrové banky.
~ inkrementace p ímo adresované bu ky RWM.
~ inkrementace nep ímo adresované bu ky RWM.
~ inkrementace ukazatele datové pam ti.
dec
reg
~ snížení obsahu adresovaného místa o jedna (dekrementace).
dec
dec
dec
dec
a
rn
dir
@ri
~ dekrementace akumulátoru.
~ dekrementace adresovaného registru aktuální registrové banky.
~ dekrementace p ímo adresované bu ky RWM.
~ dekrementace nep ímo adresované bu ky RWM.
mul
ab
~ aritmetický sou in obsah akumulátoru a registru b. Nižší bajt výsledku je
uložen v akumulátoru, vyšší bajt výsledku v registru b. Instrukce ovliv uje: OV, P, C=0.
div
ab
~ obsah akumulátoru je vyd len obsahem registru b. Podíl je uložen
v akumulátoru a zbytek v registru b. Instrukce ovliv uje: OV, P, C=0.
da
a
~ dekadická korekce (obnoví BCD tvar ísla po aritmetické operaci). Instrukce
ovliv uje: C, AC, P.
Funkce:
1) Je-li hodnota nižší tetrády akumulátoru vyšší než 9, nebo je-li nastaven p íznak AC, bude k nižší tetrád
p i tena hodnota 6.
2) Je-li hodnota vyšší tetrády akumulátoru vyšší než 9, nebo je-li nastaven p íznak C, bude k vyšší tetrád
p i tena hodnota 6.
12 / 33
SPŠ, OSTRAVA - MORAVSKÁ OSTRAVA, KRATOCHVÍLOVA 7
5.2
Instrukce logických operací a posun
anl
a,Sreg
~ logický sou in obsahu zdrojového místa a obsahu akumulátoru. Výsledek je
uložen v akumulátoru. Instrukce ovliv uje: P.
anl
anl
anl
anl
a,rn
a,dir
a,@ri
a,#data
anl
Dreg,Sreg
uložen v Dreg.
anl
anl
dir,a
dir,#data
~ logický sou
~ logický sou
~ logický sou
~ logický sou
in akumulátoru a registru aktuální registrové banky.
in akumulátoru a p ímo adresované bu ky.
in akumulátoru a nep ímo adresované bu ky.
in akumulátoru a konstanty.
~ logický sou in obsahu zdrojového a obsahu cílového místa. Výsledek je
~ logický sou in akumulátoru a p ímo adresované bu ky.
~ logický sou in p ímo adresované bu ky a konstanty.
orl
a,Sreg
~ logický sou et obsahu zdrojového místa a obsahu akumulátoru. Výsledek je
uložen v akumulátoru. Instrukce ovliv uje: P.
orl
orl
orl
orl
a,rn
a,dir
a,@ri
a,#data
orl
Dreg,Sreg
uložen v Dreg.
orl
orl
dir,a
dir,#data
~ logický sou
~ logický sou
~ logický sou
~ logický sou
et akumulátoru a registru aktuální registrové banky.
et akumulátoru a p ímo adresované bu ky.
et akumulátoru a nep ímo adresované bu ky.
et akumulátoru a konstanty.
~ logický sou et obsahu zdrojového a obsahu cílového místa. Výsledek je
~ logický sou et akumulátoru a p ímo adresované bu ky.
~ logický sou et p ímo adresované bu ky a konstanty.
xrl
a,Sreg
~ výlu ný logický sou et obsahu zdrojového místa a obsahu akumulátoru.
Výsledek je uložen v akumulátoru. Instrukce ovliv uje: P.
xrl
xrl
xrl
xrl
a,rn
a,dir
a,@ri
a,#data
xrl
Dreg,Sreg
Výsledek je uložen v Dreg.
~ výlu
~ výlu
~ výlu
~ výlu
ný logický sou
ný logický sou
ný logický sou
ný logický sou
et akumulátoru a registru aktuální registrové banky.
et akumulátoru a p ímo adresované bu ky.
et akumulátoru a nep ímo adresované bu ky.
et akumulátoru a konstanty.
~ výlu ný logický sou et obsahu zdrojového a obsahu cílového místa.
xrl
xrl
dir,a
dir,#data
~ výlu ný logický sou et akumulátoru a p ímo adresované bu ky.
~ výlu ný logický sou et p ímo adresované bu ky a konstanty.
clr
a
~ nulování obsahu akumulátoru.
cpl
a
~ negování obsahu akumulátoru.
rl
a
~ rotace obsahu akumulátoru o jednu pozici vlevo.
rr
a
~ rotace obsahu akumulátoru o jednu pozici vpravo.
rlc
a
~ rotace obsahu akumulátoru p es p íznak C o jednu pozici vlevo.
rrc
a
~ rotace obsahu akumulátoru p es p íznak C o jednu pozici vpravo.
swap
a
~ zám na obsah vyšší a nižší tetrády akumulátoru.
13 / 33
SPŠ, OSTRAVA - MORAVSKÁ OSTRAVA, KRATOCHVÍLOVA 7
5.3
Instrukce p esun dat
mov
mov
mov
mov
mov
mov
mov
mov
mov
mov
mov
mov
mov
mov
mov
mov
mov
movc
movc
Dreg,Sreg
~ kopírování obsahu zdrojového místa do cílového místa (osm bit ).
a,rn
a,dir
a,@ri
a,#data
rn,a
rn,dir
rn,#data
dir,a
dir,rn
Ddir,Sdir
dir,@ri
dir,#data
@ri,a
@ri,dir
@ri,#data
dptr,#data16
a,@a+dptr
a,@a+pc
~ kopírování registru aktuální registrové banky do akumulátoru.
~ kopírování p ímo adresované bu ky do akumulátoru.
~ kopírování nep ímo adresované bu ky do akumulátoru.
~ vložení konstanty do akumulátoru.
~ kopírování akumulátoru do registru aktuální registrové banky.
~ kopírování p ímo adresované bu ky do registru.
~ vložení konstanty do registru aktuální registrové banky.
~ kopírování akumulátoru do p ímo adresované bu ky.
~ kopírování registru do p ímo adresované bu ky.
~ kopírování p ímo adresované bu ky do p ímo adresované bu ky.
~ kopírování nep ímo adresované bu ky do p ímo adresované bu ky.
~ vložení konstanty do p ímo adresované bu ky.
~ kopírování akumulátoru do nep ímo adresované bu ky.
~ kopírování p ímo adresované bu ky do nep ímo adresované bu ky.
~ vložení konstanty do nep ímo adresované bu ky.
~ vložení 16-bitové konstanty do ukazatele datové pam ti.
~ kopírování relativn adresovaných dat z pam ti programu do akumulátoru.
~ auto relativní kopírování dat z pam ti programu do akumulátoru.
movx
a,@Sreg
Instrukce ovliv uje: P.
~ kopírování z vn jší pam ti do akumulátoru s využitím nep ímé adresy.
movx
movx
a,@ri
a,@dptr
~ --||-- horní bajt adresy je samostatn nastaven na portu P2.
~ --||-- celá 16-bitová adresa je generována instrukcí.
movx
@Dreg,a
~ kopírování akumulátoru do vn jší pam ti.
movx
movx
@ri,a
@dptr,a
~ --||-- horní bajt adresy je samostatn nastaven na portu P2.
~ --||-- celá 16-bitová adresa je generována instrukcí.
xch
a,Sreg
~ zám na obsah zdrojového místa a akumulátoru. Instrukce ovliv uje: P.
xch
xch
xch
a,rn
a,dir
a,@ri
~ zám na akumulátoru a registru aktuální registrové banky.
~ zám na akumulátoru a p ímo adresované bu ky.
~ zám na akumulátoru a nep ímo adresované bu ky.
xchd
a,@ri
ovliv uje: P.
~ zám na nižších tetrád akumulátoru a nep ímo adresované bu ky. Instrukce
push
dir
~ vložení p ímo adresované bu ky do zásobníku. Instrukce inkrementuje
ukazatel zásobníku. (K archivaci akumulátoru je nutno použít ozna ení acc).
pop
dir
~ vložení informace z vrcholu zásobníku do p ímo adresované bu ky.
Instrukce dekrementuje ukazatel zásobníku. (K archivaci akumulátoru je nutno použít ozna ení acc).
14 / 33
SPŠ, OSTRAVA - MORAVSKÁ OSTRAVA, KRATOCHVÍLOVA 7
5.4
Instrukce bitových operací
clr
bit
~ nulování adresovaného bitu (bit = 0).
clr
c
~ nulování p íznaku C.
setb
bit
~ nastavení adresovaného bitu (bit = 1).
setb
c
~ nastavení p íznaku C.
cpl
bit
~ negace adresovaného bitu.
cpl
c
~ negace p íznaku C.
anl
c,bit
~ logický sou in adresovaného bitu a p íznaku C. Výsledek je uložen v C.
anl
c,/bit
~ logický sou in negace adresovaného bitu a p íznaku C. Výsledek uložen v C.
orl
c,bit
~ logický sou et adresovaného bitu a p íznaku C. Výsledek je uložen v C.
orl
c,/bit
~ logický sou et negace adresovaného bitu a p íznaku C. Výsledek uložen v C.
mov
c,bit
~ kopírování adresovaného bitu do p íznaku C.
mov
bit,c
~ kopírování p íznaku p enosu do adresovaného bitu.
Je z ejmé, že instrukce jejichž cílový registr se nachází v PSW obsah tohoto registru ovliv ují.
5.5
Instrukce skok , volání a jiné
acall
adr11
~“krátké“ volání podprogramu (v rámci prostoru 2kB). Obsah PC je uložen na
vrchol zásobníku. Dolních 11 bit PC je p epsáno.
lcall
adr16
~ „dlouhé“ volání podprogramu (v rámci prostoru 64kB). Obsah PC je uložen
na vrchol zásobníku. Obsah PC je p epsán.
ret
~ návrat z podprogramu. Dva bajty z vrcholu zásobníku jsou vloženy do PC.
reti
~ návrat z podprogramu pro obsluhu p erušení. Dva bajty z vrcholu zásobníku
jsou vloženy do PC. Je povoleno p erušení stejné a nižší priority.
ajmp
adr11
~ „krátký“ nepodmín ný skok. P epsání nižších 11 bit PC.
ljmp
adr16
~ „dlouhý“ nepodmín ný skok. P epsání všech16 bit PC.
sjmp
rel8
~ relativní skok na vzdálenost ± 27=128. (Osmý bit ur uje sm r skoku).
jmp
@a+dptr
~ relativní nep ímý skok. Obsah akumulátoru je považován za sedmibitové
íslo se znaménkem v druhém dopl ku.
jz
rel
~ podmín ný skok na relativní adresu byl-li výsledek p edchozí operace 0.
jnz
rel
~ podmín ný skok na relativní adresu nebyl-li výsledek p edchozí operace 0.
jc
rel
~ podmín ný skok na relativní adresu je-li nastaven p íznak C.
jnc
rel
~ podmín ný skok na relativní adresu není-li nastaven p íznak C.
bit,rel
~ podmín ný skok na relativní adresu je-li adresovaný bit nastaven.
jb
15 / 33
SPŠ, OSTRAVA - MORAVSKÁ OSTRAVA, KRATOCHVÍLOVA 7
jnb
bit,rel
jbc
bit,rel
adresovaného bitu.
~ podmín ný skok na relativní adresu není-li adresovaný bit nastaven.
~ podmín ný skok na relativní adresu je-li adresovaný bit nastaven a nulování
cjne
reg1,reg2,rel
~ podmín ný skok na relativní adresu v p ípad , že obsahy reg1 a reg2 nejsou
shodné. Je-li reg2 > reg1 dojde k nastavení p íznaku C. Je-li reg1 reg2 dojde k nulování p íznaku C.
cjne
cjne
cjne
cjne
a,dir,rel
a,#data,rel
rn,#data,rel
@ri,#data,rel
~ podmín
~ podmín
~ podmín
~ podmín
ný skok po porovnání akumulátoru a p ímo adresované bu ky.
ný skok po porovnání akumulátoru a konstanty.
ný skok po porovnání registru aktuální registrové banky a konstanty.
ný skok po porovnání nep ímo adresované bu ky a konstanty.
djnz
reg,rel
~ dekrementace registru a relativní skok v p ípad , že obsah registru není 0.
Instrukce ovliv uje: OV, P, C=0.
djnz
djnz
nop
rn,rel
dir,rel
~ podmín ný skok po dekrementaci registru aktuální registrové banky.
~ podmín ný skok po dekrementaci p ímo adresované bu ky.
~ prázdná instrukce (neprovádí žádnou innost a trvá jeden takt).
16 / 33
SPŠ, OSTRAVA - MORAVSKÁ OSTRAVA, KRATOCHVÍLOVA 7
6 P íklady použití instrukcí v programu
Klí ové pojmy: tetráda, nulování, nastavení a negace vybraných bit v bajtu.
6.1
Jednoduché programové segmenty
P íklad 1: Zapište segment programu, který zkopíruje dolní tetrádu portu P1 do pam ové bu ky (symbolicky
ozna ené zip) ve vnit ní pam ti.
.equ
mov
anl
mov
zip,127
a,p1
a,#b´00001111
zip,a
; p i azení jména zip hodnot 127
; kopírování informace z portu P1 do akumulátoru
; nulování horní tetrády z portu P1
; archivace výsledku
P íklad 2: Zapište segment programu, který zkopíruje dolní tetrádu portu P3 do horní tetrády pam ové bu ky zip
ve vnit ní pam ti. Obsah dolní tetrády zip nesmí být zm n n.
anl
mov
anl
swap
orl
zip,#b´00001111
a,p3
a,#b´00001111
a
zip,a
; nulování horní tetrády ZIP
; tení informace z portu P3
; nulování horní tetrády z portu P3
; p íprava pro zápis do horní tetrády ZIP
; zápis do horní tetrády ZIP
P íklad 3: Zapište segment programu, který neguje 0, 5 a 7 bit v bu ce zip. Ostatní bity nech jsou zachovány.
xrl
zip,#b´10100001
; negování vybraných bit v bu ce ZIP
P íklad 4 Zapište segment programu, který neguje bity 0, 5 a 7 v bu ce zip. Ostatní bity nech jsou nulovány.
anl
xrl
zip,#b´10100001
zip,#b´10100001
; nulování bit 1, 2, 3, 4 a 6 v bu ce ZIP
; negace bit 0, 5 a 7 v bu ce ZIP
P íklad 5: Zapište segment programu, který neguje bity 0, 5 a 7 v bu ce zip. Ostatní bity nech jsou nastaveny.
orl
xrl
zip,#b´01011110
zip,#b´10100001
; nastavení bit 1, 2, 3, 4 a 6 v bu ce ZIP
; negace bit 0, 5 a 7 v bu ce ZIP
P íklad 6: Zapište segment programu, který vloží do bu ky zip dvojnásobek hodnoty z portu P1. V p ípad , že
výsledek > 255 nech dojde k nastavení F0 v PSW.
clr
mov
rlc
mov
jnc
setb
Skip:
6.2
.
.
.
c
a,p1
a
zip,a
Skip
f0
; pro realizaci sou inu
; tení informace z portu
; A=A*2
; archivace výsledku
; výsledek není > 255 (b´11111111)
; výsledek je > 255
; další
; ásti
; programu
Cvi ení k probrané kapitole
Objasn te použití p íkazu .equ zip,127.
Popište funkci instrukce anl a,#b´00001111.
Uve te alternativní ešení k dosažení shodné funkce pro jnc Skip.
17 / 33
skok
SPŠ, OSTRAVA - MORAVSKÁ OSTRAVA, KRATOCHVÍLOVA 7
7 Aritmetické operace s ísly v r zných íselných soustavách
Klí ové pojmy: p ímá adresa, nep ímá adresa, instrukce add, instrukce addc, programový cykl.
7.1
Se ítání osmi bitových a šestnácti bitových ísel
P íklad 1:
Zakreslete algoritmus a zapište program realizující sou et dvou osmi
bitových konstant a výsledek archivujte v registru R7 aktuální
registrové banky.
start
pøesun K1
do A
Popis funkce algoritmu:
(1)
(1) Do akumulátoru se vloží jedna z konstant ur ených k sou tu.
(2) Po té se k obsahu akumulátoru (k první konstant ) p i te druhá
konstanta (akumulátor již obsahuje výsledek).
pøiètení K2
kA
(2)
(3) Nakonec se výsledek zkopíruje do registru R7.
Program pro sou et 8-mi bitových ísel
pøesun A
do R7
(3)
stop
.code
mov
a,#b´00101101
; K1 je v binárním tvaru
add
a,#25
; K2 je v dekadickém tvaru
mov
r7,a
; archivace výsledku
.end
Popis funkce programu:
Algoritmus sou tu 8-mi
bitových ísel
Symbol # (hash) je zde ve funkci prefixu a íselná hodnota vpravo od
n j je p eklada em považována za konstantu.
Symboly b´ozna ují íselnou soustavu (binární).
íslo 25 nemá ur enou íselnou soustavu (p edznamenání pro dekadickou íselnou soustavu je nepovinné).
Všeobecné zásady:
Jednotlivé p íkazy v programu se píší na samostatné ádky.
Direktivy assembleru jsou p edznamenány znakem „te ka“ (konkrétní syntaxe je závislá na zvoleném p eklada i).
Jednotlivá pole p íkazové ádky odd lujeme tabulátorem.
Za st edníkem je možno používat znaky s eskou diakritikou.
18 / 33
SPŠ, OSTRAVA - MORAVSKÁ OSTRAVA, KRATOCHVÍLOVA 7
P íklad 2:
Zakreslete algoritmus a zapište program realizující sou et dvou
šestnácti bitových ísel a dolní bajt výsledku archivujte v registru R7
a horní bajt výsledku v registru R6 aktuální registrové banky.
start
Popis funkce algoritmu:
pøesun K1L
do A
(1)
Se ítáme-li více bajtová ísla, postupujeme od bajt s nejnižší váhou.
(1) Do akumulátoru je zde umíst n nižší bajt prvního ísla.
(2) V dalším kroku je k n mu p i ten nižší bajt druhého ísla.
pøiètení K2L
kA
(2)
(3) Takto získaný nižší bajt výsledku je archivován na požadovaném
míst (R7).
Obdobný postup je použit pro sou et vyšších bajt obou ísel.
pøesun A
do R7
(3)
Program pro sou et 16-ti bitových ísel
.code
pøesun K1H
do A
pøiètení K2H
kA
mov
a,#h´0a2
; K1L je v hexa tvaru
add
a,127
; K2L je v RWM
mov
r7,a
; archivace výsledku
mov
a,@r0
; K1H - nep ímá adresa
addc
a,#27
; K2H v dekadickém tvaru
mov
r6,a
; archivace výsledku
.end
pøesun A
do R6
Popis funkce programu:
Symboly h´ p edznamenávají íslo v haxa soustav .
stop
Algoritmus sou tu 16-ti
bitových ísel
íslo v hexa soustav má cifru s vyšší váhou vyšší než 9 a proto musí
být p ed azena 0.
K sou tu bajt s nejnižší váhou je použita instrukce add, je-li výsledek
operace vyšší než 255, dojde k nastavení p íznaku C (v opa ném
p ípad bude p íznak C nulován).
Symbol @ p edznamenává nep ímou adresu (zde do akumulátoru je
p esunut obsah pam ové bu ky jejíž adresa se nachází v registru R0 aktuální registrové banky).
K sou tu bajt s vyšší váhou je použito instrukce addc, která zohled uje p ípadné nastavení p íznaku C, ke
kterému mohlo dojít v sou tu nižších bajt .
19 / 33
SPŠ, OSTRAVA - MORAVSKÁ OSTRAVA, KRATOCHVÍLOVA 7
7.2
Se ítání BCD ísel
P íklad 3:
podprogram souètu
pøesunalfa
do R0
(1)
Zakreslete algoritmus a zapište program realizující sou et ísel
BCD uložených v RWM tak, že na nižších adresách jsou vyšší
dvojice íslic. Adresy nejnižších slabik ísel jsou symbolicky
ozna eny ALFA a BETA. Délka ísel (po et obsazených slabik)
je symbolicky ozna ena jako PO ET. P edpokládá se, že ísla
mají shodnou délku a sudý po et íslic. Výsledek a je uložen na
místo p vodní hodnoty prvního ísla.
Popis funkce algoritmu:
pøesunbeta
do R1
(1)
Sou et bude realizován využitím cyklu za použití nep ímého
adresování.
K nep ímému adresování lze použít registry R0 a R1.
pøesun
pocet do R2
(2)
(1) Sou et bude realizován postupn od cifer s nejnižší váhou (do
R0 a R1 jsou umíst ny adresy cifer s nejnižší váhou).
(2) Registr R2 poslouží jako po ítadlo cykl .
(3) Po et pr chod cyklem je závislý na velikosti ísel.
nulováníC
Program pro sou et BCD ísel
.
.
.
pøesun
hodnoty doA
mov
r0,#alfa
; po áte ní
mov
r1,#beta
; adresy ísel
mov
r2,#pocet
; „po et“ cifer
c
; addc add
mov
a,@r0
; cifra prvního ísla
addc
a,@r1
; cifra druhého ísla
a
; obnovení BCD
@r0,a
; archivace výsledku
dec
r0
; p íští
dec
r1
; adresy
r2,Cykl
; se teno ?
pøiètení
hodnoty kA
clr
Cykl:
dekadická
korekce
da
aktualizace
adresy a
poèítadla
hotovo ?
mov
(3)
djnz
.
.
.
souèet dokonèen
Algoritmus sou tu BCD ísel
20 / 33
; ano !
SPŠ, OSTRAVA - MORAVSKÁ OSTRAVA, KRATOCHVÍLOVA 7
7.3
Rozdíl osmi bitových ísel
P íklad 4:
Zapište programový segment realizující rozdíl dvou osmi bitových ísel. P edpokládejte použití µ-po íta e jehož
procesorové jádro nedisponuje instrukcí pro rozdíl ísel. Úkol je tedy nutno ešit software-ov .
Rozbor úlohy:
Úkol bude ešen využitím druhého dopl ku.
13
-4
9
1101
- 0100
1001
1.
1011
+ 0001
1100
2.
1101
+ 1100
11001
Za p edpokladu, že menšenec – menšitel = rozdíl lze tento rozdíl vypo íst tak, že k menšenci p i teme druhý
dopln k menšitele.
První dopln k menšitel získáme tak, že menšitele negujeme (0100
dopl ku tak, že k tomuto p i teme íslo 1 (1011 + 1 = 1100).
1011). Druhý dopln k vytvo íme z prvního
Dojde-li p i sou tu menšence a druhého dopl ku menšitele k p enosu, je výsledek kladný, nedojde-li k p enosu je
výsledek záporný, a je pot eba jej vyjád it v druhém dopl ku.
4
- 13
-9
0100
- 1101
- 1001
1.
0010
+ 0001
0011
2.
0100
+ 0011
00111
Program pro rozdíl 8-mi bitových ísel
.code
.equ
dil,127
; definice
.equ
nec,126
; použitých
.equ
tel,125
; MEM bun k
.
.
mov
a,tel
; první a
cpl
a
; druhý
inc
a
; dopln k
a,nec
; rozdíl
Result
; výsledek
cpl
a
; úprava záporného
inc
a
; výsledku
setb
f0
; p íznak záporného výsledku
dil,a
; archivace výsledku
add
jc
0
skok
Result:
mov
.end
21 / 33
3.
1000
+ 0001
- 1001
SPŠ, OSTRAVA - MORAVSKÁ OSTRAVA, KRATOCHVÍLOVA 7
7.4
Rozdíl šestnácti bitových ísel
P íklad 5:
Zapište programový segment realizující rozdíl dvou šestnácti bitových ísel. P edpokládejte použití µ-po íta e
jehož procesorové jádro nedisponuje instrukcí pro rozdíl ísel. Úkol je tedy nutno ešit software-ov .
Program pro rozdíl 16-ti bitových ísel
.
.
.
.equ
dill,127
; nižší a vyšší
.equ
dilh,126
; bajt rozdílu
.equ
tell,125
; nižší a vyšší
.equ
telh,124
; bajt menšitele
.equ
necl,123
; nižší a vyšší
.equ
nech,122
; bajt menšence
.
.
mov
a,tell
; druhý dopln k
a
; dolního bajtu
add
a,#1
; menšitele
mov
dill,a
; jeho archivace
mov
a,telh
; druhý dopln k
a
; horního bajtu
addc
a,#0
;
mov
dilh,a
; jeho archivace
mov
a,dill
; rozdíl dolních
add
a,necl
; bajt
mov
dill,a
; uložení výsledku
mov
a,dilh
; rozdíl horních
addc
a,nech
; bajt
mov
dilh,a
; uložení výsledku
cpl
cpl
menšitele
.
.
.
K funkci programu:
P i realizaci rozdílu více bajtových rozdíl jsou druhé dopl ky vyšších bajt realizovány prost ednictvím p enosu
z nižších bajt . Vzhledem k tomu, že instrukce inc nemanipuluje s p íznakem C, je nutno k inkrementaci použít
instrukci add. Instrukce addc a,#0 realizuje p i tení p íznaku C k obsahu akumulátoru.
22 / 33
SPŠ, OSTRAVA - MORAVSKÁ OSTRAVA, KRATOCHVÍLOVA 7
7.5
Algoritmus násobení osmi bitových ísel
naètení
èinitelù
nulování poèítadla,
souèinu
a
pøíznaku pøenosu
Realizujeme-li aritmetický sou in dvou osmi
bitových ísel, výsledek m že být maximáln šestnácti bitový
(255 * 255 = 65025 (65535 > 65025)). K uložení výsledku
tedy posta í dva osmi bitové registry.
P íklad:
12 * 13 = 156
1100 * 1101
1100
0000
1100
1100
10011100
Sou in je ešen postupnými sou ty initele1 v závislosti na
tom, zda testované bity initele2 nabývají hodnoty 1 (viz.
p edm t CIT druhý ro ník).
a = èinitel 2
rotace akumulátoru
vpravo pres C
èinitel2 = a
Testované bity initele2 jsou postupn po ínaje LSb
b7
C == 1
souèinH =
souèinH
+èinitel1
b6
b5
b4
b3
b2
b1
b0
C
zavád ny do p íznaku C.
Posun druhého s ítance vlevo, nebo posun prvního s ítance
vpravo vyvolá shodnou zm nu vzájemné polohy obou
s ítanc . Druhé ešení je však s ohledem na zápis programu
výhodn jší.
Bit p i tený na po átku k LSb horního bajtu sou inu bude
po osmi rotacích p esunut na pozici LSb dolního bajtu
sou inu.
rotace (souèinH)
vpravo pøes C
rotace (souèinL)
vpravo pøes C
P íznak C musí být p ed dvojitou rotací roven 0. Tato
podmínka je pro další rotace zajišt na tím, že i dolní bajt
sou inu je na po átku vynulován (bity Z jsou nulové).
V pr b hu rotace ozna ené I. se LSb horního bajtu (X)
p esune do p íznaku C. V pr b hu rotace II. se obsah
p íznaku C (X) p esune na pozici MSb dolního bajtu (Y).
++ poèítadlo
I. horní bajt
X
C
Y
Z
II. dolní bajt
poèítadlo == 8
Dojde tak k propojení dvou osmi bitových registr , ímž
vznikne požadovaný šestnácti bitový registr.
Algoritmus sou inu
8-mi bitových ísel
23 / 33
SPŠ, OSTRAVA - MORAVSKÁ OSTRAVA, KRATOCHVÍLOVA 7
7.6
Cvi ení k probrané kapitole
Objasn te použití instrukce add k realizaci inkrementace.
Popište funkci instrukce da a.
P i realizaci sou inu uve te d vody vedoucí k použití posunu prvního s ítance vpravo, místo posunu
druhého s ítance vlevo.
24 / 33
SPŠ, OSTRAVA - MORAVSKÁ OSTRAVA, KRATOCHVÍLOVA 7
8 Brzdící a zpož ovací smy ky
Klí ové pojmy: brzdící smy ka, zpož ovací smy ka, vno ení.
UCC
BT1
UCC
8.1
R2
PX.Y
R1
PX.Y
BT2
P ipojení mechanického
spína e k I/O brán
Brzdící smy ky
V technické praxi je asto pot eba realizovat reakci µ-po íta e
na podn ty z vn jšího prost edí (nap íklad: ekání na stisk klávesy,
signál z idla, …). Mechanický spína lze k µ-po íta i p ipojit v zásad
dvojím zp sobem.
Sepnutím spína e BT1 se na I/O brán vytvo í úrove H, ale
sepnutím spína e BT2 se na I/O brán vytvo í úrove L. Druhý zp sob
sice funguje v negativní logice, ale je energeticky mén náro ný.
Uvedené algoritmy ukazují r zné zp soby vyhodnocení
sepnutí mechanických kontakt a liší se podle ú elu použití:
yes ?
yes ?
akce
akce
algoritmus 1
yes ?
algoritmus 2
yes ?
yes ?
yes ?
akce
akce 1
algoritmus 3
akce 2
algoritmus 4
25 / 33
SPŠ, OSTRAVA - MORAVSKÁ OSTRAVA, KRATOCHVÍLOVA 7
Po aktivaci kontaktu v p ípad
deaktivace kontaktu.
prvního algoritmu bude segment akce opakovan
provád n až do
Po aktivaci kontaktu v p ípad druhého algoritmu bude segment akce proveden pouze jednou
(p edpokládáme, že použitý kontakt je ešen jako bez zákmitový).
T etí algoritmus se od druhého liší v tom, že segment akce bude vykonán až po deaktivaci kontaktu.
V p ípad
tvrtého algoritmu slouží mechanický kontakt k v tvení programu.
Ukázka software-ového ešení:
Program pro první algoritmus
Button:
jnb
p3.7,Button
; nesepnuto
skok
.
.
; realizace „akce“
.
ajmp
Button
; návrat k testu kontaktu
Program pro druhý algoritmus
ButtNo:
jnb
p3.7,ButtNo
; nesepnuto
skok
.
.
; realizace „akce“
.
ButtYs:
jb
ajmp
p3.7,ButtYs
; sepnuto
ButtNo
; návrat k testu kontaktu
skok
Program pro t etí algoritmus
ButtNo:
jnb
p3.7,ButtNo
; nesepnuto
p3.7,ButtYs
; sepnuto
skok
ButtYs:
jb
skok
.
.
; realizace „akce“
.
ajmp
ButtNo
; návrat k testu kontaktu
26 / 33
SPŠ, OSTRAVA - MORAVSKÁ OSTRAVA, KRATOCHVÍLOVA 7
Program pro tvrtý algoritmus
jnb
p3.7,Akce2
; nesepnuto
skok
.
.
; realizace „akce1“
.
ajmp
EndAkce
; vynechání segmentu „akce2“
Akce2:
.
.
; realizace „akce2“
.
EndAkce:
.
; pokra ování programu
.
.
27 / 33
SPŠ, OSTRAVA - MORAVSKÁ OSTRAVA, KRATOCHVÍLOVA 7
8.2
Zpož ovací smy ky
P i konstrukci po íta lze sledovat snahy o eliminaci veškerých zpožd ní v zájmu dosažení maximálního
výpo etního výkonu. P esto je však n kdy nezbytné realizovat v programech asové prodlevy. (Nap íklad:
dosažení požadované doby signalizace, doba otev ení elektromagnetického zámku dve í, …).
K realizaci asové prodlevy lze využít íta e asova e v režimu asova , na požadovanou dobu lze µpo íta uvést do režimu sleep, nebo lze µ-po íta „zam stnat“ opakovaným provád ním programového segmentu.
výchozí
nastavení
reg
výchozí
nastavení
regi, rege
- - reg
- - regi
reg = = 0
regi = = 0
Jednoduchá zpož ovací
smy ka
- - rege
rege = = 0
Zpož ovací smy ka s
vno ením
Jednoduchá zpož ovací smy ka
mov
tau,#200
; nastavení doby zpožd ní
acall
Wait
; volání zpož ovací smy ky
tau,Wait
; (I) je-li TAU > 0
.
.
.
Wait:
djnz
ret
skok
; (II) návrat z podprogramu
28 / 33
SPŠ, OSTRAVA - MORAVSKÁ OSTRAVA, KRATOCHVÍLOVA 7
Výpo et doby pot ebné k realizaci segmentu:
clk = 200 * I + II = 200 * 24 + 24 = 4824
clk ~ po et period signálu z oscilátoru clk
kde:
200 ~ zde zvolená konstanta
I, II ~ doba pot ebná k provedení instrukce (viz. instruk ní soubor)
clk
t=
f clk
kde:
=
4824
= 0,402 ms
12 *10 6
t ~ doba pot ebná k provedení programového segmentu
fclk ~ použitá frekvence oscilátoru clk
Doba zpožd ní je pom rn krátká. K realizaci delších asových prodlev lze adit programy zpož ovacích
smy ek „za sebe“, ale výsledné zpožd ní by bylo dáno pouze sou tem díl ích zpožd ní. Výhodn jší je použití
zpož ovací smy ky s vno ením.
Zpož ovací smy ka s vno ením
mov
tau1,#100
; nastavení
mov
tau2,#0
; doby zpožd ní
acall
Wait
; volání zpož ovací smy ky
djnz
tau2,Wait
; (I) vnit ní smy ka
djnz
tau1,Wait
; (II) vn jší smy ka
.
.
.
Wait:
ret
; (III) návrat z podprogramu
Výpo et doby pot ebné k realizaci segmentu:
clk = (256 * I + II ) *100 + III = (256 * 24 + 24) *100 + 24 = 616824
kde:
clk ~ po et period signálu z oscilátoru clk
256 ~ po et p eb h vnit ní smy kou
100 ~ po et p eb h vn jší smy kou
I, II, III ~ doba pot ebná k provedení instrukce (viz. instruk ní soubor)
t=
kde:
clk
f clk
=
616824
= 51,402 ms
12 *10 6
t ~ doba pot ebná k provedení programového segmentu
fclk ~ použitá frekvence oscilátoru clk
K dosažení zpožd ní ádov sekundy lze snížit frekvenci oscilátoru clk (dojde i ke snížení výpo etního
výkonu µ-po íta e), nebo použít vícenásobného vno ení.
úkol .
za ízení.
Použijeme-li k realizaci asové prodlevy íta / asova , lze procesorové jádro využít k ešení jiných
Není-li pot eba navyšovat výpo etní výkon, lze systém uvést do režimu sleep a snížit tak spot ebu
29 / 33
SPŠ, OSTRAVA - MORAVSKÁ OSTRAVA, KRATOCHVÍLOVA 7
Kombinací brzdící a zpož ovací smy ky lze nap íklad
dosáhnout toho, že segment „akce“ bude proveden až po déle
trvajícím sepnutí kontakt (nebo po op tovném sepnutí kontakt ve
vhodném okamžiku).
yes ?
Reakce až na déle trvající sepnutí kontakt
Press:
jnb
acall
jnb
wait
.
p3.7,Press
; nestisknuto
Wait
; zpož ovací smy ka
p3.7,Press
; nestisknuto
skok
skok
; akce
.
.
yes ?
P edpokládáme, že podprogram Wait je již napsán a je k dispozici.
8.3
Cvi ení k probrané kapitole
Objasn te ú el s funkci jednoduché brzdící smy ky.
akce
Popište funkci jednoduché zpož ovací smy ky.
Uve te a popište vztah k výpo tu doby p eb hu programu.
Reakce až na "déle"
trvající sepnutí kontakt
30 / 33
SPŠ, OSTRAVA - MORAVSKÁ OSTRAVA, KRATOCHVÍLOVA 7
9 Zadání a rozbor projektu íslo jedna (p evodník BCD pro 7-mi
segmentový display)
9.1
Zadání projektu
Na bázi monolitických µ-po íta jsou asto realizována za ízení, která s obsluhou komunikují
interaktivním zp sobem. Ke komunikaci lze využít nap íklad levný 7-mi segmentový displej. íselné hodnoty
v binárním tvaru je pak pot eba p evést do tvaru vhodného k zobrazení na displeji. K p evodu lze využít HW
p evodník (nap íklad D146-7), nebo lze p evod realizovat samotným µ-po íta em. Toto ešení má adu výhod –
jednodušší struktura obvodu, nižší cena, vyšší spolehlivost, menší rozm ry, nižší hmotnost a menší p íkon.
Navrhované za ízení a binární kód p ivedený na dolní tetrádu portu P3 zobrazuje na displeji, který je
p ipojen k nižším sedmi bit m portu P1. K zobrazení bude použita sedmi segmentová zobrazovací jednotka se
spole nou anodou.
+5V
KA
KB
KC
KD
KE
KF
KG
7xR
p1.0
p1.1
p1.2
p1.3
p1.4
p1.5
p1.6
a
f
g
e
b
c
Schéma elektrického propojení prvk
displeje a rezistor omezijících proud
tekoucí jeho segmenty a uspo ádání
segment na displeji
d
K rozsvícení segmentu je pot eba p ivést k p íslušnému vstupu úrove „L“.
Výpo et hodnot rezistor omezujících proud tekoucí segmenty není p edm tem tohoto návrhu.
Zadání:
Na bázi -po íta e 8051 navrhn te systém, který po stisku tla ítka p ipojeného k portu P3.7 p evede
binární hodnotu p e tenou z dolní tetrády portu P3 do tvaru vhodného k zobrazení 7-mi segmentovým displejem
se spole nou anodou. Jednomu stisku tla ítka nech odpovídá pouze jedna p evedená hodnota.
Návrh bude obsahovat:
Zadání, teoretický rozbor, schéma zapojení, algoritmus s popisem, program s komentá em a záv r.
31 / 33
SPŠ, OSTRAVA - MORAVSKÁ OSTRAVA, KRATOCHVÍLOVA 7
9.2
Rozbor projektu
K p evodu binární hodnoty lze využít nap íklad
p evodní tabulku umíst nou v pam ti programu.
start
výchozí
nastavení
K na tení požadované hodnoty z tabulky lze využít
instrukci „movc a,@a+dptr“.
Popis funkce: Do dptr vložíme adresu po átku p evodní
tabulky (v symbolickém tvaru). Do akumulátoru pak vložíme
hodnotu ur enou k p evodu a po provedení instrukce „movc“
bude akumulátor obsahovat p evedenou hodnotu. Vlastní tabulka
je tvo ena direktivami „.db“.
Ukázka možného ešení p evodu
.
.
enter ?
.
mov
dptr,#Table
; nastavení vztažné adresy
a,@a+dptr
; tení hodnoty z tabulky
.
.
.
enter ?
movc
.
.
.
input
Table:
; po átek tabulky
.db
b´11000000, b´11111001, b´10100100, . . .
.db
...
.
convert
.
.
output
Redukovaný
algoritmus p evodu
P evod prost ednictvím tabulky lze realizovat i
využitím instrukce „movc a,@a+pc“.
P evod lze realizovat i jinými zp soby (nap íklad
na ítáním hodnot z RWM využitím nep ímého adresování,
na ítáním konstant).
32 / 33
SPŠ, OSTRAVA - MORAVSKÁ OSTRAVA, KRATOCHVÍLOVA 7
10 P íloha – instruk ní soubor
Na následujících stranách je uveden instruk ní soubor monolitických µ-po íta
vyráb ných firmou Atmel.
s jádrem I8051
Instruk ní soubor obsahuje:
•
mnemonickou zkratku instrukce;
•
symbolicky vyjád ené operandy (pokud jsou u dané instrukce používány);
•
stru ný popis funkce;
•
údaj o velikosti instrukce (po et bajt );
•
údaj o dob pot ebné k provedení instrukce.
Rozd lení instrukcí do kategorií se pon kud liší od rozd lení, které je uvedeno v kapitole 5 této
publikace.
33 / 33

Podobné dokumenty

Základy programování 8051

Základy programování 8051 nepodmíněný skok v rozsahu <-128,+127> SJMP nepodmíněný skok v rozsahu 2 kB AJMP nepodmíněný skok v celém adr. rozsahu LJMP nepodmíněný skok v celém adr. rozsahu JMP @A+DPTR Význa...

Více

Stáhnout

Stáhnout zdrojový program napsaný v JSA na další stupeň v procesu překladu - viz dále. Ono je totiž jednodušší říct: "...napsaný v assembleru" než "...napsaný v jazyce symbolických adres". Dále v textu budu...

Více

Návod - Samsung

Návod - Samsung Aviváže a podobné výrobky je třeba používat podle pokynů na nich uvedených. Závěrečná část sušicího cyklu probíhá bez tepla (cyklus zchlazování). Vyjměte z kapes všechny předměty, například zapalov...

Více

Kontrolní otázky ke zkoušce MIP

Kontrolní otázky ke zkoušce MIP Sestava AT89C52, vnější paměť programu od adresy 0 s obvodem EPROM27C256, paměť SRAM 6264 v prostoru XDATA od adresy 8000h (nezrcadlí se), dvě výstupní brány s obvody 74HCT573 (první od adresy 0A00...

Více

Středoškolská odborná činnost 2006/2007 DIY

Středoškolská odborná činnost 2006/2007 DIY výbojky co nejblíže kondenzoru. Díky tomuto umístění část paprsků, které by jinak směřovaly na stěny skříně projektoru, projde kondenzorem. Tyto paprsky jsou podle zákonů optiky o spojné čočce kond...

Více