Instrukční soubor řady 8051 Assembler
Úvod Instrukční soubor má 111 instrukcí a to : 1bytových - 49 2bytových - 45 3bytových - 17 Soubor se rozděluje do 5 funkčních skupin: přesuny dat, aritmetické operace, logické operace, bitové operace, operace pro předání řízení. Pro naše potřeby bude členění podrobnější.
Přesuny dat Přesuny dat se dále dělí do 3 kategorií: obecné přesuny přesuny týkající se střadače přesun adresy do cílového místa uložení
Obecné přesuny Pomocí instrukce MOV se provádí přesun bytů ze zdrojové adresy na cílovou adresu. Instrukce PUSH provádí inkrementaci obsahu registru ukazatele zásobníku a přesouvá byte do zásobníku adresovaného ukazatelem zásobníku. Instrukci POP přesouvá byte ze zásobníku adresovaného ukazatelem zásobníku do cílové adresy. Poté se provádí dekrementace ukazatele zásobníku. Pozor! Práce se zásobníkem je jiná než u procesoru Při ukládání se SP zvyšuje, při vybírání snižuje.
Přesuny týkající se střadače Instrukce XCH vyměňuje obsah zdrojové adresy s obsahem střadače. Instrukce XCHD vyměňuje obsah nižších řádů bytu zdrojové adresy s obsahem nižších řádů bytu střadače. Instrukce MOVX provádí přesun obsahu bytu mezi vnější pamětí dat a střadačem. Adresa ve vnější paměti je určena buď ukazatelem dat DPTR (2 byty) nebo registrem R0 či R1.
Instrukce MOVC přesouvá obsah bytu z paměti programu do střadače. Obsah střadače se užívá jako index v tabulce s délkou 256 bytů. Počátek tabulky je určen registrem báze (DPTR nebo PC). Výsledná adresa místa odkud se přesouvá obsah bytu do střadače, je dána součtem obsahu střadače a obsahu registru báze.
Přesun adresy do místa uložení Instrukce MOV DPTR,# data naplňuje 16bitovými přímými daty cílovou dvojici registrů DPH a DPL. Data pak představují adresu vnější paměti dat. Pozor! Zapisují se nejprve vyšší řády, potom řády nižší – opačně než u 8080.
Význam příkazů #data-přímá adresace (8bitová adresa příslušné vnitřní paměťové buňky je umístěna v registru R1), DPTR-nepřímá adresace (16bitová adresa příslušné vnější paměťové buňky je umístěna v registru DPTR (DPH,DPL)) data adr-přímá adresace (8bitová adresa příslušné vnitřní buňky je součástí instrukce), P2-nepřímá adresace (8 bitů představuje vyšší řády adresy příslušné vnější paměťové buňky, nižších 8 bitů adresy je v registru Rx).
Instrukce "čtení - modifikace - zápis" Některé instrukce jsou určeny pro čtení záchytného klopného obvodu brány, jiné pro čtení výstupu brány. Instrukce, které čtou data ze záchytného klopného obvodu brány, mohou jejich hodnotu měnit, při čemž se nová data opět zapíší do záchytného klopného obvodu. To jsou instrukce typu "čtení-modifikace-zápis". Mají-li jako operand bránu nebo bit brány, pak čtou záchytný klopný obvod a nikoliv vývod brány. Instrukce MOV, CLR a SET čtou všech 8 bitů záchytných klopných obvodů brány, modifikují adresový bit a zapíší nový byte zpět do příslušných záchytných klopných obvodů.
InstrukceFunkcePříklad ANLlogický součinANL P1,A ORLlogický součetORL P2,A XRLexclusivní součetXRL P3,A JBCpodmíněný skok, je-li bit = 1JBC P1.1,RET CPLinverze bituCPL P3.3 INCinkrementINC P2 DECdekrementDEC P2 DJNZpodmíněný skokDJNZ P3,RET MOV PX.Y,Cpřesun hodnoty přenosu do bitu y brány x CLR PX.Yvynulování bitu y brány x SET PX.Ynastavení bitu y brány x do H
Přesuny
- Přesun přímých dat na nepřímou adresu Provádí se přesun hodnoty 8bitových přímých dat do paměťové buňky ve vnitřní paměti dat adresované obsahem registru r. (Rr) ← data #05H Přesun čísla 05 na nepřímou adresu.
Poznámka. V paměti programu je uveden sled bytů, v jakém pořadí byl proveden překlad. Namísto kódu je však mnemotechnický zápis. Formát: #data Kódování: r r ,1 data data.…… až +256 strojových cyklů : 1 příznaky : - Poznámka: Záporná čísla jsou dvojkovém doplňku. Hodnoty jsou zapisovány v kódu hexadecimálním.
adr Přesun obsahu adresy vnitřní datové paměti na nepřímou adresu Provádí se přesun obsahu určené datové adresy do paměťové buňky vnitřní paměti dat adresované obsahem registru r. (Rr) ← data adr Přesun obsahu adresy 55H na nepřímou adresu.
Formát: adr Kódování: r r ,1 data adr data adr strojových cyklů: 2 příznaky: -
MOV C,bit adr - Přesun bitu do příznaku přenosu Provádí se přesun hodnoty bitu z bitové adresy do bitu příznaku přenosu. C ← (bit adr) MOV C,TxD Přesun hodnoty TxD do bitu příznaku přenosu.
Poznámka. TxD je výstup brány P3 bit 1 (kap. 1.1) Z obrázku 5b pak vyplývá, že se jedná o adresu registru B0H a adresu bitu B1. Formát: MOV C,bit adr Kódování: bit adr bit adr strojních cyklů: 1 příznaky: C
MOV DPTR,#data - Přesun přímých dat do ukazatele dat Provádí se přesun hodnoty 16bitových přímých dat do ukazatele dat DPTR ← data MOV DPTR,#0E5EH Inicializace ukazatele dat hodnotou 0E5EH
Formát: MOV DPTR,#data Kódování: data vyšší řády data nižší řády data strojních cyklů: 2 příznaky: -
MOV Rr,#data - Přesun přímých dat do registru Provádí se přesun hodnoty 8bitových přímých dat do registru r. Rr ←data MOV R5,#04H Inicializace registru 5 hodnotou 04H
Formát: MOV Rr,#data Kódování: 01111rrr r – 7 data data až +255 strojních cyklů: 1 příznaky: -
MOV Rr,data adr - Přesun obsahu datové adresy Provádí se přesun obsahu určené datové slabiky do registru r. Rr ← (data adr) MOV R3,57H Přesun obsahu adresy 57H do registru 3
Formát: MOV Rr,data adr Kódování: 10101rrr r – 7 data adr data adr strojních cyklů: 2 příznaky: -
MOV bit adr,C - Přesun příznaku přenosu do bitu bit adr ← C MOV 26H.7,C Přesun hodnoty příznaku přenosu na bitovou adresu
Formát: MOV bit adr,C Kódování: bit adr bit adr – 255 strojních cyklů: 2 příznaky: -
MOV data adr,#data - Přesun přímých dat na datovou adresu Provádí se přesun hodnoty 8bitových přímých dat na určenou datovou adresu. data adr ← data MOV TMOD,#01H - Inicializace módu (tab. 1.2, TMOD – adresa 89H)
Formát: MOV data adr,#data Kódování: data data adr – 255 data až +255 strojních cyklů: 2 příznaky: -
MOV data Přesun obsahu nepřímé adresy na datovou adresu Provádí se přesun obsahu paměťové buňky ve vnitřní paměti dat adresované registrem r na určenou datovou adresu. data adr ← ((Rr)) MOV Přesun obsahu nepřímé adresy na datovou adresu 25H
Formát: MOV data Kódování: r r ,1 data adr data adr....0 – 255 strojových cyklů: 2 příznaky: -
MOV data adr,Rr - Přesun obsahu registru na datovou adresu Provádí se přesun obsahu registru r na určenou datovou adresu data adr ← (Rr) MOV 5BH,R3 Přesun obsahu registru 3 na datovou adresu 5BH.
Formát: MOV data adr,Rr Kódování: 10001rrr r – 7 data adr data adr strojních cyklů: 2 příznaky: -
MOV data adr1,data adr2 Přesun obsahu datové adresy na datovou adresu Provádí se přesun obsahu zdrojové datové adresy (data adr2) na cílovou datovou adresu (data adr1). data adr 1 ← (data adr2) MOV TH1,17H Přesun obsahu z datové adresy 17H na datovou adresu registru TH1 (8DH).
Formát: MOV data adr1,data adr2 Kódování: data adr 2 data adr data adr1 data adr1...0 – 255 strojních cyklů: 2 příznaky: -
Operace se střadačem
- Přesun obsahu střadače na nepřímou adresu Provádí se přesun obsahu střadače do paměťové buňky ve vnitřní paměti dat adresované registrem r. (Rr) ← (A) Přesun obsahu střadače na nepřímou adresu
Formát: Kódování: r r ,1 strojových cyklů: 1 příznaky: -
MOV A,#data - Přesun přímých dat do střadače Provádí se přesun hodnoty 8bitových přímých dat do střadače A ← data MOV A,#05H Přesun čísla 5 do střadače
Formát: MOV A,#data Kódování: data data strojních cyklů: 1 příznaky: P
MOV - Přesun obsahu nepřímé adresy do střadače Provádí se přesun obsahu paměťové buňky vnitřní paměti dat adresované registrem r do střadače. A ← ((Rr)) MOV Přesun obsahu nepřímé adresy 1AH dané registrem R1 do střadače.
Formát: MOV Kódování: r r ,1 strojních cyklů: 1 příznaky: P
MOV A,Rr - Přesun obsahu registru do střadače Provádí se přesun obsahu registru r do střadače. A ← (Rr) MOV A,R7 Přesun obsahu registru R7 do střadače
Formát: MOV A,Rr Kódování: 11101rrr r strojových cyklů: 1 příznaky: P
MOV A,data adr - Přesun obsahu datové adresy do střadače Provádí se přesun obsahu určené datové adresy do střadače a ← (data adr) MOV A,P1 Přesun obsahu brány P1 do střadače
Formát: MOV A,data adr Kódování: data adr data adr strojových cyklů: 1 příznaky: P
MOV Rr,A - Přesun obsahu střadače do registru Provádí se přesun obsahu střadače do registru r. Rr ← (A) MOV R5,A Přesun obsahu střadače do registru 5
Formát: MOV Rr,A Kódování: 11111rrr r strojových cyklů: 1 příznaky: -
MOV data adr,A - Přesun obsahu střadače na datovou adresu Provádí přesun obsahu střadače na určenou datovou adresu. data adr ← (A) MOV 45H,A Přesun obsahu střadače na datovou adresu.
Formát: MOV data adr,A Kódování: data adr data adr strojních cyklů: 1 příznaky: -
MOVC - Přesun obsahu paměťové buňky z paměti programu ze složené adresy (DPTR) do střadače Provádí se součet obsahu střadače s obsahem ukazatele dat. Součet se považuje za adresu v paměti dat. Obsah této adresy se přesune do střadače. Vyšší řády adresy se přesunou do brány 2, nižší řády adresy do brány 0. A ← ((A) + (DPTR)) MOVC Přesun obsahu vnější paměti dat do střadače
Formát: MOVC Kódování: strojních cyklů: 2 příznaky: P
MOVC - Přesun obsahu paměťové buňky z paměti programu ze složené adresy (PC) do střadače Provádí se součet obsahu střadače s obsahem inkrementovaného programového čítače. Součet je považován za adresu v paměti programu. Obsah adresy se přesune do střadače. Vyšší řády adresy se přesunou do brány 2, nižší řády do brány 0. PC ← (PC)+1 A ← ((A)+(PC)) MOVC Přesun vnější paměti dat do střadače
Formát: MOVC Kódování: strojních cyklů: 2 příznaky: P
- Přesun obsahu střadače do vnější paměti dat adresované ukazatelem dat Provádí se přesun obsahu střadače do vnější paměti dat na adresu, kterou obsahuje ukazatel dat. (DPTR) ← (A) Přesun obsahu střadače do vnější paměti dat na adresu uloženou v DPTR
Formát: Kódování: strojních cyklů: 2 příznaky: -
- Přesun obsahu střadače do vnější paměti dat adresované registrem Provádí se přesun obsahu střadače do vnější paměti dat na adresu, kterou obsahuje registr r a SFR registr P2. Vyšší řády adresy jsou v registru P2, nižší řády adresy v registru r. (Rr) ← A MOV P2,#00H - Přesun obsahu střadače na nepřímou adresu
Formát: Kódování: r r ,1 strojních cyklů: 2 příznaky: -
MOVX - Přesun obsahu bytu z vnější paměti dat adresované ukazatelem dat do střadače Provádí se přesun obsahu bytu z vnější paměti dat adresované ukazatelem dat do střadače. Vyšší řády ukazatele dat se přesunou do brány 2, nižší řády do brány 0. A ← ((DPTR)) MOVX Přesun bytu z vnější paměti dat do střadače
Formát: MOVX Kódování: strojních cyklů: 2 příznaky: P
MOVX - Přesun bytu z vnější paměti dat adresované registrem do střadače Provádí se přesun bytu z vnější paměti dat adresované obsahem registru r a obsahem SFR P2 do střadače. Vyšší řády adresy jsou v P2, nižší řády jsou v registru r. A ← ((Rr)) MOV P2,#62H MOVX - Přesun z vnější paměti dat do střadače
Formát: MOVX Kódování: r r ,1 strojních cyklů: 2 příznaky: P Poznámka. Vyšší řády adresy se získají přenosem přímých dat na bránu P2, nižší řády například z registru R1.
Výměny registrů
XCH - Výměna obsahu nepřímé adresy s obsahem střadače Provádí se výměna obsahu paměťové buňky vnitřní paměti dat adresované registrem r s obsahem střadače. dočasný registr ← ((Rr)) (Rr) ← (A) A ← (dočasný registr) XCH - Výměna obsahu střadače a buňky paměti dat
Formát: XCH Kódování: r r ,1 strojních cyklů: 1 příznaky: P
XCH A,Rr - Výměna obsahu registru s obsahem střadače Provádí se výměna obsahu registru r s obsahem střadače dočasný registr ← (Rr) Rr ← (A) A ← (dočasný registr) XCH A,R5 - Výměna obsahu registru R5 s obsahem střadače
Formát: XCH A,Rr Kódování: 11001rrr r strojních cyklů: 1 příznaky: P
XCH A,data adr - Výměna obsahu datové adresy s obsahem střadače dočasný registr ← (data adr) data adr ← (A) A← (dočasný registr) XCH A,ABH - Výměna obsahu adresy ABH s obsahem střadače
Formát: XCH A,data adr Kódování: data adr data adr strojních cyklů: 1 příznaky: P
XCHD - Výměna nižších řádů mezi obsahem nepřímé adresy a střadačem Provádí se výměna obsahu nižších řádů buňky (bit 3 - 0) vnitřní paměti dat adresované registrem r a obsahem nižších řádů (bit 3 - 0) střadače. Vyšší řády (bity 7 - 4) jsou beze změny. XCHD - Výměna nižších řádů buňky vnitřní paměti dat a střadače
dočasný registr ← ((Rr))0-3 (Rr)0-3 ← (A)0-3 A0-3 ← (dočasný registr) Formát: XCHD Kódování: r r ,1 strojních cyklů: 1 příznaky: P
SWAP A - Výměna nižších a vyšších řádů ve střadači Provede se výměna nižších (bity 0 - 3) a vyšších (bity 4 -7) řádů střadače.
Formát: SWAP A Kódování: strojních cyklů: 1 příznaky: -
Inkrementace a dekrementace
- Zvýšení obsahu nepřímé adresy o 1 Provádí se zvýšení obsahu paměťové buňky vnitřní paměti dat adresované obsahem registru r o 1. Výsledek je v adresované paměťové buňce. (Rr) ← ((Rr)) Zvýšení obsahu čítače o 1
Formát: Kódování: r r ,1 strojních cyklů: 1 příznaky: -
INC A - Zvýšení obsahu střadače o 1 Provádí se zvýšení obsahu střadače o 1. Výsledek je ve střadači. A ← (A) INC A - Zvýšení obsahu střadače o 1
Formát: INC A Kódování: strojních cyklů: 1 příznaky: P
INC DPTR - Zvýšení obsahu ukazatele dat o 1 Provádí se zvýšení obsahu 16bitového ukazatele dat o 1. Výsledek je v ukazateli dat. DPTR ← (DPTR) + 1
Formát: INC DPTR Kódování: strojních cyklů: 2 příznaky: -
INC Rr - Zvýšení obsahu registru o 1 Provede se zvýšení obsahu registru o 1. Výsledek je v registru r. Rr ← (Rr) + 1
Formát: INC Rr Kódování: 00001rrr r strojních cyklů: 1 příznaky: -
INC data adr - Zvýšení obsahu datové adresy o 1 Provádí se zvýšení obsahu určené datové adresy o 1. Výsledek je v adresovaném paměťovém místě. data adr ← (data adr) + 1 INC 23H – Zvýšení obsahu adresy 23H o 1
Formát: INC data adr Kódování: data adr data adr strojních cyklů: 1 příznaky: -
- Snížení obsahu nepřímé adresy o 1 Provádí se snížení obsahu paměťové buňky vnitřní paměti dat adresované obsahem registu r o 1. Výsledek je v adresované paměťové buňce. (Rr) ← ((Rr)) – 1 - Provede snížení obsahu adresy 27H dané obsahem registru R0 o 1
Formát: Kódování: r r ,1 strojových cyklů: 1 příznaky: -
DEC A - Snížení obsahu střadače o 1 Provádí se snížení obsahu střadače o 1. Výsledek je ve střadači. A ← (A) - 1
Formát: DEC A Kódování: strojních cyklů: 1 příznaky: P
DEC Rr - Snížení obsahu registru o 1 Provede se snížení obsahu registru r o 1. Výsledek se umístí do registru r. Rr ← (Rr) - 1
Formát: DEC Rr Kódování: 00011rrr r strojních cyklů: 1 příznaky: -
DEC data adr - Snížení obsahu datové adresy o 1 Provádí se snížení obsahu určené datové adresy o 1. Výsledek je umístěn do této adresy. data adr ← (data adr) – 1 DEC 23H - Snížení obsahu datové adresy o 1
Formát: DEC data adr Kódování: data adr data adr strojních cyklů: 1 příznaky: -
Aritmetické operace
Existují čtyři základní aritmetické operace, a to sečítání, odečítání, násobení a dělení. Přímo jsou prováděny jen 8bitové operace s čísly bez znaménka. Příznak OV (Overflow - přetečení) umožňuje sečítání i odečítání dvou čísel se znaménkem i bez znaménka. Aritmetické operace lze provádět operace v kódu BCD. Sčítání Instrukce ADD sečítá obsah střadače se zdrojovým operandem a výsledek ukládá do střadače. Instrukce ADDC sečítá obsah střadače se zdrojovým operandem a přičítá obsah přenosu C. Výsledek je ukládán do střadače.
Odčítání Instrukce SUBB odečítá druhý zdrojový operand od prvého a navíc odečítá obsah příznaku přenosu C. Výsledek se ukládá do střadače. Násobení Instrukce MUL provádí násobení čísel umístěných v registrech A a B. Násobí je jako čísla bez znaménka. Následně je 2bytový výsledek uložen ve střadači (nižší řády) a v registru B (vyšší řády). Jsou-li vyšší řády nulové, nuluje se i příznak OV, který je jinak nastaven na 1. Příznak přenosu je nulován vždy.
Dělení Instrukce DIV, provádí dělení čísel. Dělí obsah střadače obsahem regisru B. Dělení provádí jako dělení bez znamének. Celočíselný podíl je ukládán do střadače a zbytek do registru B. Při dělení nuly se nastaví příznak OV na 1, jinak je nulován. Při dělení se nastaví příznak přenosu C.
C- Nastavuje se na 1, jestliže operace způsobí přenos do nebo z bitu nejvyššího řádu výsledku. Jinak se nuluje. AC- Nastavuje se na 1, jestliže při sečítání vznikl přenos z nižších 4 bitů do vyšších 4 bitů výsledku,nebo při odečítání jako výpůjčka z bitů vyšších řádů do bitů nižších řádů. Jinak se nuluje. OV- Nastavuje se na 1, byl-li přenos z nejvyššího řádu výsledku do C a současně nebyl přenos z bitu b 6 do b 7 či naopak. P- Nastavuje se na 1 vždy při liché paritě, jinak se nuluje. Hodnota příznaku se zapisuje do registru PSW a vždy odpovídá paritě současného obsahu střadače.
ADD A,#data - Součet hodnoty přímých dat a obsahu střadače Provádí se součet hodnoty 8bitových přímých dat s obsahem střadače. Výsledek je ve střadači. A ← (A) + data ADD A,#27H - Součet čísla 27H s obsahem střadače
Formát: ADD A,#data Kódování: data data strojních cyklů: 2 příznaky: C,AC,OV,P
ADD - Součet obsahu nepřímé adresy a obsahu střadače ADD - Součet obsahu nepřímé adresy s obsahem střadače Provádí se součet obsahu buňky vnitřní paměti dat adresované registrem r s obsahem střadače. Výsledek je ve střadači. A ← (A) + ((Rr))
Formát: ADD Kódování: r r ,1 strojních cyklů: 2 příznaky: C,AC,OV,P
ADD A,Rr – Součet obsahu registru a obsahu střadače Provádí se součet obsahu registru r s obsahem střadače. Výsledek je ve střadači. A ← (A) + (Rr) ADD A,R6 - Součet obsahu registru R6 s obsahem střadače
Formát: ADD A,Rr Kódování: 00101rrr r strojních cyklů: 1 příznaky: C,AC,OV,P
ADD A,data adr - Součet obsahu datové paměti a obsahu střadače Provádí se součet obsahu určené datové adresy s obsahem střadače. Výsledek je ve střadači. A ← (A) + (data adr) ADD A,32H - Součet obsahu adresy 32 s obsahem střadače
Formát: ADD A,data adr Kódování: data adr data adr strojních cyklů: 1 příznaky: C,AC,OV,P
ADDC A,#data – Součet hodnoty příznaku přenosu, přímých dat a obsahu střadače Provádí se součet hodnoty příznaku přenosu s obsahem střadače a hodnoty 8bitových přímých dat. Výsledný součet se umístí do střadače a aktualizuje se stav příznaku přenosu. A ← (A) + C + data ADDC A,#A0H - Součet hodnoty příznaku přenosu a A0H s obsahem střadače
Formát: ADDC A,#data Kódování: data data strojních cyklů: 1 příznaky: C,AC,OV,P
ADDC – Součet hodnoty příznaku přenosu, obsahu nepřímé adresy a obsahu střadače Provádí se součet hodnoty příznaku přenosu s obsahem střadače. K mezivýsledku se přičte obsah buňky vnitřní paměti dat adresované registrem r. Výsledný součet je umístěn do střadače a aktualizován stav příznaku přenosu. A ← (A) + C + ((Rr)) ADDC - Součet hodnoty příznaku přenosu a obsahu nepřímé adresy s obsahem střadače
Formát: ADDC Kódování: r r ,1 strojních cyklů: 1 příznaky : C,AC,OV,P
ADDC A,Rr – Součet hodnoty příznaku přenosu, obsahu registru a obsahu střadače Provádí se součet hodnoty příznaku přenosu s obsahem střadače a obsahem registru r. Výsledný součet je umístěn do střadače a je aktualizován stav příznaku přenosu. A ← (A) + C + (Rr) ADDC A,R2 - Součet hodnoty příznaku přenosu a obsahu R2 s obsahem střadače
Formát: ADDC A,Rr Kódování: 00111rrr r strojních cyklů: 1 příznaky: C,AC,OV,P
ADDC A,data adr – Součet hodnoty příznaku přenosu, obsahu datové adresy a obsahu střadače Provádí se součet hodnoty příznaku přenosu s obsahem střadače a obsahem datové adresy. Výsledný součet je umístěn do střadače a aktualizován stav příznaku přenosu. A ← (A) + C + (data adr) ADDC A,22H - Součet hodnoty příznaku přenosu a obsahu adresy 22H s obsahem střadače
Formát: ADDC A,data adr Kódování: data adr data adr strojních cyklů: 1 příznaky: C,AC,OV,P
SUBB A,#data - Odečtení hodnoty přímých dat od obsahu střadače s výpůjčkou SUBB A,#C1H - Odečtení 0C1H a hodnoty příznaku přenosu od obsahu střadače Provádí se odečtení hodnoty příznaku přenosu a hodnoty přímých dat od obsahu střadače. Výsledek je ve střadači. A ← (A) - C - data
Formát: SUBB A,#data Kódování: data data strojních cyklů: 1 příznaky: C,AC,OV,P Rozdíl je realizován dle vzorce : X = A - ( Y + C) kde X je rozdíl Y je menšitel
Provede se součet C a přímých dat. Rozdíl se realizuje pomocí součtu 1. doplňku se střadačem. Je-li číslo kladné, dojde k přetečení. Z toho vyplývá, že C = 0. Nedojde-li k přetečení je číslo záporné, musí dojít k výpůjčce z vyšších řádů a C = 1 ! přímá data - C C příznak C C Σ
1. doplněk Σ označíme D, kde D = Σ + 1 Σ D A C ←
Z toho vyplývá že
SUBB - Odečtení obsahu nepřímé adresy od obsahu střadače s výpůjčkou SUBB - Odečtení hodnoty příznaku přenosu a obsahu nepřímé adresy od obsahu střadače Provádí se odečtení hodnoty od příznaku přenosu a obsahu paměťové buňky vnitřní paměti dat adresované registrem r od obsahu střadače. Výsledek je ve střadači. A ← (A) - C - ((Rr))
Formát: SUBB Kódování: r r ,1 strojních cyklů: 1 příznaky: C,AC,OV,P
SUBB A,Rr - Odečtení obsahu registru od obsahu střadače s výpůjčkou Provádí se odečtení hodnoty příznaku přenosu a obsahu registru r od obsahu střadače. Výsledek je ve střadači. A ← (A) - C - (Rr) SUBB A,R3 - Odečtení hodnoty příznaku přenosu a obsahu R3 od obsahu střadače
Formát: SUBB A,Rr Kódování: 10011rrr r strojních cyklů: 1 příznaky: C,AC,OV,P
SUBB A,data adr - Odečtení obsahu datové adresy od obsahu střadače s výpůjčkou Provádí se odečtení hodnoty příznaku přenosu a obsahu datové adresy od obsahu střadače. Výsledek je ve střadači. A ← (A) - C - data adr SUBB A,35H - Odečtení hodnoty příznaku přenosu a obsahu datové adresy 35H od obsahu střadače
Formát: SUBB A,data adr Kódování: data adr data adr
MUL AB - Násobení obsahu střadače obsahem registru B Provádí se vynásobení obsahu střadače obsahem registru B. Oba operandy jsou pokládány za celá čísla bez znaménka. Nižší řády součinu jsou ve střadači, vyšší řády v registru B. Příznak přenosu se vždy vynuluje. Jsou-li vyšší řády součinu nenulové, nastaví se příznak přetečení na 1, jinak se vynuluje. AB ← (A) * (B) MOV B,#0AH - Přenos čísla 10D (AH) do registru B MUL AB - Násobení obsahu střadače (číslo 31D) číslem 10D
Formát: MUL AB Kódování: Strojních cyklů: 4 příznaky: C,OV,P
DIV AB - Dělení obsahu střadače obsahem registru B Provádí se dělení obsahu střadače obsahem registru B. Oba operandy jsou pokládány za celá čísla bez znaménka. Po dělení je ve střadači podíl a v registru B zbytek. Příznak přenosu je vždy vynulován. Při dělení nulou je nastaven příznak přetečení na 1, jinak je vynulován. AB ← (A) / (B) MOV B,#05H - Přenos čísla 05H do registru B DIV AB - Dělení obsahu střadače (číslo 118D) číslem 5H
Formát: DIV AB Kódování: strojních cyklů: 4 příznaky: C,OV,P
Speciální aritmetické operace
DA A – Dekadická korekce obsahu střadače Provádí se korekce obsahu střadače tak, aby odpovídal tvaru kódu BCD. Instrukce může být použita jen pro instrukci sčítání dvou čísel v kódu BCD. Má-li příznak pomocného přenosu logickou hodnotu 1 nebo obsahují-li nižší řády střadače číslici větší než 9, přičítá se k obsahu střadače číslo 6H. Má-li příznak přenosu před nebo po přičtení tohoto čísla logickou hodnotu 1, nebo obsahují- li vyšší řády číslici větší než 9, připočte se k obsahu střadače číslo 60H. Střadač a příznak přenosu obsahují konečné hodnoty po provedené dekadické korekci
Formát: DA A Kódování: strojních cyklů: 1 příznaky: C,P
Operace pro porovnání
adr - Porovnání obsahu nepřímé adresy s přímými daty, skok při nerovnosti Provádí se porovnání hodnoty přímých dat s obsahem buňky vnitřní paměti dat adresované registrem r. Při nerovnosti obou čísel přechází řízení na určenou kódovou adresu. Při rovnosti pokračuje program následující instrukcí. Jsou-li přímá data větší než je obsah adresované paměťové buňky, pak se nastaví příznak přenosu na logickou hodnotu 1, v ostatních případech se vynuluje. Obsah programového čítače PC se inkrementuje a ukazuje na následující instrukci. Při nerovnosti operandů se k inkrementovanému PC přičte relativní posun a bude se provádět instrukce na této nové adrese.
- Skok při obsahu nepřímé adresy jiném než 1 NASTAV MOV B,0F0H - 5AH bytů od počátku instrukce CJNE
Poznámka. Provádí se součet obsahu programového čítače s obsahem kódové adresy a výsledek se uloží zpět do programového čítače (skok na novou adresu) PC ← (PC) + 3 ((Rr)) ≠ data ((Rr)) < data PC ← (PC) + rel. posun C ← 1, jinak C ← 0 Formát: adr Kódování: r r ,1 data data rel. posun strojních cyklů: 2 příznaky: C
CJNE A,#data,kód adr - porovnání přímých dat s obsahem střadače, skok při nerovnosti Provádí porovnání hodnoty přímých dat s obsahem střadače. Další průběh je shodný s předchozí instrukcí. PC ← (PC) + 3 (A) ≠ data (A) < data PC ← (PC) + rel. posun C ← 1, jinak C ← 0 ORG 10DCH CJNE A,#32H,DÁLE - Skok při obsahu střadače jiném než 10H na DALE
Formát: CJNE A,#adr,kód adr Kódování: data data rel. posun strojních cyklů: 2 příznaky: C
CJNE A,data adr,kód adr - Porovnání obsahu datové adresy se střadačem, skok při nerovnosti Provádí se porovnání hodnoty obsahu určené datové adresy s obsahem střadače. Další průběh je shodný s předchozí instrukcí. PC ← (PC) + 3 (A) ≠ (data adr) (A) < (data adr) PC ← (PC) + rel. posun C ← 1, jinak C ← 0 CJNE A,21H,TEST - Skok při nerovnosti obsahu adresy 21H a obsahu střadače
Formát: CJNE A,data adr,kód adr Kódování: data adr data adr rel. posun strojních cyklů: 2 příznaky: C
CJNE Rr,#data,kód adr - Porovnání přímých dat s obsahem registru, skok při nerovnost Provádí se porovnání obsahu hodnoty přímých dat s obsahem registru. Další průběh je shodný s předchozí instrukcí. PC ← (PC) + 3 (Rr) ≠ data (Rr) < data PC ← (PC) + rel. posun C ← 1, jinak C ← 0 CJNE R3,#32H,SKOK10 - Skok při nerovnosti obsahu R3 a čísla 32H
Formát: CJNE Rr,#data,kód adr Kódování: 10111rrr r data data až +255 rel. posun strojních cyklů: 2 příznaky: C
Logické operace
ANL A,#data - Logický součin přímých dat s obsahem střadače Provádí se logický součin hodnoty 8bitových přímých dat s obsahem střadače. Výsledek je ve střadači. A ← (A) AND data ANL A,#08H - Maska nevyloučí pouze 3. bit
Formát: ANL A,#data Kódování: data data až +255 strojních cyklů: 1 příznaky: P
ANL - logický součin nepřímé adresy s obsahem střadače Provádí se logický součin obsahu paměťové buňky vnitřní paměti dat adresované registrem r s obsahem střadače. Výsledek je ve střadači. A ← (A) AND ((Rr)) ANL - Logický součin obsahu nepřímé adresy s obsahem střadače
Formát: ANL Kódování: r r ,1 strojních cyklů: 1 příznaky: P
ANL A,Rr - Logický součin obsahu registru s obsahem střadače Provádí se logický součin obsahu registru r s obsahem střadače. Výsledek je ve střadači. A ← (A) AND (Rr) MOV R5,80H - Přesun masky do R5 ANL A,R5 - Logický součin obsahu R5 a obsahem A
Formát: ANL A,Rr Kódování: 01011rrr r strojních cyklů: 1 příznaky: P
ANL A,data adr - Logický součin datové adresy s obsahem střadače Provádí se logický součin obsahu datové adresy s obsahem střadače A ← (A) AND (data adr) ANL A,44H - Logický součin obsahu datové adresy 44H s obsahem střadače
Formát: ANL A,data adr Kódování: data adr data adr strojních cyklů: 1 příznaky: P
ANL C,bit adr - Logický součin obsahu bitové adresy s hodnotou příznaku přenosu Provádí se logický součin hodnoty příznaku přenosu s hodnotou bitu adresovaného bitovou adresou. Výsledek se umístí do bitu příznaku přenosu. C ← C AND (bit adr) ANL C, Logický součin hodnoty bitu b2 v bytu 23H a hodnotou příznaku přenosu
Formát: ANL C,bit adr Kódování: bit adr bit adr strojních cyklů: 2 příznaky: C
ANL C,/bit adr - Logický součin negace obsahu bitové adresy s příznakem přenosu Provádí se logický součin hodnoty příznaku přenosu s negací hodnoty bitu adresovaného bitovou adresou. Výsledek se umístí do bitu příznaku přenosu. Hodnota bitu adresovaného bitovou adresou se nezmění. C ← C AND (bit adr) ANL C,/ Logický součin negace hodnoty bitu b4 v bytu 28H s hodnotou příznaku přenosu.
Formát: ANL C,/bit adr Kódování: bit adr bit adr strojních cyklů: 2 příznaky: C
ANL data adr,#data - Logický součin hodnoty přímých dat s obsahem datové adresy Provádí se logický součin 8bitových přímých dat s obsahem určené datové adresy. Výsledek se umístí do paměti na určenou datovou adresu. data adr ← (data adr) AND data ANL 55H,#22H - Maska pro zachování příznaků
Formát: ANL data adr,#data Kódování: data adr data adr data data až strojních cyklů: 2 příznaky: -
ANL data adr,A - Logický součin obsahu střadače s obsahem datové adresy Provádí se logický součin obsahu střadače s obsahem určené datové adresy. Výsledek se umístí do paměti na určenou adresu. data adr ← (data adr) AND (A) MOV A,#81H - Obsazení střadače maskou MOV 10H - Zachování bitu 0 a 7
Formát: ANL data adr,A Kódování: data adr data adr strojních cyklů: 1 příznaky: -
ORL A,#data - Logický součet hodnoty přímých dat a obsahu střadače Provádí se logický součet hodnoty 8bitových přímých dat s obsahem střadače. Výsledek je ve střadači. A ← (A) OR data ORL A,#08H - Maska nastaví bit 3 na logickou hodnotu 1
Formát: ORL A,#data Kódování: data data strojních cyklů: 1 příznaky: -
ORL - Logický součet obsahu nepřímé adresy a obsahu střadače Provádí se logický součet obsahu paměťové buňky vnitřní paměti dat adresované registrem r s obsahem střadače. Výsledek je ve střadači. A ← (A) OR ((Rr)) ORL - Nastavení bitu 0 na logickou hodnotu 1
Formát: ORL Kódování: r r ,1 strojních cyklů: 1 příznaky: P
ORL A,Rr - Logický součet obsahu registru r a obsahu střadače Provádí se logický součet obsahu registru r s obsahem střadače. Výsledek je ve střadači. A ← (A) OR (Rr) ORL A,R2 - Nastavení bitů 3 a 6 na logickou hodnotu 1
Formát: ORL A,Rr Kódování: 01001rrr r strojních cyklů: 1 příznaky: P
ORL A,data adr - Logický součet obsahu datové adresy a obsahu střadače Provádí se logický součet obsahu datové adresy s obsahem střadače. Výsledek je ve střadači. A ← (A) OR (data adr) ORL A,30H - Logický součet obsahu datové adresy 30H a obsahu střadače
Formát: ORL A,data adr Kódování: data adr data adr strojních cyklů: 1 příznaky: P
ORL C,bit adr - Logický součet obsahu bitové adresy a příznaku přenosu Provádí se logický součet hodnoty příznaku přenosu s hodnotou bitu adresovaného bitovou adresou. Výsledek se umístí do bitu příznaku přenosu. C ← C OR (bit adr) ORL C,2E.2 - Logický součet bitu 2 na adrese 2EH a hodnoty příznaku přenosu (bit s označením 72)
Formát: ORL C,bit adr Kódování: bit adr bit adr strojních cyklů: 2 příznaky: C
ORL C,/bit adr - Logický součet negace obsahu bitové adresy s příznakem přenosu Provádí se logický součet hodnoty příznaku přenosu s negací hodnoty bitu adresovaného bitovou adresou. Výsledek se umístí do bitu příznaku přenosu Hodnota bitu adresovaného bitovou adresou se nemění. C ← C OR (bit adr) ORL C,/ Logický součet negace bitu 25H.5 a hodnoty příznaku
Formát: ORL C,/bit adr Kódování: bit adr bit adr strojních cyklů: 2 příznaky: C
ORL data adr,#data - Logický součet hodnoty přímých dat a obsahu datové adresy Provádí se logický součet 8bitových přímých dat s obsahem určené datové adresy. Výsledek se umístí do paměti na určenou datovou adresu. data adr ← (data adr) OR data ORL 55H,#01H - Nastavení bitu 0 na logickou hodnotu 1
Formát: ORL data adr,#data Kódování: data adr data adr data data až +255 strojních cyklů: 2 příznaky: -
ORL data adr,A - Logický součet obsahu střadače a obsahu určené datové adresy Provádí se logický součet obsahu střadače s obsahem určené datové adresy. Výsledek se umístí do paměti na určenou datovou adresu. data adr ← (data adr) OR (A) ORL 21H,A - Logický součet obsahu střadače s obsahem bitové adresy 21
Formát: ORL data adr,A Kódování: data adr data adr strojních cyklů: 1 příznaky: -
XRL A,#data - Součet Exklusive-OR hodnoty přímých dat a obsahu střadače Provádí se součet Exklusive-OR hodnoty 8bitových přímých dat s obsahem střadače. Výsledek je ve střadači. A ← (A) XOR data XRL A,#0FH - Vytvoření doplňku nižších řádů střadače
Formát: XRL A,#data Kódování: data data až +255 strojních cyklů: 1 příznaky: P
XRL - Součet Exklusive-OR obsahu nepřímé adresy a obsahu střadače Provádí se součet Exlusive-OR obsahu paměťové buňky adresované registrem r s obsahem střadače. Výsledek je ve střadači. A ← (A) XOR ((Rr)) XRL - Součet Exclusive OR střadače a obsahu paměťového místa daného registrem R1
Formát: XRL Kódování: r r ,1 strojních cyklů: 1 příznaky: P
XRL A,Rr - Součet Exklusive-OR obsahu registru a obsahu střadače Provádí se součet Exklusive-OR obsahu registru r s obsahem střadače. Výsledek je ve střadači. A ← (A) XOR (Rr) XRL A, R3 - Součet Exclusive -OR obsahu R3 a střadače
Formát: XRL A,Rr Kódování: 01101rrr r strojních cyklů: 1 příznaky: P
XRL A,data adr - Součet Exklusive-OR obsahu datové adresy a obsahu střadače Provádí se součet Exklusive-OR obsahu určené datové adresy s obsahem střadače. Výsledek je ve střadači. A ← (A) XOR (data adr) XRL A,25H - Součet Exclusive-OR obsahu adresy 25H a obsahu střadače
Formát: XRL A,data adr Kódování: data adr data adr strojních cyklů: 1 příznaky: P
XRL data adr,#data - Součet Exklusive-OR hodnoty přímých dat a obsahu datové adresy Provádí se součet Exklusive-OR hodnoty 8bitových přímých dat s obsahem určené datové adresy. Výsledek se umístí do paměti dat na určenou adresu. data adr ← (data adr) XOR data XRL P1,#51H - Součet Exclusive-OR hodnoty 51H a obsahu brány 1 (viz tabulky)
Formát: XRL data adr,#data Kódování: data adr data adr data data až strojních cyklů: 2 příznaky: -
XRL data adr,A - Součet Exklusive-OR obsahu střadače a obsahu určené datové adresy Provádí se součet Exklusive-OR obsahu střadače s obsahem určené datové adresy. Výsledek se umístí na určenou datovou adresu. data adr ← (data adr) XOR (A) XRL 10H,A - Součet Exclusive-OR obsahu adresy 10H a obsahu střadače
Formát: XRL data adr,A Kódování: data adr data adr strojních cyklů: 1 příznaky: -
SETB C - Nastavení příznaku přenosu C Provádí se nastavení příznaku přenosu C na hodnotu logické 1. C ← 1 Formát: SETB C Kódování: strojních cyklů: 1 příznaky: C
SETB bit adr - Nastavení bitu Provádí se nastavení bitu určeného datovou adresou na logickou hodnotu 1. bit adr ← 1 Poznámky. Jde o bit 90.5H (adresa 90H, bit 5 ). Formát: SETB bit adr Kódování: bit adr bit adr strojních cyklů: 1 příznaky: -
CPL A - Negace obsahu střadače Provede se negace každého bitu střadače. A ← (A) Formát: CPL A Kódování: strojních cyklů: 1 příznaky: -
CPL C - Negace příznaku přenosu Provádí se negace příznaku přenosu. C ← C Formát: CPL C Kódování: strojních cyklů: 1 příznaky: C
CPL bit adr - negace hodnoty bitu Provádí se negace bitu určeného bitovou adresou. bit adr ← (bit adr) CPL 23H.7 - Negace hodnoty bitu 7 na adrese 23H Formát: CPL bit adr Kódování: bit adr bit adr strojních cyklů: 1 příznaky: -
CLR A - Vynulování obsahu střadače A ← 0 Formát: CLR A Kódování: strojních cyklů: 1 příznaky: -
CLR bit adr - Vynulování bitu bit adr ← 0 Formát: CLR bit adr Kódování: bit adr bit adr strojních cyklů: 1 příznaky: - Poznámka. Jedná se o 6. bit z adresy 88H.
Rotace a posuny
RL A - Rotační posun obsahu střadače vlevo Provádí se posun všech bitů střadače o 1 bit vlevo. Nejvýznačnější bit 7 se přesune do bitu 0. Formát: Kódování: RL A strojních cyklů: 1 příznaky: -
RLC A - Rotační posun obsahu střadače a příznaku přenosu vlevo Provádí se posun všech bitů střadače o 1 bit vlevo přes příznak přenosu. Formát: RLC A Kódování: strojních cyklů: 1 příznaky: C,P
RR A - Rotační posuv obsahu střadače vpravo Provádí se posun všech bitů střadače o 1 bit vpravo. Formát: RR A Kódování: strojních cyklů: 1 příznaky: -
RRC A - Rotační posun obsahu střadače a příznaku přenosu vpravo Provádí se posun všech bitů střadače o 1 bit vpravo přes příznak přenosu. Formát: RRC A Kódování: strojních cyklů: 1 příznaky: C,P
Operace se zásobníkem
POP data adr - Obnovení obsahu datové adresy ze zásobníku Provádí se umístění obsahu bytu adresovaného ukazatelem zásobníku na určenou datovou adresu. Obsah ukazatele zásobníku se zmenší o 1. data adr ← ((SP)) SP ← (SP) - 1 POP PSW – POP PSW neovlivňuje příznak parity
Poznámka. PSW má adresu D0H. Formát: POP data adr Kódování: data adr data adr
PUSH data adr - Uložení datové adresy do zásobníku Provádí se zvýšení obsahu ukazatele zásobníku o 1 a uložení obsahu určené datové adresy na adresu, která je v ukazateli zásobníku. SP ← (SP) + 1 (SP) ← (data adr) PUSH 4DH - Uložení jednoho bytu do zásobníku
Formát: PUSH data adr Kódování: data adr data adr strojních cyklů: 2 příznaky: -
Skoky, volání podprogramu a návraty
Podmíněné skoky lze rozdělit do několika navzájem si podobných skupin. Všechny však provádějí skoky v rozsahu pole 256 bytů.
Podmíněné skoky s porovnáním přímo adresovatelného bitu Podmíněné skoky s porovnáním přímo adresovatelného bitu jsou : JB - skok jen v případě, má-li bit log. hodnotu 1, JNB - skok jen v případě, má-li bit log. hodnotu 0, JBC - skok jen v případě, má-li bit log. hodnotu 1 s vynulováním tohoto bitu. Programový čítač je inkrementován a ukazuje na následující instrukci. V případě splnění podmínky se k inkrementovanému programovému čítači přičte relativní posun a provede se instrukce umístěná na této adrese. Při nesplnění podmínky pokračuje program následující instrukcí
JNB 41.6H,DÁLE – Test bitu 6 na adrese 41H
JB - Skok při nenulovém bitu Formát: JB bit adr, kód adr Kódování: bit adr. bit adr rel. posun strojních cyklů: 2 příznaky: -
JBC - Skok při nenulovém bitu s jeho následným vynulováním Formát: JBC bit adr, kód adr Kódování: bit adr. bit adr rel. posun strojních cyklů: 2 příznaky: -
JNB - Skok při nulovém bitu Formát: JNB bit adr, kód adr Kódování: bit adr. bit adr rel. posun strojních cyklů: 2 příznaky: -
Podmíněné skoky Podmíněné skoky jsou : JC - skok při nenulovém příznaku přenosu JNC - skok při nulovém příznaku přenosu JZ - skok při nulovém obsahu střadače JNZ - skok při nenulovém obsahu střadače Programový čítač je inkrementován a ukazuje na následující instrukci. V případě splnění podmínky se k inkrementovanému programovému čítači přičte relativní posun a provede se instrukce umístěná na této adrese. Při nesplnění podmínky pokračuje program následující instrukcí. Všechny 4 instrukce mají obdobný charakter.
JC - Skok při nenulovém příznaku přenosu Je-li C = 0 PC ← (PC) + 2 C = 1 PC ← (PC) + rel. posun Formát: JC kód adr Kódování: rel. posun strojních cyklů : 2 příznaky : -
JNC - Skok při nulovém příznaku přenosu Je-li C = 1 PC ← (PC) + 2 C = 0 PC ← (PC) + rel. posun Formát: JNC kód adr Kódování: rel. posun strojních cyklů : 2 příznaky : -
JZ - Skok při nulovém obsahu střadače Je-li A = 1 PC ← (PC) + 2 A = 0 PC ← (PC) + rel. posun Formát: JZ kód adr Kódování: rel. posun strojních cyklů : 2 příznaky : -
JNZ - Skok při nenulovém obsahu střadače Je-li A = 0 PC ← (PC) + 2 A = 1 PC ← (PC) + rel. posun Formát: JNZ kód adr Kódování: rel. posun strojních cyklů : 2 příznaky : -
Instrukce pro smyčky Instrukce DJNZ dekrementuje zdrojový operand a výsledek ukládá do tohoto operandu. Skok se provede při nenulovém výsledku. Zdrojovým operandem pak může být kterýkoliv bytu z vnitřní paměti dat a adresování lze používat jak přímé, tak i s registrem. Instrukce DJNZ Rr, kód adr
DJNZ Rr, kód adr - snížení obsahu registru a skok při nenulovém výsledku Provádí se snížení obsahu registru o 1 a výsledek se umístí zpět do registru. Je-li po snížení obsahu výsledek nulový, pokračuje program následující instrukcí. Jestliže není nulový, předává řízení na určenou kódovou adresu následujícím způsobem. Programový čítač je inkrementován a ukazuje na následující instrukci. V případě skoku se k inkrementovanému programovému čítači přičte relativní posun a začne se provádět instrukce na této nové adrese. PC ← (PC) + 2 Rr ← (Rr) - 1 Je-li (Rr) ≠ 0 pak PC ← (PC) + rel. posun Formát: DJNZ Rr, kód adr Kódování: 11011rrr r rel. posun strojních cyklů: 2 příznaky: -
DJNZ data adr, kód adr - Snížení obsahu datové adresy a skok při nenulovém výsledku Provádí se snížení obsahu datové adresy o 1 a výsledek se umístí zpět na tutéž adresu. Je-li výsledek po snížení obsahu nulový, pokračuje program následující instrukcí. Jinak se řízení předává na určenou kódovou adresu následujícím způsobem. Programový čítač je inkrementován a ukazuje na následující instrukci. V případě skoku se k inkrementovanému programovému čítači přičte relativní posun a začne se provádět instrukce na této nové adrese. PC ← (PC) + 3 data adr ← (data adr) - 1 Je-li (data adr) ≠ 0 pak PC ← (PC) + rel. posun
Nepodmíněné skoky Instrukce AJMP, SJMP a LJMP předávají řízení na určenou cílovou adresu bez uložení návratové adresy do zásobníku. Obecný skok JMP se překládá do některého výše uvedeného skoku. Instrukce + DPTR provádí skok na relativní adresu vzhledem k obsahu registru DPTR. Posun pak může být
SJMP kód adr - Krátký skok Provádí se předání řízení na určenou kódovou adresu. PC je inkrementován a ukazuje na následující instrukci. K obsahu inkrementovaného PC se přičítá relativní posun a bude se provádět instrukce na této adrese. Je to instrukce pro předání řízení uvnitř pole 256 bytů se středem na instrukci následující za SJMP. PC ← (PC) + 2 PC ← (PC) + rel. posun Formát: SJMP kód adr. Kódování: rel. posun
Příklad : SJMP SMYCKA INC A : SMYCKA RR A
AJMP kód adr - Nepodmíněný skok uvnitř 2 kB stránky Provádí se inkrementace PC a poté se nahradí nižších 11 bitů PC 11 bity kódové adresy. Z tohoto důvodů je pak cílová adresa v téže 2 kB stránce paměti ve které je umístěna instrukce následující za AJMP Obsazení bitů PC u instrukce AJMP
PC ← (PC) + 2 PC0-10 ← adr. stránky Formát: AJMP kód adr Kódování: aaa00001 aaaaaaaa strojních cyklů: 2 příznaky: -
Příklad: ORG E80FH POKR MOV A,R1 : ORG EADCH AJMP POKR - skok zpět na POKR, t.j. adresu E80FH
LJMP kód adr - Dlouhý skok Provádí se předání na 16bitovou kódovou adresu uvedenou v operandové části. PC ← kód adr Formát: LJMP kód adr Kódování: adresa v.ř. kód adr adersa n.ř. strojních cyklů: 2 příznaky: - Příklad: ORG 800H LJMP POKR - skok na návěstí POKR : POKR RRC A - instrukce DEC je na adrese 8431H
JMP kód adr - Obecný skok Formát: JMP kód adr 0 ≤ kód adr ≤ Překládá se podle potřeby jako SJMP, AJMP či LJMP SJMP - neobsahuje-li instrukce dopředné odkazy a nachází-li se v rozsahu ±127 bytů od adresy následující instrukce. AJMP - neobsahuje-li kódová adresa dopředné odkazy a nachází-li se v rozsahu 2 kB stránky. LJMP - ostatní případy jako jsou-li v cílové adrese skoku dopředné instrukce či větší skok než 2 kB.
- Skok podle součtu obsahu střadače a ukazatele dat Provádí se součet obsahu střadače s obsahem ukazatele dat. Řízení se předá na kódovou adresu vytvořenou z tohoto součtu PC ← (A) + (DPTR) Instrukce
Formát: Kódování: strojních cyklů: 2 příznaky: -
Volání podprogramu Volání podprogramu se provádí instrukcemi ACALL, LCALL a CALL. Při tom instrukce CALL se překládá podobně jako instrukce JMP. Instrukce obecně ukládají návratovou adresu do zásobníku a poté předávají řízení na určenou adresu.
ACALL kód adr - Volání podprogramu uvnitř 2 kB stránky Provádí se uložení inkrementovaného obsahu PC do zásobníku. Byte nižších řádů se ukládá jako první! Cílová adresa se vytvoří obdobně jako u AJMP. Volaný podprogram musí začínat uvnitř téže 2 kB stránky paměti, ve které je umístěna instrukce následující za instrukcí ACALL. PC ← (PC) + 2 SP ← (SP) + 1 (SP) ← (PC nižší řády) SP ← (SP) + 1 (SP) ← (PC vyšší řády) PC 0-10 ← adr stránky
Formát: ACALL kód adr Kódování: aaa10001 aaaaaaaa strojních cyklů: 2 příznaky: - Příklad : ORG. 35 ACALL TRID - volání podprogramu TRID (začíná na adrese 233H) ORG 233H TRID PUSH ACC - uložení obsahu střadače : RET - návrat
LCALL kód adr - Dlouhé volání podprogramu Provádí se uložení obsahu inkrementovaného PC do zásobníkové paměti a předá se řízení na 16bitovou kódovou adresu uvedenou v její operandové části. PC ← (PC) + 3 SP ← (SP) + 1 (SP) ← (PC nižší řády) SP ← (SP) + 1 (SP) ← (PC vyšší řády) PC ← kód adr
Formát: LCALL kód adr Kódování: adresa v.ř. kód adr adresa n.ř. strojních cyklů: 2 příznaky: - Příklad : POM INC A : RETI : LCALL POM - volání podprogramu POM
CALL kód adr - Obecné volání podprogramu Překládá se podle potřeby jako ACALL nebo LCALL. ACALL - neobsahuje-li kódová adresa dopředné odkazy a nachází-li se uvnitř 2 kB stránky. Jinak se překládá jako LCALL. Příklad : ORG 80DCH CALL PPGX - volání PPGX - dopředný odkaz, takže se generuje LCALL PPGX POP 55H
Návraty Instrukce návratu provádí předání řízení na návratovou adresu, která je uložená v zásobníku. Po odebrání vyšších řádů adresy se provede dekrementace ukazatele zásobníku, odběr nižších řádů a nová dekrementace RET - Návrat z podprogramu PC vyšší řády ← ((SP)) SP ← (SP) - 1 PC nižší řády ← ((SP)) SP ← (SP) -1
RET - Návrat z podprogramu PC vyšší řády ← ((SP)) SP ← (SP) - 1 PC nižší řády ← ((SP)) SP ← (SP) -1 Formát: RET Kódování: strojních cyklů: 2 příznaky: -
RETI - Návrat z podprogramu pro obsluhu přerušení Provádí se návrat z podprogramu pro ošetření přerušení, kdy se znovu povoluje přerušení stejné nebo i nižší priority. Řízení přechází na adresu, která je uložena ve 2 bytech v zásobníku. Vše ostatní je shodné s instrukcí RET. Stavové slovo PSW se automaticky neobnovuje. PC vyšší řády ← ((SP)) SP ← (SP) - 1 PC nižší řády ← ((SP)) SP ← (SP) -1 Formát: RETI Kódování: Strojních cyklů: 2 Příznaky: -