Prezentace se nahrává, počkejte prosím

Prezentace se nahrává, počkejte prosím

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.

Podobné prezentace


Prezentace na téma: "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."— Transkript prezentace:

1 Instrukční soubor řady 8051 Assembler

2 Ú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ší.

3 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í

4 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 8080. Při ukládání se SP zvyšuje, při vybírání snižuje.

5 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.

6 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.

7 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.

8 Význam příkazů #data-přímá data, @R1-nepří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).

9 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ů.

10 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

11 Přesuny

12 MOV @Rr,#dat - 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 MOV @R1, #05H Přesun čísla 05 na nepřímou adresu.

13 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: MOV @Rr, #data Kódování: 0111011r r...............0,1 data data.…….. -255 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.

14 MOV @Rr,data 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 MOV @R1,55H Přesun obsahu adresy 55H na nepřímou adresu.

15 Formát: MOV @Rr,data adr Kódování: 1010011r r.............. 0,1 data adr data adr... 0 - 255 strojových cyklů: 2 příznaky: -

16 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.

17 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í: 10100010 bit adr bit adr..... 0 - 255 strojních cyklů: 1 příznaky: C

18 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

19 Formát: MOV DPTR,#data Kódování: 10010000 data vyšší řády data nižší řády data..... 0 - 65535 strojních cyklů: 2 příznaky: -

20 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

21 Formát: MOV Rr,#data Kódování: 01111rrr r.............0 – 7 data data....-256 až +255 strojních cyklů: 1 příznaky: -

22 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

23 Formát: MOV Rr,data adr Kódování: 10101rrr r.............0 – 7 data adr data adr... 0 - 255 strojních cyklů: 2 příznaky: -

24 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

25 Formát: MOV bit adr,C Kódování: 10010010 bit adr bit adr.....0 – 255 strojních cyklů: 2 příznaky: -

26 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)

27 Formát: MOV data adr,#data Kódování: 01110101 data data adr.... 0 – 255 data...-256 až +255 strojních cyklů: 2 příznaky: -

28 MOV data adr,@Rr 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 25H,@R1 Přesun obsahu nepřímé adresy na datovou adresu 25H

29 Formát: MOV data adr,@Rr Kódování: 1000011r r...............0,1 data adr data adr....0 – 255 strojových cyklů: 2 příznaky: -

30 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.

31 Formát: MOV data adr,Rr Kódování: 10001rrr r............. 0 – 7 data adr data adr....0 - 255 strojních cyklů: 2 příznaky: -

32 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).

33 Formát: MOV data adr1,data adr2 Kódování: 10000101 data adr 2 data adr2...0 - 255 data adr1 data adr1...0 – 255 strojních cyklů: 2 příznaky: -

34 Operace se střadačem

35 MOV @Rr,A - 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) MOV @R0,A Přesun obsahu střadače na nepřímou adresu

36 Formát: MOV @Rr,A Kódování: 1111011r r...............0,1 strojových cyklů: 1 příznaky: -

37 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

38 Formát: MOV A,#data Kódování: 01110100 data data..-256 - +255 strojních cyklů: 1 příznaky: P

39 MOV A,@Rr - 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 A,@R1 Přesun obsahu nepřímé adresy 1AH dané registrem R1 do střadače.

40 Formát: MOV A,@Rr Kódování: 1110011r r...............0,1 strojních cyklů: 1 příznaky: P

41 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

42 Formát: MOV A,Rr Kódování: 11101rrr r.............0 - 7 strojových cyklů: 1 příznaky: P

43 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

44 Formát: MOV A,data adr Kódování: 11100101 data adr data adr....0 - 255 strojových cyklů: 1 příznaky: P

45 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

46 Formát: MOV Rr,A Kódování: 11111rrr r.............0 - 7 strojových cyklů: 1 příznaky: -

47 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.

48 Formát: MOV data adr,A Kódování: 11110101 data adr data adr.... 0 - 255 strojních cyklů: 1 příznaky: -

49 MOVC A,@A+DPTR - 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 A,@A+DPTR Přesun obsahu vnější paměti dat do střadače

50 Formát: MOVC A,@A+DPTR Kódování: 10010011 strojních cyklů: 2 příznaky: P

51 MOVC A,@A+PC - 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 A,@A+PC Přesun vnější paměti dat do střadače

52 Formát: MOVC A,@A+PC Kódování: 10000011 strojních cyklů: 2 příznaky: P

53 MOVX @DPTR,A - 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) MOVX @DPTR,A Přesun obsahu střadače do vnější paměti dat na adresu uloženou v DPTR

54 Formát: MOVX @DPTR,A Kódování: 11110000 strojních cyklů: 2 příznaky: -

55 MOVX @Rr,A - 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 MOVX @R0,A - Přesun obsahu střadače na nepřímou adresu

56 Formát: MOVX @Rr,A Kódování: 1111001r r...............0,1 strojních cyklů: 2 příznaky: -

57 MOVX A,@DPTR - 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 A,@DPTR Přesun bytu z vnější paměti dat do střadače

58 Formát: MOVX A,@DPTR Kódování: 11100000 strojních cyklů: 2 příznaky: P

59 MOVX A,@Rr - 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 A,@R1 - Přesun z vnější paměti dat do střadače

60 Formát: MOVX A,@Rr Kódování: 1110001r r...............0,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.

61 Výměny registrů

62 XCH A,@Rr - 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 A,@R0 - Výměna obsahu střadače a buňky paměti dat

63 Formát: XCH A,@Rr Kódování: 1100011r r...............0,1 strojních cyklů: 1 příznaky: P

64 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

65 Formát: XCH A,Rr Kódování: 11001rrr r.............0 - 7 strojních cyklů: 1 příznaky: P

66 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

67 Formát: XCH A,data adr Kódování: 11000101 data adr data adr....0 - 255 strojních cyklů: 1 příznaky: P

68 XCHD A,@Rr - 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 A,@R0 - Výměna nižších řádů buňky vnitřní paměti dat a střadače

69 dočasný registr ← ((Rr))0-3 (Rr)0-3 ← (A)0-3 A0-3 ← (dočasný registr) Formát: XCHD A,@Rr Kódování: 1101011r r...............0,1 strojních cyklů: 1 příznaky: P

70 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.

71 Formát: SWAP A Kódování: 110000100 strojních cyklů: 1 příznaky: -

72 Inkrementace a dekrementace

73 INC @Rr - 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)) + 1 INC @R0 - Zvýšení obsahu čítače o 1

74 Formát: INC @Rr Kódování: 0000011r r............... 0,1 strojních cyklů: 1 příznaky: -

75 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

76 Formát: INC A Kódování: 00000100 strojních cyklů: 1 příznaky: P

77 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

78 Formát: INC DPTR Kódování: 10100011 strojních cyklů: 2 příznaky: -

79 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

80 Formát: INC Rr Kódování: 00001rrr r.............0 - 7 strojních cyklů: 1 příznaky: -

81 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

82 Formát: INC data adr Kódování: 00000101 data adr data adr.... 0 - 255 strojních cyklů: 1 příznaky: -

83 DEC @Rr - 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 DEC @R0 - Provede snížení obsahu adresy 27H dané obsahem registru R0 o 1

84 Formát: DEC @Rr Kódování: 0001011r r..............0,1 strojových cyklů: 1 příznaky: -

85 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

86 Formát: DEC A Kódování: 00010100 strojních cyklů: 1 příznaky: P

87 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

88 Formát: DEC Rr Kódování: 00011rrr r.............0 - 7 strojních cyklů: 1 příznaky: -

89 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

90 Formát: DEC data adr Kódování: 00010101 data adr data adr.... 0 - 255 strojních cyklů: 1 příznaky: -

91 Aritmetické operace

92 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.

93 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.

94 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.

95 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.

96 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

97 Formát: ADD A,#data Kódování: 00100100 data data....-256 - +255 strojních cyklů: 2 příznaky: C,AC,OV,P

98 ADD A,@Rr - Součet obsahu nepřímé adresy a obsahu střadače ADD A,@R1 - 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))

99 Formát: ADD A,@Rr Kódování: 0010011r r...............0,1 strojních cyklů: 2 příznaky: C,AC,OV,P

100 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

101 Formát: ADD A,Rr Kódování: 00101rrr r.............0 - 7 strojních cyklů: 1 příznaky: C,AC,OV,P

102 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

103 Formát: ADD A,data adr Kódování: 00100101 data adr data adr....0 - 255 strojních cyklů: 1 příznaky: C,AC,OV,P

104 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

105 Formát: ADDC A,#data Kódování: 00110100 data data....-256 - +255 strojních cyklů: 1 příznaky: C,AC,OV,P

106 ADDC A,@Rr – 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 A,@R1 - Součet hodnoty příznaku přenosu a obsahu nepřímé adresy s obsahem střadače

107 Formát: ADDC A,@Rr Kódování: 0011011r r...............0,1 strojních cyklů: 1 příznaky : C,AC,OV,P

108 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

109 Formát: ADDC A,Rr Kódování: 00111rrr r.............0 - 7 strojních cyklů: 1 příznaky: C,AC,OV,P

110 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

111 Formát: ADDC A,data adr Kódování: 00110101 data adr data adr....0 - 255 strojních cyklů: 1 příznaky: C,AC,OV,P

112 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

113 Formát: SUBB A,#data Kódování: 10010100 data data........0- 255 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

114 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 - C1 - 1100 0001 C1 - 1100 0001 příznak C - 1 - 0000 0001 + C - 0000 0001 Σ 1100 0010

115 1. doplněk Σ označíme D, kde D = Σ + 1 Σ - 0011 1101 + 1 - 0000 0001 D - 0011 1110 + A - 0010 0110 C ← 0 0110 0100

116 Z toho vyplývá že

117 SUBB A,@Rr - Odečtení obsahu nepřímé adresy od obsahu střadače s výpůjčkou SUBB A,@R1 - 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))

118 Formát: SUBB A,@Rr Kódování: 1001011r r..............0,1 strojních cyklů: 1 příznaky: C,AC,OV,P

119 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

120 Formát: SUBB A,Rr Kódování: 10011rrr r.............0 - 7 strojních cyklů: 1 příznaky: C,AC,OV,P

121 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

122 Formát: SUBB A,data adr Kódování: 10010101 data adr data adr...0 - 255

123 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

124 Formát: MUL AB Kódování: 10100100 Strojních cyklů: 4 příznaky: C,OV,P

125 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

126 Formát: DIV AB Kódování: 10000100 strojních cyklů: 4 příznaky: C,OV,P

127 Speciální aritmetické operace

128 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

129 Formát: DA A Kódování: 11010100 strojních cyklů: 1 příznaky: C,P

130 Operace pro porovnání

131 CJNE @Rr,#data,kód 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.

132

133 CJNE @R1,#01H,NASTAV - Skok při obsahu nepřímé adresy jiném než 1 NASTAV MOV B,0F0H - 5AH bytů od počátku instrukce CJNE

134 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: CJNE @Rr,#data,kód adr Kódování: 1011011r r...............0,1 data data....-256 - +255 rel. posun strojních cyklů: 2 příznaky: C

135 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

136 Formát: CJNE A,#adr,kód adr Kódování: 10110100 data data....-255 - +255 rel. posun strojních cyklů: 2 příznaky: C

137 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

138 Formát: CJNE A,data adr,kód adr Kódování: 10110101 data adr data adr....0 - 255 rel. posun strojních cyklů: 2 příznaky: C

139 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

140 Formát: CJNE Rr,#data,kód adr Kódování: 10111rrr r.............0 - 7 data data....-256 až +255 rel. posun strojních cyklů: 2 příznaky: C

141 Logické operace

142 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

143 Formát: ANL A,#data Kódování: 01010100 data data....-256 až +255 strojních cyklů: 1 příznaky: P

144 ANL A,@Rr - 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 A,@R0 - Logický součin obsahu nepřímé adresy s obsahem střadače

145 Formát: ANL A,@Rr Kódování: 0101011r r...............0,1 strojních cyklů: 1 příznaky: P

146 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

147 Formát: ANL A,Rr Kódování: 01011rrr r.............0 - 7 strojních cyklů: 1 příznaky: P

148 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

149 Formát: ANL A,data adr Kódování: 01010101 data adr data adr....0 - 255 strojních cyklů: 1 příznaky: P

150 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,23.2 - Logický součin hodnoty bitu b2 v bytu 23H a hodnotou příznaku přenosu

151 Formát: ANL C,bit adr Kódování: 10000010 bit adr bit adr.....0 - 255 strojních cyklů: 2 příznaky: C

152 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,/28.4 - Logický součin negace hodnoty bitu b4 v bytu 28H s hodnotou příznaku přenosu.

153 Formát: ANL C,/bit adr Kódování: 10110000 bit adr bit adr.....0 - 255 strojních cyklů: 2 příznaky: C

154 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ů

155 Formát: ANL data adr,#data Kódování: 01010011 data adr data adr....0 - 255 data data...-256 až + 255 strojních cyklů: 2 příznaky: -

156 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

157 Formát: ANL data adr,A Kódování: 01010010 data adr data adr....0 - 255 strojních cyklů: 1 příznaky: -

158 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

159 Formát: ORL A,#data Kódování: 01000100 data data...-256 - + 255 strojních cyklů: 1 příznaky: -

160 ORL A,@Rr - 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 A,@R0 - Nastavení bitu 0 na logickou hodnotu 1

161 Formát: ORL A,@Rr Kódování: 0100011r r...............0,1 strojních cyklů: 1 příznaky: P

162 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

163 Formát: ORL A,Rr Kódování: 01001rrr r.............0 - 7 strojních cyklů: 1 příznaky: P

164 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

165 Formát: ORL A,data adr Kódování: 01000101 data adr data adr....0 - 255 strojních cyklů: 1 příznaky: P

166 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)

167 Formát: ORL C,bit adr Kódování: 01110010 bit adr bit adr.....0 - 255 strojních cyklů: 2 příznaky: C

168 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,/25.5 - Logický součet negace bitu 25H.5 a hodnoty příznaku

169 Formát: ORL C,/bit adr Kódování: 10100000 bit adr bit adr.....0 - 255 strojních cyklů: 2 příznaky: C

170 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

171 Formát: ORL data adr,#data Kódování: 01000011 data adr data adr....0 - 255 data data....-256 až +255 strojních cyklů: 2 příznaky: -

172 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

173 Formát: ORL data adr,A Kódování: 01000010 data adr data adr....0 - 255 strojních cyklů: 1 příznaky: -

174 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

175 Formát: XRL A,#data Kódování: 01100100 data data....-256 až +255 strojních cyklů: 1 příznaky: P

176 XRL A,@Rr - 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 A,@R1 - Součet Exclusive OR střadače a obsahu paměťového místa daného registrem R1

177 Formát: XRL A,@Rr Kódování: 0110011r r...............0,1 strojních cyklů: 1 příznaky: P

178 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

179 Formát: XRL A,Rr Kódování: 01101rrr r.............0 - 7 strojních cyklů: 1 příznaky: P

180 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

181 Formát: XRL A,data adr Kódování: 01100101 data adr data adr....0 - 255 strojních cyklů: 1 příznaky: P

182 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)

183 Formát: XRL data adr,#data Kódování: 01100011 data adr data adr....0 - 255 data data...-256 až + 255 strojních cyklů: 2 příznaky: -

184 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

185 Formát: XRL data adr,A Kódování: 01100010 data adr data adr....0 - 255 strojních cyklů: 1 příznaky: -

186 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í: 11010011 strojních cyklů: 1 příznaky: C

187 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í: 11010010 bit adr bit adr.....0 - 255 strojních cyklů: 1 příznaky: -

188 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í: 11110100 strojních cyklů: 1 příznaky: -

189 CPL C - Negace příznaku přenosu Provádí se negace příznaku přenosu. C ← C Formát: CPL C Kódování: 10110011 strojních cyklů: 1 příznaky: C

190 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í: 10110010 bit adr bit adr.....0 - 255 strojních cyklů: 1 příznaky: -

191 CLR A - Vynulování obsahu střadače A ← 0 Formát: CLR A Kódování: 11100100 strojních cyklů: 1 příznaky: -

192 CLR bit adr - Vynulování bitu bit adr ← 0 Formát: CLR bit adr Kódování: 11000010 bit adr bit adr.....0 - 255 strojních cyklů: 1 příznaky: - Poznámka. Jedná se o 6. bit z adresy 88H.

193 Rotace a posuny

194 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 00100011 strojních cyklů: 1 příznaky: -

195 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í: 00110011 strojních cyklů: 1 příznaky: C,P

196 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í: 00000011 strojních cyklů: 1 příznaky: -

197 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í: 00010011 strojních cyklů: 1 příznaky: C,P

198 Operace se zásobníkem

199 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

200 Poznámka. PSW má adresu D0H. Formát: POP data adr Kódování: 11010000 data adr data adr....0 - 255

201 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

202 Formát: PUSH data adr Kódování: 11000000 data adr data adr....0 - 255 strojních cyklů: 2 příznaky: -

203 Skoky, volání podprogramu a návraty

204 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ů.

205 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í

206 JNB 41.6H,DÁLE – Test bitu 6 na adrese 41H

207 JB - Skok při nenulovém bitu Formát: JB bit adr, kód adr Kódování: 00100000 bit adr. bit adr.....0 - 255 rel. posun strojních cyklů: 2 příznaky: -

208 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í: 00010000 bit adr. bit adr.....0 - 255 rel. posun strojních cyklů: 2 příznaky: -

209 JNB - Skok při nulovém bitu Formát: JNB bit adr, kód adr Kódování: 00110000 bit adr. bit adr.....0 - 255 rel. posun strojních cyklů: 2 příznaky: -

210 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.

211

212 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í: 01000000 rel. posun strojních cyklů : 2 příznaky : -

213 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í: 01010000 rel. posun strojních cyklů : 2 příznaky : -

214 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í: 01000000 rel. posun strojních cyklů : 2 příznaky : -

215 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í: 01010000 rel. posun strojních cyklů : 2 příznaky : -

216 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

217 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.............0 - 7 rel. posun strojních cyklů: 2 příznaky: -

218 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

219 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 JMP @A + DPTR provádí skok na relativní adresu vzhledem k obsahu registru DPTR. Posun pak může být 0 - 255.

220 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í: 10000000 rel. posun

221 Příklad : SJMP SMYCKA INC A : SMYCKA RR A

222 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

223 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: -

224 Příklad: ORG E80FH POKR MOV A,R1 : ORG EADCH AJMP POKR - skok zpět na POKR, t.j. adresu E80FH

225 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í: 00000010 adresa v.ř. kód adr...0 - 65535 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

226 JMP kód adr - Obecný skok Formát: JMP kód adr 0 ≤ kód adr ≤ 65 535 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.

227 JMP @A+DPTR - 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) JMP @A+DPTR Instrukce JMP @A+DPTR

228 Formát: JMP @A+DPTR Kódování: 01110011 strojních cyklů: 2 příznaky: -

229 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.

230 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

231 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

232 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

233 Formát: LCALL kód adr Kódování: 00010010 adresa v.ř. kód adr...0 - 65535 adresa n.ř. strojních cyklů: 2 příznaky: - Příklad : POM INC A : RETI : LCALL POM - volání podprogramu POM

234 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

235 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

236 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í: 00100010 strojních cyklů: 2 příznaky: -

237 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í: 00110010 Strojních cyklů: 2 Příznaky: -


Stáhnout ppt "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."

Podobné prezentace


Reklamy Google