:= | Legyen egyenlő. |
A | Akkumulátor |
data | 8 bites adat (byte). |
data 16 | 16 bites adat (2 byte). |
1. byte | Az utasítás első byte-ja. |
2. byte | Az utasítás második byte-ja. |
3. byte | Az utasítás harmadik byte-ja. |
port | Az I/O port 8 bites címe. |
r, r1, r2 | Az A, B, C, D, E, H, L regiszterek egyike. |
DDD, SSS | A regiszterek kijelölése az utasítás bitkombinációjában. |
rp | Regiszterpár jelölése. |
RP | A regiszterpár kijelölése az utasítás bitkombinációjában. |
rh | A kijelölt regiszterpár magasabb helyiértékű byte-ja. |
rl | A kijelölt regiszterpár alacsonyabb helyiértékű byte-ja. |
PC | Utasításszámláló 16 bites (2byte). |
PCH | A PC (program counter) regiszter magasabb helyiértékű byte-ja. |
PCL | A PC regiszter alacsonyabb helyiértékű byte-ja. |
SP | Veremtár (stackpointer) 16 bites (2byte). |
ri | Az r regiszter i-edik bitje ahol, i=0 legalacsonyabb helyiértékű bit, i=7 legmagasabb helyiértékű bit. |
Y, S, P, CY, AC | Jelzőbitek (flag-ek). |
(r) | Valamely tároló tartalma. |
+ | Összeadás. |
- | Kettes komplemens kóddal elvégzett kivonás. |
![]() |
Valamely tároló tartalmának logikai negálása. |
:=: | Csere. |
XYH | Hexadecimális szám, ahol X és Z hexadecimális számjegyek. |
|
|
|
|
|
|
|
|
|
|
|
|
000 | B | 01 | D-E |
|
|
|
|
|
|
|
|
|
|
||
|
|
||
|
|
Hardver megszakítási rutin címek: TRAP---24H RST7.5---3CH RST6.5---2CH RST5.5---34H
Szotver megszakítás címek: RST0---00H RST1---08H RST2---0FH RST3---1FH RST4---20H RST5---28H RST6---30H RST7---38H
A megszakítás kiszolgáló alprogram meghívását a memória
megadott (xxH) hexa címén kell elhelyezni.
1. Adatmozgató utasítások
MOV r1,r2 (move regiszter)
Az r2 regiszter tartalmát átviszi az r1 regiszterbe.
1. byte: 01DDDSSS
1 ciklus
4 fázisregiszter címzés
flag-eket nem változtatja meg.
MOV r,M (move from memory)
(r):=((H) (L))
Annak a memóriarekesznek a tartalmát, amelynek címét
a HL regiszterpár tartalmazza, betölti az r regiszterbe.
1. byte: 01DDD110
2 ciklus
7 fázis
regiszterpáron keresztül indirekt címzés flag-eket nem
változtatja meg.
MOV M,r (move to memory)
((H) (L)):=(r)
Az r regiszter tartalmát betölti abba a memóriarekeszbe,
melynek címét a HL regiszterpár tartalmazza.
1. byte: 01110SSS
2 ciklus
7 fázis
regiszterpáron keresztül indirekt címzés
flag-eket nem változtatja meg.
MOV r,data (move immediate)
(r):=(2. byte)
Az utasítás második bájtjában közvetlenül megadott adatot
betölti az r regiszterbe.
1. byte: 00DDD110
2. byte: data
2 ciklus
7 fázis
közvetlen adat
flag-eket nem változtatja meg.
MOV M,data (move to memory immediate)
((H) (L)):=(2. byte)
Az utasítás második bájtjában megadott adatot betölti
abba a memóriarekeszbe, amelynek címét a HL regiszterpár tartalmazza.
1. byte: 00110110=36H
2. byte: data
3 ciklus
10 fázis
közvetlen adat és regiszterpáron keresztül indirekt címzés
flag-eket nem változtatja meg.
LXI rp,data (load regiszter pair immediate)
(rh):=(3. byte)
(rl):=(2. byte)
Az utasítás harmadik bájtjában megadott adatot a kijelölt
regiszterpár magasabb, a második bájtjában megadott adatot a kijelölt regiszterpár
alacsonyabb helyiértékű részbe tölti be.
1. byte: 00RP0001
2. byte: alacsonyabb helyiértékű data
3. byte: magasabb helyiértékű data
3 ciklus
10 fázis
közvetlen regisztercímzés
flag-eket nem változtatja meg.
LXI addr (load accumulator direct)
(A):=((3. byte) (2. byte))
Az utasítás második és harmadik bájtjában egy memóriarekesz
címe van megadva. Ennek a memória bájtjának tartalmát az utasítás betölti
az akkumulátorba.
1. byte: 00111010=3AH
2. byte: a cím alacsonyabb helyiértékű bájtja
3. byte: a cím magasabb helyiértékű bájtja
4 ciklus
13 fázis
közvetlen adatcímzés
flag-eket nem változtatja meg.
STA addr (store accumulator direct)
((3. byte) (2. byte)):=(A)
Az utasítás második és harmadik bájtjában egy memóriarekesz
címe van megadva. Az akkumulátor tartalmát az utasítás betölti a kijelölt
memória bájtba.
1. byte: 00111010=32H
2. byte: a cím alacsonyabb helyiértékű bájtja
3. byte: a cím magasabb helyiértékű bájtja
4 ciklus
13 fázis
közvetlen adatcímzés
flag-eket nem változtatja meg.
LHLD addr (load H and L direct)
(L):=((3. byte) (2. byte))
(H):=((3. byte) (2. byte)+1)
Az utasítás második és harmadik bájtjában egy memóriarekesz
címe van megadva. Ennek a memória bájtjának tartalma az L, a következő,
egyel magasabb címen lévő memória bájt tartalma a H regiszterbe kerül.
1. byte: 00101010=2AH
2. byte: a cím alacsonyabb helyiértékű bájtja
3. byte: a cím magasabb helyiértékű bájtja
5 ciklus
16 fázis
közvetlen adatcímzés
flag-eket nem változtatja meg.
SHLD addr (store H and L direct)
((3. byte) (2. byte)):=(L)
((3. byte) (2. byte)+1):=(H)
Az utasítás második és harmadik bájtjában egy memóriarekesz
címe van megadva. Az utasítás ebbe a memória bájtba az L, a következő,
egyel magasabb címen lévő memória bájtba a H regiszter tartalmát tölti
be.
1. byte: 00100010=22H
2. byte: a cím alacsonyabb helyiértékű bájtja
3. byte: a cím magasabb helyiértékű bájtja
5 ciklus
16 fázis
közvetlen adatcímzés
flag-eket nem változtatja meg.
LDAX rp (load accumulator indirect)
(A):=((rp))
Az utasításban kijelölt regiszterpár 16 bites tartalma
egy memória bájt címe. Ennek a memória bájtnak a tartalmát az utasítás
betölti az akkumulátorba. Csak a BC és a DE regiszterpárt lehet ebben az
utasításban kijelölni.
1. byte: 00RP1010
2 ciklus
7 fázis
regiszterpáron keresztüli indirekt címzés
flag-eket nem változtatja meg.
STAX rp (store accumulator indirect)
((rp)):=(A)
Az utasításban kijelölt regiszterpár 16 bites tartalma
egy memória bájt címét tartalmazza. Az utasítás az akkumulátor tartalmát
betölti ebbe a memória rekeszbe. Csak a BC és a DE regiszterpárt lehet
ebben az utasításban kijelölni.
1. byte: 00RP0010
2 ciklus
7 fázis
regiszterpáron keresztüli indirekt címzés
flag-eket nem változtatja meg.
XCHG (exchange H and L with D and E)
(H):=:(D)
(L):=:(E)
Az utasítás kicseréli a H és L regiszterek tartalmát
a D és E regiszterek tartalmával (kölcsönösen).
1. byte: 11101011=EBH
1 ciklus
4 fázis
regiszter címzés
flag-eket nem változtatja meg.
2. Aritmetikai utasítások
A csoporthoz tartozó, kivonási műveletet végző utasítások
a kettes komplemens képzésével oldják meg a kivonást. A CY flag “1” értékű
lesz, ha van maradék (borrow) a legmagasabb operandus bitről és “0” lesz
ha nincs.
ADD r (add register)
(A):=(A)+(r)
Az akkumulátor és az r regiszter tartalmának összegét
az utasítás elhelyezi az akkumulátorba.
1. byte: 10000SSS
1 ciklus
4 fázis
regiszter címzés
Z, S, P, CY, AC flag-eket állítja.
ADD M (add memory)
(A):=(A)+((H) (L))
A HL regiszterpár tartalma kijelöli egy memória bájtot.
Ennek a memóriarekesznek és az akkumulátor tartalmának összegét az utasítás
elhelyezi az akkumulátorba.
1. byte: 10000110=86H
2 ciklus
4 fázis
regiszterpáron keresztüli indirekt címzés
Z, S, P, CY, AC flag-eket állítja.
ADI data (add immediate)
(A):=(A)+(2. byte)
Az utasítás második bájtjában megadott 8 bites adat és
az akkumulátor tartalmának összegét az akkumulátorba tölti az utasítás.
1. byte: 11000110=C6H
2. byte: data
2 ciklus
7 fázis
közvetlen adat
Z, S, P, CY, AC flag-eket állítja.
ADC r (add register with carry)
(A):=(A)+(r)+(CY)
Az utasítás összeadja az akkumulátor, a kijelölt r regiszter,
és a CY flag értékét. Az összeg az akkumulátorba kerül.
1. byte: 10001SSS
1 ciklus
4 fázis
regiszter címzés
Z, S, P, CY, AC flag-eket állítja.
ADC M (add register with carry)
(A):=(A)+((H) (L))+(CY)
A HL regiszterpár tartalma kijelöli egy memória bájtot.
Ennek a memória rekesznek, az akkumulátornak, és a CY flag-nek a tartalmát
az utasítás összeadja. Az összeg az akkumulátorba kerül.
1. byte: 10001110=8EH
2 ciklus
7 fázis
regiszterpáron keresztüli indirekt címzés
Z, S, P, CY, AC flag-eket állítja.
ACI data (add immediate with carry)
(A):=(A)+(2. byte)+(CY)
Az utasítás összeadja a második bájtban megadott adatot,
az akkumulátor tartalmát és a CY flag-et. Az összeg az akkumulátorba kerül.
1. byte: 11001110=CEH
2. byte: data
2 ciklus
7 fázis
közvetlen adat
Z, S, P, CY, AC flag-eket állítja.
SUB r (subtract register)
(A):=(A)-(r)
Az akkumulátor és az r regiszter tartalmának különbsége
az akkumulátorba kerül.
1. byte: 10010SSS
1 ciklus
4 fázis
regiszter címzés
Z, S, P, CY, AC flag-eket állítja.
SUB M (subtract register)
(A):=(A)-((H) (L))
A HL regiszterpár tartalma kijelöl egy memóriarekeszt.
Az utasítás kivonja ezen memória bájt tartalmát az akkumulátor tartalmából
és a különbség az akkumulátorba kerül.
1. byte: 10010110=96H
2 ciklus
7 fázis
regiszterpáron keresztüli indirekt címzés
Z, S, P, CY, AC flag-eket állítja.
SUI data (subtract immediate)
(A):=(A)-(2. byte)
Az utasítás kivonja az akkumulátor tartalmából a második
bájtjában megadott 8 bites adat. A különbség az akkumulátorba kerül.
1. byte: 11010110=D6H
2. byte: data
2 ciklus
7 fázis
közvetlen adat
Z, S, P, CY, AC flag-eket állítja.
SBB r (subtract register with borrow)
(A):=(A)-(r)-(CY)
Az utasításban kijelölt r regiszter tartalmát és a CY
flag értékét az utasítás kivonja az akkumulátor tartalmából. A különbség
az akkumulátorba kerül.
1. byte: 10011SSS
1 ciklus
4 fázis
regiszter címzés
Z, S, P, CY, AC flag-eket állítja.
SBB M (subtract memory with borrow)
(A):=(A)-((H) (L))-(CY)
A HL regiszterpár kijelöl egy memória bájtot, ezen memóriarekesz
tartalmát és a CY flag értékét az utasítás kivonja az akkumulátor tartalmából.
A különbség az akkumulátorba kerül.
1. byte: 10011110=9EH
2 ciklus
7 fázis
regiszterpáron keresztüli indirekt címzés
Z, S, P, CY, AC flag-eket állítja.
SBB M (subtract immediate with borrow)
(A):=(A)-(2. byte)-(CY)
Az utasítás kivonja a második bájtban megadott adatot
és a CY flag értékét az akkumulátor tartalmából. A különbség az akkumulátorba
kerül.
1. byte: 11011110=DEH
2. byte: data
2 ciklus
7 fázis
közvetlen adat
Z, S, P, CY, AC flag-eket állítja.
INR r (increment register)
(r):=(r)+1
Az r regiszter tartalmát az utasítás eggyel megnöveli.
A CY flag értékét az utasítás nem változtatja meg.
1. byte: 00DDD100
1 ciklus
4 fázis
regiszter címzés
Z, S, P, AC flag-eket állítja.
INR M (increment memory)
((H) (L)):=((H) (L))+1
Az utasítás eggyel növeli annak a memória rekesznek a
tartalmát, amelynek címét a HL regiszterpár tartalmazza. A CY flag értékét
az utasítás nem változtatja meg.
1. byte: 00110100=34H
3 ciklus
10 fázis
regiszterpáron keresztüli indirekt címzés
Z, S, P, AC flag-eket állítja.
DCR r (decrement register)
(r):=(r)-1
Az r regiszter tartalmát az utasítás eggyel csökkenti.
A CY flag értékét az utasítás nem változtatja meg.
1. byte: 00DDD101
1 ciklus
4 fázis
regisztercímzés
Z, S, P, AC flag-eket állítja.
DCR M (decrement memory)
((H) (L)):=((H) (L))-1
Az utasítás eggyel csökkenti annak a memória rekesznek
a tartalmát, amelynek címét a HL regiszterpár tartalmazza. A CY flag értékét
az utasítás nem változtatja meg.
1. byte: 00110101=35H
3 ciklus
10 fázis
regiszterpáron keresztüli indirekt címzés
Z, S, P, AC flag-eket állítja.
INX rp (increment register pair)
(rh)(rl):=(rh) (rl)+1
Az utasítás a kijelölt regiszterpár tartalmát eggyel
megnöveli.
1. byte: 00RP0011
1 ciklus
6 fázis
regisztercímzés
flag-eket nem változtatja meg.
DCX rp (decrement register pair)
(rh)(rl):=(rh) (rl)-1
Az utasítás a kijelölt regiszter pár tartalmát eggyel
csökkenti.
1. byte: 00RP1011
1 ciklus
6 fázis
regisztercímzés
flag-eket nem változtatja meg.
DAD rp (add register pair to H and L)
(H) (L):=(H) (L)+(rh) (rl)
A kijelölt rp regiszterpár tartalmát az utasítás hozzáadja
a HL regiszterpár tartalmához. Az eredmény a HL-be kerül. Az utasítás csak
a CY flag-et állítja, mely “1” értékű lesz, ha az összeadás a regiszterpár
legmagasabb helyiértékű bitjéről átvitelt hozott létre.
1. byte: 00RP1001
3 ciklus
10 fázis
regisztercímzés
CY flag-et állítja.
DAA (decimal adjust accumulator)
Az utasítás az akkumulátorban lévő 8 bites számot két,
egyenként 4 bites BCD számmá kódolja át.
1. byte: 00100111=27H
1 ciklus
4 fázis
Z, S, P, CY, AC flag-eket állítja.
3. Logikai utasítások
ANA r (AND register)
(A):=(A) AND (r)
Az utasítás az akkumulátor és az r regiszter tartalmának
logikai ÉS kapcsolatát képezi. Az eredmény az akkumulátorba kerül. Az utasítás
törli a CY flag-et (CY=0).
1. byte: 10100SSS
1 ciklus
4 fázis
regiszter címzés
Z, S, P, CY, AC flag-eket állítja.
ANA M (AND memory)
(A):=(A) AND ((H) (L))
A HL regiszterpár tartalma kijelöl egy memóriarekeszt.
Az utasítás képzi ezen memória bájt és az akkumulátor tartalmának ÉS kapcsolatát.
Az eredmény az akkumulátorba kerül. Az utasítás törli a CY flag-et (CY=0).
1. byte: 10100110=A6H
2 ciklus
7 fázis
regiszterpáron keresztüli indirekt címzés
Z, S, P, CY, AC flag-eket állítja.
ANI data (AND immediate)
(A):=(A) AND (2. byte)
Az utasítás képzi az utasítás második bájtjának és az
akkumulátor tartalmának ÉS kapcsolatát. Az eredmény az akkumulátorba kerül.
Az utasítás törli a CY flag-et (CY=0).
1. byte: 11100110=E6H
2. byte: data
2 ciklus
7 fázis
közvetlen adat
Z, S, P, CY, AC flag-eket állítja.
XRA r (exclusive OR register)
(A):=(A) EOR (r)
Az utasítás az akkumulátor és a kijelölt r regiszter
tartalmának kizáró VAGY kapcsolatát képezi. Az eredmény az akkumulátorba
kerül. Az utasítás törli a CY és az AC flag-et (CY=0, AC=0).
1. byte: 10101SSS
1 ciklus
4 fázis
regiszter címzés
Z, S, P, CY, AC flag-eket állítja.
XRA M (exclusive OR memory)
(A):=(A) EOR ((H) (L))
A HL egy memóriarekesz címét tartalmazza. Az utasítás
képzi ezen memória bájt és az akkumulátor tartalmának KIZÁRÓ VAGY kapcsolatát.
Az eredmény az akkumulátorba kerül. Az utasítás törli a CY és az AC flag-et
(CY=0, AC=0).
1. byte: 10101110=AEH
2 ciklus
7 fázis
regiszterpáron keresztüli indirekt címzés
Z, S, P, CY, AC flag-eket állítja.
XRI data (exclusive OR immediate)
(A):=(A) EOR (2. byte)
Az utasítás képzi az utasítás második bájtjában megadott
8 bites adatnak és az akkumulátor tartalmának KIZÁRÓ VAGY kapcsolatát.
Az eredmény az akkumulátorba kerül. Az utasítás törli a CY flag-et (CY=0).
1. byte: 11101110=EEH
2. byte: data
2 ciklus
7 fázis
közvetlen adat
Z, S, P, CY, AC flag-eket állítja.
ORA r (OR register)
(A):=(A) OR (r)
Az utasítás az akkumulátor és a kijelölt r regiszter
tartalmának logikai VAGY kapcsolatát képezi. Az eredmény az akkumulátorba
kerül. Az utasítás törli a CY és az AC flag-et (CY=0, AC=0).
1. byte: 10110SSS
1 ciklus
4 fázis
regiszter címzés
Z, S, P, CY, AC flag-eket állítja.
ORA M (OR memory)
(A):=(A) OR ((H) (L))
A HL regiszterpár tartalma egy memória bájtot jelöl ki.
Az utasítás képzi ezen memória bájt és az akkumulátor tartalmának logikai
VAGY kapcsolatát. Az eredmény az akkumulátorba kerül. Az utasítás törli
a CY és az AC flag-et (CY=0, AC=0).
1. byte: 10110110=B6H
2 ciklus
7 fázis
regiszterpáron keresztüli indirekt címzés
Z, S, P, CY, AC flag-eket állítja.
ORI data (OR immediate)
(A):=(A) OR (2. byte)
Az utasítás képzi az utasítás második bájtjában megadott
8 bites adat és az akkumulátor tartalmának logikai VAGY kapcsolatát. Az
eredmény az akkumulátorba kerül. Az utasítás törli a CY és az AC flag-et
(CY=0, AC=0).
1. byte: 11110110=F6H
2. byte: data
2 ciklus
7 fázis
közvetlen adat
Z, S, P, CY, AC flag-eket állítja.
CMP r (compare register)
(A)-(r)
Az utasítás elvégzi az utasításban kijelölt r regiszter
tartalmának kivonását az akkumulátorban lévő számból (kettes komplemens).
Az akkumulátor és az r regiszter tartalma változatlan marad, de a kivonás
eredménye állítja a flag-eket.
Z=1 ha (A)=(r)
CY=1 ha az akkumulátor tartalma kisebb az r regiszter
tartalmánál.
1. byte: 10111SSS
1 ciklus
4 fázis
regiszter címzés
Z, S, P, CY, AC flag-eket állítja.
CMP M (compare memory)
(A)-((H) (L))
A HL regiszterpár tartalma egy memória bájtot jelöl ki.
Az utasítás az akkumulátor tartalmából kivonja ezen memóriarekesz tartalmát
(kettes komplemens). Az akkumulátor és az memória tartalma változatlan
marad, de a kivonás eredménye állítja a flag-eket.
Z=1 ha (A)=((H) (L))
CY=1 ha az akkumulátor tartalma kisebb mint a kijelölt
memória bájt tartalma.
1. byte: 10111110=BEH
2 ciklus
7 fázis
regiszterpáron keresztüli indirekt címzés
Z, S, P, CY, AC flag-eket állítja.
CMI data (compare immediate)
(A)-(2. byte)
Az utasítás a 2. bájtban megadott 8 bites számot kivonja
az akkumulátor tartalmából. Az akkumulátor tartalma változatlan marad,
de a kivonás eredménye állítja a flag-eket.
Z=1 ha (A)=(2. byte)
CY=1 ha az akkumulátor tartalma kisebb az utasítás 2.
bájtjában megadott számnál.
1. byte: 11111110=FEH
2. byte: data
2 ciklus
7 fázis
közvetlen adat
Z, S, P, CY, AC flag-eket állítja.
RLC (rotate left)
(An+1):=(An);…(A0):=(A7); (CY):=(A7)
Az akkumulátor tartalma egy helyiértékkel (bittel) balra
lép. Az akkumulátor legkisebb helyiértékű bitjének értéke (A7) a léptetés
előtti értékét veszi fel a CY flag és az akkumulátor legkisebb helyiértékű
bitje. A CY flag eredeti értéke elveszik. Az utasítás csak a CY flag-et
állítja.
1. byte: 00000111=07H
1 ciklus
4 fázis
CY flag-et állítja.
RRC (rotate right)
(An):=(An+1); (A7):=(A0); (CY):=(A7)
Az akkumulátor tartalma egy helyiértékkel (bittel) jobbra
lép. Az akkumulátor legkisebb helyiértékű bitjének értéke (A0) veszi fel
a CY flag legnagyobb helyiértékű bit. A CY flag eredeti értéke elveszik.
Az utasítás csak a CY flag-et állítja.
1. byte: 00001111=OFH
1 ciklus
4 fázis
CY flag-et állítja.
RAL (rotate left through carry)
(An+1):=(An); (CY):=(A7); (A0):=(CY)
Az akkumulátor tartalma a CY flag-en keresztül egy helyiértékkel
balra lép. A CY eredeti értékét az akkumulátor legkisebb helyiértékű bitje
veszi fel, míg a CY flag-be beíródik az akkumulátor legmagasabb helyiértéken
tárolt, léptetés előtti bit. Az utasítás csak a CY flag-et állítja.
1. byte: 00010111=17H
1 ciklus
4 fázis
CY flag-et állítja.
RAR (rotate right through carry)
(An):=(An+1); (CY):=(A0); (A7):=(CY)
Az akkumulátor tartalma a CY flag-en keresztül egy helyiértékkel
jobbra lép. A legkisebb helyiértékű akkumulátor bit léptetés előtti értéke
határozza meg a CY flag értékét, míg a CY flag léptetés előtti értéke beíródik
az akkumulátor legfelső helyiértékére. Az utasítás csak a CY flag-et állítja.
1. byte: 00011111=1FH
1 ciklus
4 fázis
CY flag-et állítja.
CMA (complement accumulator)
(A):=( )
Az utasítás bitenként komplementálja (negálja) az akkumulátor
tartalmát. A flag-ek értéke változatlan.
1. byte: 00101111=2FH
1 ciklus
4 fázis
A flag-ket nem állítja.
CMC (complement carry)
(CY):=( )
Az utasítás komplementálja CY flag-et. A többi flag-ek
értéke változatlan.
1. byte: 00111111=3FH
1 ciklus
4 fázis
CY flag-et állítja.
STC (set carry)
(CY):=1
Az utasítás logikai 1-be állítja a CY flag-et. A többi
flag-ek értéke változatlan.
1. byte: 00110111=37H
1 ciklus
4 fázis
CY flag-et állítja.
4. Ugró utasítások
Ebbe a csoportba tartozó utasítások a programvégrehajtás
menetét befolyásolják.
Az utasítások egyike sem változtatja meg a flag-ek értékét.
A feltételes ugrásoknál a
bitkombinációban megadott CCC bitek jelölik ki az ugrási
feltételt, a következők szerint.
Feltétel CCC
NZ (nem zérus, Z=0 000
Z (zérus, Z=1) 001
NC (nincs átvitel, CY=0) 010
C (van átvitel, CY=1) 011
PO (páratlan paritás, P=0) 100
PE (páros paritás, P=1) 101
P (pozitív, S=0) 110
M (negativ, S=1) 111
JMP addr (jump)
(PC):=(3. byte) (2. byte)
A programvégrehajtás az utasítás 2. és 3. bájtjában megadott
című utasításon folytatódik, feltétel vizsgálat és stack művelet nélkül.
1. byte: 11000011=C3H
2. byte: a cím alacsonyabb helyiértékei
3. byte: a cím magasabb helyiértékei
3 ciklus
10 fázis
közvetlen címmegadás
a flag-eket nem változtatja meg.
Jcond addr (conditional jump)
Ha (CCC) feltétel fennáll
(PC):=(3. byte) (2. byte)
Ha az utasításban kijelölt feltétel fennáll, akkor a
programvégrehajtás az utasítás 2. és 3. bájtjában megadott című utasításon
folytatódik, stack művelet nélkül. Egyébként (ha a feltétel nem áll fenn)
a következő utasítás végrehajtására kerül sor.
1. byte: 11CCC010
2. byte: a cím alacsonyabb helyiértékei
3. byte: a cím magasabb helyiértékei
2 vagy 3 ciklus
7 vagy 10 fázis
közvetlen címmegadás
a flag-eket nem változtatja meg.
CALL addr (call)
((SP)-1):=(PCH)
((SP)-2):=(PCL)
(SP):=((SP)-2)
(PC):=(3. byte) (2. byte)
Feltétel nélküli szubrutinhívás, stack művelettel. A
visszatérés címe, amelyet az utasításszámlálóból kell kiolvasni, letárolódik
a stack-ben. A PC magasabb helyiértékű bitjei abba a memória bájtba (stack)
kerülnek, amelynek a címe egyel kevesebb, mint az SP tartalma, és a PC
alacsonyabb helyiértékű bitje abba a memória bájtba (stack) kerülnek, amelynek
címe kettővel kevesebb, mint az SP tartalma. Az SP értéke kettővel csökken,
tehát az utasítás végrehajtása után annak a memória bájtjának a címét tartalmazza,
amelybe a PCL került. Végül az utasításszámlálóba beíródik az utasítás
2. és 3. bájtjában megadott ugrási cím, amely a szubrutin kezdő címe.
1. byte: 11001101=CDH
2. byte: a cím alacsonyabb helyiértékű bitjei
3. byte: a cím magasabb helyiértékű bitjei
5 ciklus
18 fázis
közvetlen (utasítás) címmegadás
regiszterpáron keresztüli indirekt (adat) címzés
a flag-eket nem változtatja meg.
C cond addr (condition call)
Ha a (CCC) feltétel fennáll, akkor
((SP)-1):=(PCH)
((SP)-2):=(PCL)
(SP):=((SP)-2)
(PC):=(3. byte) (2. byte)
Feltételes szubrutinhívás, stack művelettel. Ha az utasításban
kijelölt feltétel fennáll, akkor hatása azonos a CALL utasításával (lásd
ott). Ha nem, akkor a következő utasítás végrehajtására kerül sor.
1. byte: 11CCC100
2. byte: a cím alacsonyabb helyiértékű bitjei
3. byte: a cím magasabb helyiértékű bitjei
(CCC) fennállása esetén 5, egyébként 2 ciklus
(CCC) fennállása esetén 18, egyébként 9 fázis
közvetlen (utasítás) címmegadás
regiszterpáron keresztüli indirekt (adat) címzés
a flag-eket nem változtatja meg.
RET (return)
(PCL):= ((SP))
(PCH):= ((SP)+1)
(SP):=((SP)-2)
Feltétel nélküli, szubrutinból történő visszatérést előíró
utasítás, stack művelettel. Annak a memóriarekesznek a tartalma (stack),
amelynek a címét az SP tartalmazza az utasításszámláló alacsonyabb, és
annak a memóriarekesznek a tartalma (stack), amelynek a címe eggyel nagyobb
mint az SP tartalma, az utasításszámláló magasabb helyiértékű bitjeire
íródik. A stack pointer értéke kettővel növekszik, tehát a stack következő,
még ki nem olvasott adatára mutat.
1. byte: 11001001=C9H
3 ciklus
10 fázis
regiszterpáron keresztüli indirekt címzés
a flag-eket nem változtatja meg.
R cond (condition return)
Ha a (CCC) feltétel fennáll, akkor
(PCL):= ((SP))
(PCH):= ((SP)+1)
(SP):=((SP)-2)
Feltételes, szubrutinból történő visszatérést előíró
utasítás, stack művelettel. Ha az utasításban megadott CCC feltétel fennáll,
akkor hatása azonos a RET utasításéval (lásd ott). Ha nem, akkor a következő
utasítás végrehajtásra kerül sor.
1. byte: 11CCC000
(CCC) fennállása esetén 4, egyébként 1 ciklus
(CCC) fennállása esetén 12, egyébként 6 fázis
regiszterpáron keresztüli indirekt címzés
a flag-eket nem változtatja meg.
RST n (restart)
Szotver megszakítás címek:
RST0---00H RST1---08H RST2---0FH
RST3---1FH RST4---20H RST5---28H
RST6---30H RST7---38H
A megszakítás kiszolgáló alprogram meghívását a memória
megadott (xxH) hexa címén kell elhelyezni.
((SP)-1):=(PCH)
((SP)-2):=(PCL)
(SP):=((SP)-2)
(PC):=8. (NNN)
Feltétel nélküli, szubrutinhívó utasítás, stack művelettel.
Az utasításban megadott három NNN bit jelöli ki az ugrási címet. A programszámláló
magasabb helyiértékei abba a memóriarekeszbe kerülnek, amelynek címe eggyel,
a programszámláló alacsonyabb helyiértékei abba a programrekeszbe kerülnek,
amelynek a címe kettővel kevesebb, mint az SP tartalma. Az SP tartalma
kettővel csökken, tehát az RST végrehajtása után arra a memória bájtra
mutat, amelyre a (PCL) került. Az utasítás végrehajtás azon a címen folytatódik,
amelynek címe binárisan NNNOOO.
Így a következő címeket lehet kijelölni (decimálisan):
0, 8, 16, 24, 32, 40, 48, 56.
RST végrehajtása után a PC 16 bites tartalma binárisan:
0000 0000 00NN N000
1. byte: 11NNN111
3 ciklus
11 fázis
regiszterpáron keresztüli indirekt (adat) címzés
közvetlen (utasítás) címmegadás
PCHL (jump H and L indirect, move H and L to PC)
(PCH):= (H)
(PCL):= (L)
Feltételvizsgálat és stack művelet nélküli ugró utasítás,
ahol az ugrási címet a HL regiszterpár tartalmazza. A H regiszterben vannak
az ugrási cím magasabb helyiértékei.
1. byte: 11101001=E9H
1 ciklus
6 fázis
regiszter címzés
a flag-eket nem változtatja meg.
5. Stack, I/O és a gépi vezérlés utasításai
Push rp (push regiszter pair)
((SP-1):=(rh)
((SP-2):=(rl)
(SP):= (SP)-2
Az utasításban kijelölt regiszterpár tartalma kimentődik
a stack-be. A magasabb helyiértékű regiszter tartalma abba a memóriarekeszbe
kerül, amelynek címe eggyel, az alacsonyabb helyiértékű regiszter tartalma
abba a memóriarekeszbe kerül, amelynek címe kettővel kevesebb a stack pointer
által mutatott címnél. Az SP értéke kettővel csökken, tehát a PUSH végrehajtása
után arra a címre mutat, ahova az rl került. A stack pointert nem lehet
kijelölni kimentésre!
1. byte: 11RP0101
3 ciklus
13 fázis
regiszterpáron keresztüli indirekt címzés
a flag-eket nem állítja.
Push PSW (push processzor status word)
((SP)-1):=(A)
((SP)-2)0:=(CY); ((SP)-2)1:=1; ((SP)-2)2:=P
((SP)-2)3:=0; ((SP)-2)4:=AC; ((SP)-2)5:=0
((SP)-2)6:=Z; ((SP)-2):=S
(SP):= (SP)-2
Az akkumulátor tartalmából és a flag-ekből összeállított
2 byte-os processzor státusz szó (PSW) kimentése a stack-be. Az akkumulátor
tartalma arra a memória bájtra kerül, amelynek címe eggyel kevesebb az
SP által mutatott értéknél. A flag-ekből összeállított bájt (S, Z, O, AC,
P, 1, CY, ahol CY kerül a legkisebb helyiértékre) arra a memória bájtra
kerül, amelynek a címe kettővel kevesebb az SP által mutatott értéknél.
Az SP tartalma kettővel csökken, így a PUSH PSW végrehajtása után arra
a memória bájtra mutat, ahová a flag-ekből képzett bájtot írtuk.
1. byte: 11110101=F5H
3 ciklus
12 fázis
regiszterpáron keresztüli indirekt címzés
a flag-eket nem állítja.
POP rp (pop regiszter pair)
(rl):=((SP))
(rh):=((SP)+1)
(SP):=(SP)+2
A regiszterpár visszaállítása a stack-ből. Annak a memóriarekesznek
tartalma, melynek a címét az SP tartalmazza, az utasításban kijelölt regiszterpár
alacsonyabb, a következő eggyel magasabb című rekeszének tartalma a regiszterpár
alacsonyabb helyiértékű bájtjába kerül. Az SP értéke kettővel megnövelődik,
tehát a POP rp végrehajtása után a következő, még ki nem olvasott memória
bájtra (stack) mutat. Az SP-t nem lehet kijelölni visszaállításra.
1. byte: 11RP0001
3 ciklus
10 fázis
regiszterpáron keresztüli indirekt címzés
a flag-eket nem állítja.
POP PSW (pop processzor status word)
(CY):=((SP))0; (P):=((SP))2; (AC):=((SP))4
(Z):=((SP))6; (S):=((SP))7;
(A):=((SP)+1)
(SP):= (SP)+2
Az akkumulátor tartalmának és a flag-ek értékének visszaállítása
a stack-ből. A flag-ek értékéből képzett és a PUSH PSW-vel letárolt bájt
(lásd ott) azon a memóriacímen van elhelyezve, amelynek a címét az SP tartalmazza,
a visszaállítás innen történik. Az akkumulátorba az a bájt íródik be, amelynek
a címe eggyel nagyobb az SP által mutatott értékénél. Az SP tartalma kettővel
megnövelődik, tehát a következő még ki nem olvasott memóriacímre (stack)
mutat.
1. byte: 11110001=F1H
3 ciklus
10 fázis
regiszterpáron keresztüli indirekt címzés
Z, S, P, CY, AC flag-eket állítja.
XTHL (exchange stack top with H and L)
(L):=:((SP))
(H):=:((SP)+1)
Az L regiszter és az SP által tartalmazott című memória
bájt (stack), valamint a H regiszter és annak a memória bájtjának (stack),
amelynek címe eggyel magasabb az SP által tartalmazott címnél, kicserélődik.
A stack pointer változatlan marad.
1. byte: 11100011=E3H
5 ciklus
16 fázis
regiszterpáron keresztüli indirekt címzés
a flag-eket nem állítja.
SPHL (move HL to SP)
(SP):=(H) (L)
A HL regiszterpár 16 bites tartalmát az utasítás betölti
a stack pointerbe.
1. byte: 11111001=F9H
1 ciklus
6 fázis
regiszter címzés
a flag-eket nem állítja.
IN port (input)
(A):=(data)
Az utasítás 2. bájtja egy 8 bites input port címét (sorszámát)
tartalmazza. Az utasítás hatására a kijelölt input portról beolvasott adat
az akkumulátorba kerül.
1. byte: 11011011=DBH
2. byte: port (8 bites port cím)
3 ciklus
10 fázis
közvetlen címmegadás
a flag-eket nem állítja.
OUT port (output)
(data):=(A)
Az utasítás 2. bájtja egy 8 bites output port címét (sorszámát)
tartalmazza. Az utasítás hatására az akkumulátor tartalma kiíródik a kijelölt
output portra.
1. byte: 11010011=D3H
2. byte: port (8 bites port cím)
3 ciklus
10 fázis
közvetlen címmegadás
a flag-eket nem állítja.
EI (enable interrupt)
Az utasítás végrehajtása után a CPU megszakítási rendszere
engedélyezett állapotba kerül (INTE=1). Az első INTR vagy RSTi.5 elfogadása
az EI utáni első utasítás után lehetséges.
1. byte: 11111011=FBH
1 ciklus
4 fázis
a flag-eket nem állítja.
DI (disable interrupt)
A DI utasítás végrehajtása után közvetlenül, a CPU megszakításkéréseket
nem fogad el (INTE=0). Engedélyezett állapot EI hatására jön létre.
1. byte: 11110011=F3H
1 ciklus
4 fázis
a flag-eket nem állítja.
HLT (halt)
A CPU a HALT utasítás hatására megáll, HALT állapotba
kerül. A regiszterek és a flag-ek tartalma nem változik meg.
1. byte: 01110110=76H
1 ciklus
5 fázis
a flag-eket nem állítja.
NOP (no operation)
A NOP utasítás hatására nincs változás a memória, a portok,
vagy a CPU-ba lévő tárolók állapotába. Az utasítás végrehajtás a következő
(NOP utáni) utasításon folytatódik.
1. byte: 00000000=00H
1 ciklus
4 fázis
a flag-eket nem állítja.
SIM (set interrupt mask)
(RST 5.5 maszk):=(A)0, ha (A)3=1
(RST 6.5 maszk):=(A)1, ha (A)3=1
(RST 7.5 maszk):=(A)2, ha (A)3=1
(A)3= maszk beállítás (A2, A1, A0) engedélyezés
(A)4= RST 7.5 megszakítás törlése
(A)6= soros kimenet (SOD) beállítás engedélyezése
SOD=(A)7, ha (A)6=1
A SIM többcélú utasítás, amely a végrehajtás előtt az
akkumulátorban létrehozott adat alapján maszkolhatja az RST megszakítás-bemeneteket,
és beállíthatja a soros kimenetet.
Az RST 5.5, RST 6.5, RST 7.5 megszakítás-bemeneteket le
lehet maszkolni, ha az (A)3=1. és a megfelelő akkumulátor bit 0. (A)3=0
akkor a maszkbitek értéke közömbös. Az (A)4 biten külön törölni lehet az
élre érzékeny RST 7.5-höz tartozó belső flip-flopot (ez megszünteti a megszakításkérést).
A 8085-ös SOD jelű soros kimenete felveszi az (S)7 bit értékét, ha (A)6=1,
egyébként változatlan marad.
1. byte: 00110000=30H
1 ciklus
4 fázis
a flag-eket nem állítja.
RIM (read interrupt mask)
(A)0:=RST 5.5 maszk
(A)1:=RST 6.5 maszk
(A)2:=RST 7.5 maszk
(A)3:=INTE
(A)4:=RST 5.5
(A)5:=RST 6.5
(A)6:=RST 7.5
(A)7:=SID
A RIM utasítás létrehozza az akkumulátorban a 8085 megszakítási
rendszerére és a soros bemenetének állapotára vonatkozó bájtot. Az állapotszó
tartalmazza az RST bemenetek állapotára és maszkjaira vonatkozó adatokat,
valamint a megszakításkérés elfogadásának általános engedélyezettségét
(INTE). A legelső biten a soros bemenet (SID) aktuális értéke jelenik meg.
1. byte: 00100000=20H
1 ciklus
4 fázis
a flag-eket nem állítja.