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