Zestaw instrukcji mikroprocesora Z80


Grupa instrukcji wejścia / wyjścia

 

IN A,(n)

      

INPUT DATA = Wczytaj dane

Operacja:   A ← (n)
Mnemonik:   IN
Argumenty   A,(n)

 

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)

 

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

 

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

 

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), B ← B-1, HL ← HL+1
Mnemonik:   INI
Kod operacyjny  
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), B ← B-1, HL ← HL+1 i powtarzaj dopóki B ≠ 0
Mnemonik:   INIR
Kod operacyjny  
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, HL ← HL-1
Mnemonik:   IND
Kod operacyjny  
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), B ← B-1, HL ← HL-1 i powtarzaj dopóki B ≠ 0
Mnemonik:   INDR
Kod operacyjny  
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), B ← B-1, HL ← HL+1
Mnemonik:   OUTI
Kod operacyjny  
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), B ← B-1, HL ← HL+1 i powtarzaj dopóki B ≠ 0
Mnemonik:   OTIR
Kod operacyjny  
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), B ← B-1, HL ← HL-1
Mnemonik:   IND
Kod operacyjny  
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), B ← B-1, HL ← HL-1 i powtarzaj dopóki B ≠ 0
Mnemonik:   OTDR
Kod operacyjny  
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

 

 


   I Liceum Ogólnokształcące   
im. Kazimierza Brodzińskiego
w Tarnowie

©2018 mgr Jerzy Wałaszek

Dokument ten rozpowszechniany jest zgodnie z zasadami licencji
GNU Free Documentation License.

Pytania proszę przesyłać na adres email: i-lo@eduinf.waw.pl

W artykułach serwisu są używane cookies. Jeśli nie chcesz ich otrzymywać,
zablokuj je w swojej przeglądarce.
Informacje dodatkowe