Serwis Edukacyjny
nauczycieli

w I-LO w Tarnowie
obrazek

Materiały dla uczniów liceum

  Wyjście       Spis treści       Wstecz  

Tłumaczenie: mgr Jerzy Wałaszek

©2026 mgr Jerzy Wałaszek

Opis instrukcji mikroprocesora Z80 – 16

SPIS TREŚCI

Opis instrukcji mikroprocesora Z80 – 16

Grupa instrukcji wejścia / wyjścia

IN A,(n)

INPUT DATA = Wczytaj dane

Operacja: A ← (n)
Mnemonik: IN
Argumenty A,(n)
b7 b6 b5 b4 b3 b2 b1 b0
1 1 0 1 1 0 1 1 DB
← n →  
Opis: Argument n jest umieszczany na
dolnej połówce (od A0 do A7)
magistrali adresowej w celu
wybrania urządzenia we/wy
na jednym z dostępnych 256
portów. Zawartość Akumulatora
również pojawia się w tym
samym czasie na górnej połówce
(A8 do A15)
magistrali adresowej.
Następnie jeden bajt z wybranego
portu jest umieszczany przez
adresowane urządzanie na
magistrali danych, skąd
mikroprocesor odczytuje go do
rejestru A.
Cykle Takty Czas
3 11 (4,3,4) 2,75μs
Zmieniane znaczniki: Żaden
Przykład: Jeśli Akumulator ma zawartość
23H
, a bajt 7BH jest dostępny
w urządzeniu zewnętrznym,
które zostało skojarzone
z portem we/wy 01H, to po
wykonaniu instrukcji IN A,(01H)
do akumulatora trafi 7BH.

IN r,(C)

INPUT DATA = Wczytaj dane

Operacja: r ← (C)
Mnemonik: IN
Argumenty r,(C)
b7 b6 b5 b4 b3 b2 b1 b0
1 1 1 0 1 0 1 1 EB
0 1 r 0 0 0  
Opis: Zawartość rejestru C jest umieszczana na
dolnej połówce (A0 - A7) magistrali adresowej
w celu wybrania urządzenia we/wy na jednym
z 256 możliwych portów. Zawartość rejestru B
jest również w tym samym czasie umieszczana
na górnej połówce (A8 - A15) magistrali
adresowej. Następnie jeden bajt z wybranego
portu zostaje umieszczony na magistrali
danych przez zaadresowane urządzenie
we/wy, skąd mikroprocesor pobiera go do
rejestru r, który może być dowolnym
z dostępnych rejestrów 8-bitowych.
Poniższa tabela przedstawia sposób
kodowania tych rejestrów w kodzie
operacyjnym instrukcji.
Rejestr r  
B 000  
C 001  
D 010  
E 011  
H 100  
L 101  
- 110 Niezdefiniowany rejestr,
ustawiane są jedynie znaczniki
A 111  
Cykle Takty Czas
3 12 (4,4,4) 3,00μs
Zmieniane znaczniki: S jest ustawiany na jeden zgodnie z bitem
nr 7 wczytanych danych
Z jest ustawiany na 1, jeśli wczytany bajt
ma wartość zero, inaczej jest zerowany
H jest zerowany
P/V jest ustawiany na 1, jeśli wczytany bajt
posiada parzystą liczbę bitów o stanie 1,
inaczej jest zerowany
N jest zerowany
C nie jest zmieniany
Przykład: Jeśli zawartością rejestru C jest 07H,
a w urządzeniu zewnętrznym skojarzonym
z portem 07H znajduje się gotowy do
odczytu bajt 7BH, to po wykonaniu
instrukcji IN D,(C) w rejestrze D znajdzie
się 7BH.

OUT (n),A

OUTPUT DATA = Wyślij dane

Operacja: (n) ← A
Mnemonik: OUT
Argumenty (n),A
b7 b6 b5 b4 b3 b2 b1 b0
1 1 0 1 0 0 1 1 D3
← n →  
Opis: Argument n jest umieszczany
na dolnej połówce (od A0 do A7)
magistrali adresowej w celu
wybrania urządzenia we/wy
na jednym z dostępnych 256
portów. Zawartość Akumulatora
również pojawia się w tym
samym czasie na górnej połówce
(A8 do A15) magistrali adresowej.
Następnie bajt z Akumulatora
zostaje umieszczony na
magistrali danych i zapisany
w wybranym urządzeniu we/wy.
Cykle Takty Czas
3 11 (4,3,4) 2,75μs
Zmieniane znaczniki: Żaden
Przykład: Jeśli Akumulator ma zawartość
23H
, to po wykonaniu instrukcji
OUT (01H),A
bajt 23H zostaje
zapisany w urządzeniu we/wy
podłączonym do portu we/wy
o adresie 01H.

OUT (C),r

OUTPUT DATA = Wyślij dane

Operacja: (C) ← r
Mnemonik: OUT
Argumenty (C),r
b7 b6 b5 b4 b3 b2 b1 b0
1 1 1 0 1 0 1 1 EB
0 1 r 0 0 1  
Opis: Zawartość rejestru C jest
umieszczana na dolnej
połówce (A0 - A7) magistrali
adresowej w celu wybrania
urządzenia we/wy na jednym
z 256 możliwych portów.
Zawartość rejestru B jest
również w tym samym
czasie umieszczana na górnej
połówce (A8 - A15) magistrali
adresowej. Następnie bajt
z rejestru r jest umieszczany
na magistrali danych
i zapisany do wybranego
urządzenia zewnętrznego.
Rejestr r może być dowolnym
rejestrem 8 bitowym danych
mikroprocesora. Poniższa
tabela przedstawia sposób
kodowania tych rejestrów
w kodzie operacyjnym
instrukcji.
Rejestr   r
B   000
C   001
D   010
E   011
H   100
L   101
A   111
Cykle Takty Czas
3 12 (4,4,4) 3,00μs
Zmieniane znaczniki: Żaden
Przykład: Jeśli zawartością rejestru C
jest 01H, a w rejestrze D
znajduje się 5AH, to przy
wykonaniu instrukcji
OUT (C),D
bajt 5AH jest
zapisywany do urządzenia
peryferyjnego przydzielonego
do portu we/wy o adresie 01H.

INI

INPUT DATA AND INCREMENT HL = Wczytaj dane i zwiększ HL

Operacja: (HL) ← (C), BB-1, HLHL+1
Mnemonik: INI
Kod operacyjny
b7 b6 b5 b4 b3 b2 b1 b0
1 1 1 0 1 1 0 1 ED
1 0 1 0 0 0 1 0 A2
Opis: Zawartość rejestru C jest umieszczana na dolnej połówce (A0 - A7)
magistrali adresowej w celu wybrania urządzenia we/wy na jednym
z 256 możliwych portów. Rejestr B może być używany jako licznik
bajtów, a jego zawartość jest również w tym samym czasie
umieszczana na górnej połówce (A8 - A15) magistrali adresowej.
Następnie bajt z zaadresowanego urządzenia we/wy jest
umieszczany na magistrali danych, skąd pobiera go mikroprocesor.
Pobrany bajt jest umieszczany w komórce pamięci wskazywanej
przez zawartość pary rejestrów HL. Na koniec licznik w rejestrze B
jest zmniejszany o 1, a zawartość pary rejestrów HL jest
zwiększana o 1.
Cykle Takty Czas
4 16 (4,5,3,4) 4,00μs
Zmieniane znaczniki: S - stan nieokreślony
Z - jest ustawiany na 1, jeśli B-1 = 0, inaczej jest zerowany
H - stan nieokreślony
P/V - stan nieokreślony
N - jest ustawiany na 1
C - stan nieokreślony
Przykład: Jeśli rejestr C zawiera 07H, B zawiera 10H, HL zawiera 1000H,
a bajt 7BH jest dostępny do odczytu w urządzeniu peryferyjnym
współpracującym z portem o adresie 07H, to po wykonaniu
instrukcji INI komórka pamięci o adresie 1000H będzie
zawierała 7BH, para rejestrów HL przyjmie zawartość 1001H,
a w rejestrze B znajdzie się 0FH.

INIR

INPUT DATA, INCREMENT HL AND REPEAT = Wczytaj dane, zwiększ HL i powtarzaj

Operacja: (HL) ← (C), BB-1, HLHL+1 i powtarzaj dopóki B ≠ 0
Mnemonik: INIR
Kod operacyjny
b7 b6 b5 b4 b3 b2 b1 b0
1 1 1 0 1 1 0 1 ED
1 0 1 1 0 0 1 0 B2
Opis: Zawartość rejestru C jest umieszczana na dolnej połówce (A0 - A7) magistrali adresowej
w celu wybrania urządzenia we/wy na jednym z 256 możliwych portów. Rejestr B może
być używany jako licznik bajtów, a jego zawartość jest również w tym samym czasie
umieszczana na górnej połówce (A8 - A15) magistrali adresowej. Następnie bajt
z zaadresowanego urządzenia we/wy jest umieszczany na magistrali danych, skąd
pobiera go mikroprocesor. Pobrany bajt jest umieszczany w komórce pamięci
wskazywanej przez zawartość pary rejestrów HL. Licznik w rejestrze B jest zmniejszany
o 1, a zawartość pary rejestrów HL jest zwiększana o 1. Jeśli po zmniejszeniu rejestr B
osiągnie wartość 0, to instrukcja jest przerywana. Jeśli rejestr B nie zawiera zera, to
licznik rozkazów PC (ang. Program Counter) zostaje zmniejszony o 2 i instrukcja jest
powtarzana. Po każdym przesłaniu danych rozpoznawane są przerwania oraz
wykonywane dwa cykle odświeżania.

Uwaga: Jeśli B zostanie ustawiony na 0 przed wykonaniem instrukcji, to nastąpi
pobranie 256 bajtów danych.

Jeśli B ≠ 0   Jeśli B = 0
Cykle Takty Czas   Cykle Takty Czas
5 21 (4,5,3,4,5) 5,25μs   4 16 (4,5,3,4) 4,00μs
Zmieniane znaczniki: S - stan nieokreślony
Z - jest ustawiany na 1
H - stan nieokreślony
P/V - stan nieokreślony
N - jest ustawiany na 1
C - stan nieokreślony
Przykład: Jeśli rejestr C zawiera 07H, B zawiera 03H, HL zawiera 1000H, a w urządzeniu
peryferyjnym współpracującym z portem we/wy o adresie 07H są dostępne do
odczytu następujące bajty:

51H
0A9H
03H

to po wykonaniu instrukcji INIR para rejestrów HL będzie zawierała 1003H,
rejestr B wyzeruje się, a zawartość komórek pamięci o podanych adresach będzie
następująca:

1000H  zawiera 51H
1001H  zawiera 0A9H
1002H  zawiera 03H

IND

INPUT DATA AND DECREMENT HL = Wczytaj dane i zmniejsz HL

Operacja: (HL) ← (C), B B-1, HLHL-1
Mnemonik: IND
Kod operacyjny
b7 b6 b5 b4 b3 b2 b1 b0
1 1 1 0 1 1 0 1 ED
1 0 1 0 1 0 1 0 AA
Opis: Zawartość rejestru C jest umieszczana na dolnej połówce (A0 - A7)
magistrali adresowej w celu wybrania urządzenia we/wy na jednym
z 256 możliwych portów. Rejestr B może być używany jako licznik
bajtów, a jego zawartość jest również w tym samym czasie
umieszczana na górnej połówce (A8 - A15) magistrali adresowej.
Następnie bajt z zaadresowanego urządzenia we/wy jest
umieszczany na magistrali danych, skąd pobiera go mikroprocesor.
Pobrany bajt jest umieszczany w komórce pamięci wskazywanej
przez zawartość pary rejestrów HL. Na koniec licznik w rejestrze B
oraz para rejestrów HL są zmniejszane o 1.
Cykle Takty Czas
4 16 (4,5,3,4) 4,00μs
Zmieniane znaczniki: S - stan nieokreślony
Z - jest ustawiany na 1, jeśli B-1 = 0, inaczej jest zerowany
H - stan nieokreślony
P/V - stan nieokreślony
N - jest ustawiany na 1
C - stan nieokreślony
Przykład: Jeśli rejestr C zawiera 07H, B zawiera 10H, HL zawiera 1000H, a bajt
7BH
jest dostępny do odczytu w urządzeniu peryferyjnym
współpracującym z portem o adresie 07H, to po wykonaniu instrukcji
IND
komórka pamięci o adresie 1000H będzie zawierała 7BH, para
rejestrów HL przyjmie zawartość 0FFFH, a w rejestrze B znajdzie się
0FH
.

INDR

INPUT DATA, DECREMENT HL AND REPEAT = Wczytaj dane, zmniejsz HL i powtarzaj

Operacja: (HL) ← (C), BB-1, HLHL-1 i powtarzaj dopóki B ≠ 0
Mnemonik: INDR
Kod operacyjny
b7 b6 b5 b4 b3 b2 b1 b0
1 1 1 0 1 1 0 1 ED
1 0 1 1 1 0 1 0 BA
Opis: Zawartość rejestru C jest umieszczana na dolnej połówce (A0 - A7) magistrali adresowej
w celu wybrania urządzenia we/wy na jednym z 256 możliwych portów. Rejestr B może być
używany jako licznik bajtów, a jego zawartość jest również w tym samym czasie
umieszczana na górnej połówce (A8 - A15) magistrali adresowej. Następnie bajt
z zaadresowanego urządzenia we/wy jest umieszczany na magistrali danych, skąd pobiera
go mikroprocesor. Pobrany bajt jest umieszczany w komórce pamięci wskazywanej przez
zawartość pary rejestrów HL. Licznik w rejestrze B i para rejestrów HL są zmniejszane o 1.
Jeśli po zmniejszeniu rejestr B osiągnie wartość 0, to instrukcja jest przerywana. Jeśli
rejestr B nie zawiera zera, to licznik rozkazów PC (ang. Program Counter) zostaje
zmniejszony o 2 i instrukcja jest powtarzana. Po każdym przesłaniu danych rozpoznawane
są przerwania oraz wykonywane dwa cykle odświeżania.

Uwaga: Jeśli B zostanie ustawiony na 0 przed wykonaniem instrukcji, to nastąpi pobranie
256 bajtów danych.

Jeśli B ≠ 0   Jeśli B = 0
Cykle Takty Czas   Cykle Takty Czas
5 21 (4,5,3,4,5) 5,25μs   4 16 (4,5,3,4) 4,00μs
Zmieniane znaczniki: S - stan nieokreślony
Z - jest ustawiany na 1
H - stan nieokreślony
P/V - stan nieokreślony
N - jest ustawiany na 1
C - stan nieokreślony
Przykład: Jeśli rejestr C zawiera 07H, B zawiera 03H, HL zawiera 1000H, a w urządzeniu peryferyjnym
współpracującym z portem we/wy o adresie 07H są dostępne do odczytu następujące bajty:

51H
0A9H
03H

to po wykonaniu instrukcji INDR para rejestrów HL będzie zawierała 0FFDH, rejestr B wyzeruje
się, a zawartość komórek pamięci o podanych adresach będzie następująca:

0FFEH  zawiera 51H
0FFFH  zawiera 0A9H
1000H  zawiera 03H

OUTI

OUTPUT DATA AND INCREMENT HL = Wczytaj dane i zwiększ HL

Operacja: (C) ← (HL), BB-1, HLHL+1
Mnemonik: OUTI
Kod operacyjny
b7 b6 b5 b4 b3 b2 b1 b0
1 1 1 0 1 1 0 1 ED
1 0 1 0 0 0 1 1 A3
Opis: Zawartość pary rejestrów HL jest umieszczana na magistrali adresowej,
aby wybrać komórkę pamięci z danymi. Bajt zawarty w tej komórce
zostaje pobrany i tymczasowo przechowany przez mikroprocesor.
Następnie, po zmniejszeniu o 1 zawartości rejestru B, zawartość
rejestru C jest umieszczana na dolnej połówce (A0 - A7) magistrali
adresowej w celu wybrania urządzenia we/wy współpracującego
z jednym z 256 możliwych portów. Rejestr B może być wykorzystywany
jako licznik bajtów, a jego zmniejszona o 1 zawartość jest umieszczana
na górnej połówce (A8 - A15) magistrali adresowej. Pobrany wcześniej
bajt z pamięci jest teraz umieszczany na magistrali danych i zapisywany
do wybranego urządzenia peryferyjnego. Na koniec para rejestrów HL
jest zwiększana o 1.
Cykle Takty Czas
4 16 (4,5,3,4) 4,00μs
Zmieniane znaczniki: S - stan nieokreślony
Z - jest ustawiany na 1, jeśli B-1 = 0, inaczej jest zerowany
H - stan nieokreślony
P/V - stan nieokreślony
N - jest ustawiany na 1
C - stan nieokreślony
Przykład: Jeśli rejestr C zawiera 07H, B zawiera 10H, HL zawiera 1000H, a komórka
pamięci o adresie 1000H przechowuje bajt 59H, to po wykonaniu instrukcji
OUTI
rejestr B będzie zawierał 0FH, para rejestrów HL przyjmie zawartość
1001H
, a bajt 59H zostanie zapisany do urządzenia peryferyjnego w porcie
we/wy o adresie 07H.

OTIR

OUTPUT DATA, INCREMENT HL AND REPEAT = Wczytaj dane, zwiększ HL i powtarzaj

Operacja: (C) ← (HL), BB-1, HLHL+1 i powtarzaj dopóki B ≠ 0
Mnemonik: OTIR
Kod operacyjny
b7 b6 b5 b4 b3 b2 b1 b0
1 1 1 0 1 1 0 1 ED
1 0 1 1 0 0 1 1 B3
Opis: Zawartość pary rejestrów HL jest umieszczana na magistrali adresowej, aby wybrać
komórkę pamięci z danymi. Bajt zawarty w tej komórce zostaje pobrany i tymczasowo
przechowany przez mikroprocesor. Następnie, po zmniejszeniu o 1 zawartości rejestru B,
zawartość rejestru C jest umieszczana na dolnej połówce (A0 - A7) magistrali adresowej
w celu wybrania urządzenia we/wy współpracującego z jednym z 256 możliwych portów.
Rejestr B może być wykorzystywany jako licznik bajtów, a jego zmniejszona o 1 zawartość
jest umieszczana na górnej połówce (A8 - A15) magistrali adresowej. Pobrany wcześniej
bajt z pamięci jest teraz umieszczany na magistrali danych i zapisywany do wybranego
urządzenia peryferyjnego. Na koniec para rejestrów HL jest zwiększana o 1. Jeśli
zmniejszony o 1 rejestr B osiągnie wartość 0, to instrukcja jest przerywana. Jeśli rejestr B
nie zawiera zera, to licznik rozkazów PC (ang. Program Counter) zostaje zmniejszony o 2
i instrukcja jest powtarzana. Po każdym przesłaniu danych rozpoznawane są przerwania
oraz wykonywane dwa cykle odświeżania.

Uwaga: Jeśli B zostanie ustawiony na 0 przed wykonaniem instrukcji, to nastąpi zapis
256 bajtów danych.

Jeśli B ≠ 0   Jeśli B = 0
Cykle Takty Czas   Cykle Takty Czas
5 21 (4,5,3,4,5) 5,25μs   4 16 (4,5,3,4) 4,00μs
Zmieniane znaczniki: S - stan nieokreślony
Z - jest ustawiany na 1
H - stan nieokreślony
P/V - stan nieokreślony
N - jest ustawiany na 1
C - stan nieokreślony
Przykład: Jeśli rejestr C zawiera 07H, rejestr B zawiera 03H, para rejestrów HL zawiera 1000H,
a poniższe komórki pamięci posiadają następującą zawartość:

1000H
  zawiera 51H
1001H  zawiera 0A9H
1002H  zawiera 03H

to po wykonaniu instrukcji OTIR para rejestrów HL zawiera 1003H, rejestr B zawiera zero,
a do urządzenia zewnętrznego, które współpracuje z portem we/wy o adresie 07H,
zostanie zapisany następujący ciąg bajtów:

51H
0A9H
03H

OUTD

OUTPUT DATA AND DECREMENT HL = Wczytaj dane i zmniejsz HL

Operacja: (C) ← (HL), BB-1, HLHL-1
Mnemonik: IND
Kod operacyjny
b7 b6 b5 b4 b3 b2 b1 b0
1 1 1 0 1 1 0 1 ED
1 0 1 0 1 0 1 1 AB
Opis: Zawartość pary rejestrów HL jest umieszczana na magistrali adresowej,
aby wybrać komórkę pamięci z danymi. Bajt zawarty w tej komórce
zostaje pobrany i tymczasowo przechowany przez mikroprocesor.
Następnie, po zmniejszeniu o 1 zawartości rejestru B, zawartość
rejestru C jest umieszczana na dolnej połówce (A0 - A7) magistrali
adresowej w celu wybrania urządzenia we/wy współpracującego
z jednym z 256 możliwych portów. Rejestr B może być wykorzystywany
jako licznik bajtów, a jego zmniejszona o 1 zawartość jest umieszczana
na górnej połówce (A8 - A15) magistrali adresowej. Pobrany wcześniej
bajt z pamięci jest teraz umieszczany na magistrali danych i zapisywany
do wybranego urządzenia peryferyjnego. Na koniec para rejestrów HL
jest zmniejszana o 1.
Cykle Takty Czas
4 16 (4,5,3,4) 4,00μs
Zmieniane znaczniki: S - stan nieokreślony
Z - jest ustawiany na 1, jeśli B-1 = 0, inaczej jest zerowany
H - stan nieokreślony
P/V - stan nieokreślony
N - jest ustawiany na 1
C - stan nieokreślony
Przykład: Jeśli rejestr C zawiera 07H, B zawiera 10H, HL zawiera 1000H, a komórka
pamięci o adresie 1000H przechowuje bajt 59H, to po wykonaniu instrukcji
OUTD
rejestr B będzie zawierał 0FH, para rejestrów HL przyjmie zawartość
0FFFH
, a bajt 59H zostanie zapisany do urządzenia peryferyjnego w porcie
we/wy o adresie 07H.

OTDR

OUTPUT DATA, DECREMENT HL AND REPEAT = Wczytaj dane, zmniejsz HL i powtarzaj

Operacja: (C) ← (HL), BB-1, HLHL-1 i powtarzaj dopóki B ≠ 0
Mnemonik: OTDR
Kod operacyjny
b7 b6 b5 b4 b3 b2 b1 b0
1 1 1 0 1 1 0 1 ED
1 0 1 1 1 0 1 1 BB
Opis: Zawartość pary rejestrów HL jest umieszczana na magistrali adresowej, aby wybrać
komórkę pamięci z danymi. Bajt zawarty w tej komórce zostaje pobrany i tymczasowo
przechowany przez mikroprocesor. Następnie, po zmniejszeniu o 1 zawartości rejestru B,
zawartość rejestru C jest umieszczana na dolnej połówce (A0 - A7) magistrali adresowej
w celu wybrania urządzenia we/wy współpracującego z jednym z 256 możliwych portów.
Rejestr B może być wykorzystywany jako licznik bajtów, a jego zmniejszona o 1
zawartość jest umieszczana na górnej połówce (A8 - A15) magistrali adresowej. Pobrany
wcześniej bajt z pamięci jest teraz umieszczany na magistrali danych i zapisywany do
wybranego urządzenia peryferyjnego. Na koniec para rejestrów HL jest zmniejszana o 1.
Jeśli zmniejszony o 1 rejestr B osiągnie wartość 0, to instrukcja jest przerywana. Jeśli
rejestr B nie zawiera zera, to licznik rozkazów PC (ang. Program Counter) zostaje
zmniejszony o 2 i instrukcja jest powtarzana. Po każdym przesłaniu danych
rozpoznawane są przerwania oraz wykonywane dwa cykle odświeżania.

Uwaga: Jeśli B zostanie ustawiony na 0 przed wykonaniem instrukcji, to nastąpi
pobranie 256 bajtów danych.

Jeśli B ≠ 0   Jeśli B = 0
Cykle Takty Czas   Cykle Takty Czas
5 21 (4,5,3,4,5) 5,25μs   4 16 (4,5,3,4) 4,00μs
Zmieniane znaczniki: S - stan nieokreślony
Z - jest ustawiany na 1
H - stan nieokreślony
P/V - stan nieokreślony
N - jest ustawiany na 1
C - stan nieokreślony
Przykład: Jeśli rejestr C zawiera 07H, rejestr B zawiera 03H, para rejestrów HL zawiera 1000H,
a poniższe komórki pamięci posiadają następującą zawartość:

0FFEH
  zawiera 51H
0FFFH  zawiera 0A9H
1000H  zawiera 03H

to po wykonaniu instrukcji OTDR para rejestrów HL zawiera 0FFDH, rejestr B zawiera
zero, a do urządzenia zewnętrznego, które współpracuje z portem we/wy o adresie 07H,
zostanie zapisany następujący ciąg bajtów:

51H
0A9H
03H

Stan znaczników po operacjach blokowych

Oryginalna dokumentacja firmy Zilog utrzymuje, że w operacjach blokowego odczytu i przesyłu danych stan części znaczników mikroprocesora Z80 jest nieokreślony. Tymczasem badania różnych grup użytkowników dowodzą czegoś innego. Poniżej zebrałem wyniki tych badań.

INI INIR IND INDR OUTI OTIR OUTD OTDR

Znaczniki S i Z zachowują się tak samo jak przy DEC B. Znacznik S jest ustawiany na 1, jeśli wynik operacji zmniejszenia B daje wartość ujemną (czyli B = 128...255), inaczej jest zerowany. Znacznik Z będzie ustawiony na 1, jeśli wynik zmniejszenia B daje wartość 0, w przeciwnym razie będzie on wyzerowany.

Znacznik N jest kopią bitu nr 7 ostatniej danej zapisanej lub odczytanej z portu we/wy. Może zatem przyjmować wartości 0 lub 1.

Znaczniki C i H są ustawiane następująco:

Weź rejestr C, dodaj do niego 1 (rachunki prowadzimy osobno, dane w rejestrach nie są zmieniane), jeśli instrukcja zwiększa HL, inaczej odejmij od rejestru C 1. Teraz dodaj do rejestru C daną odczytaną lub zapisaną do portu we/wy i przeniesienie z tego dodawania wstaw do znaczników C i H (zatem znaczniki C i H posiadają taką samą wartość). Jest to bardzo dziwne, ale wszelkie testy potwierdzają tę regułę!!!

Pedro Gimeno (pgimeno@geocities.com) rozpracował znacznik P/V. Wynik zależy od rejestru B, 3 młodszych bitów rejestru C oraz 3 młodszych bitów danej odczytanej lub zapisanej do portu we/wy. Wszystko, co jest prawdziwe dla INI/INIR i IND/INDR, prawdziwe również jest dla OUTI/OTIR oraz OUTD/OTDR. W opisie stosowana jest notacja C.2 do oznaczania bitu nr 2 rejestru C. "inp" to odczytany (lub wysłany) bajt.

INI/INIR

Najpierw spójrz na bity 1 i 0 zarówno rejestru C jak i wczytanego bajtu i wg nich w poniższej tabeli wybierz tymczasowy wynik temp1

C.1 C.0 inp.1 inp.0 Temp1
0 0 0 0 0
0 0 0 1 0
0 0 1 0 1
0 0 1 1 0
0 1 0 0 0
0 1 0 1 1
0 1 1 0 0
0 1 1 1 1
1 0 0 0 1
1 0 0 1 0
1 0 1 0 1
1 0 1 1 1
1 1 0 0 0
1 1 0 1 1
1 1 1 0 1
1 1 1 1 0

Potrzebny ci również będzie dodatkowy wynik tymczasowy, który zależy od rejestru B (od wszystkich jego bitów), zgodnie z poniższym pseudokodem:

Jeśli B.3 = B.2 = B.1 = B.0 = 0, to niech Temp2 = Parity(B) xor (B.4 or (B.6 and not B.5))
Inaczej niech Temp2 = Parity(B) xor (B.0 or (B.2 and not B.1))
gdzie Parity(B) przyjmuje 1, jeśli B posiada parzystą liczbę bitów o stanie 1, lub 0 w przypadku przeciwnym

Postać funkcji (B.0 or (B.2 and not B.1)) otrzymano z tablic Karnaugha:

B.2 B.1 B.0 000 001 010 011 100 101 110 111
Wartość 0 1 0 1 1 1 0 1

Dla zamknięcia tematu poniżej jest pełna tablica wartości Temp2 zgodnie z B:

  0123456789ABCDEF ← (młodsze 4 bity)
00 0011010011001011
10 0100101100110100
20 1100101100110100
30 1011010011001011
40 0100101100110100
50 1011010011001011
60 0011010011001011
70 0100101100110100
80 1100101100110100
90 1011010011001011
A0 0011010011001011
B0 0100101100110100
C0 1011010011001011
D0 0100101100110100
E0 1100101100110100
F0 1011010011001011
 ↑ (starsze 4 bity)

Na koniec znacznik P/V otrzymuje wartość:

P/V = Temp1 xor Temp2 xor C.2 xor inp.2

IND/INDR

Operacje mające na celu otrzymanie wartości znacznika P/V są takie same jak dla INI/INIR, lecz tablica dla Temp1 jest inna:

C.1 C.0 inp.1 inp.0 Temp1
0 0 0 0 0
0 0 0 1 1
0 0 1 0 0
0 0 1 1 0
0 1 0 0 1
0 1 0 1 0
0 1 1 0 0
0 1 1 1 1
1 0 0 0 0
1 0 0 1 0
1 0 1 0 1
1 0 1 1 0
1 1 0 0 0
1 1 0 1 1
1 1 1 0 0
1 1 1 1 1

do podrozdziału  do strony 

Zespół Przedmiotowy
Chemii-Fizyki-Informatyki

w I Liceum Ogólnokształcącym
im. Kazimierza Brodzińskiego
w Tarnowie
ul. Piłsudskiego 4
©2026 mgr Jerzy Wałaszek

Materiały tylko do użytku dydaktycznego. Ich kopiowanie i powielanie jest dozwolone pod warunkiem podania źródła oraz niepobierania za to pieniędzy.
Pytania proszę przesyłać na adres email: i-lo@eduinf.waw.pl
Serwis wykorzystuje pliki cookies. Jeśli nie chcesz ich otrzymywać, zablokuj je w swojej przeglądarce.

Informacje dodatkowe.