Zestaw instrukcji mikroprocesora Z80


Grupa instrukcji skoków

 

JP nn

      

JUMP = Skocz

Operacja:   PC ← nn
Mnemonik:   JP
Argumenty   nn

 

1 1 0 0 0 0 1 1 C3
← n → LSB
← n → MSB

Uwaga: pierwszy argument za kodem instrukcji jest młodszym bajtem adresu nn, drugi jest starszym bajtem nn.

Opis:   Argument nn jest ładowany do rejestru licznika rozkazów PC (Program Counter). Następna instrukcja do wykonania zostanie pobrana spod adresu nn.
   
Cykle Takty Czas
3 10 (4,3,3) 2,50μs
Zmieniane znaczniki:   Żaden

 


 

JP (HL)

      

JUMP = Skocz

Operacja:   PC ← HL
Mnemonik:   JP
Argumenty   (HL)

 

1 1 1 0 1 0 0 1 E9
Opis:   Licznik rozkazów (rejestr PC) jest ładowany zawartością pary rejestrów HL. Następna instrukcja zostanie pobrana spod adresu wskazywanego przez nową zawartość PC.
   
Cykle Takty Czas
1 4 1,00μs
Zmieniane znaczniki:   Żaden
Przykład:   Jeśli zawartość licznika rozkazów PC jest równa 1000H, a zawartość pary rejestrów HL wynosi 4800H, to po wykonaniu instrukcji JP (HL) zawartość licznika rozkazów zmieni się na 4800H.

 


 

JP (IX)

      

JUMP = Skocz

Operacja:   PC ← IX
Mnemonik:   JP
Argumenty   (IX)

 

1 1 0 1 1 1 0 1 DD
1 1 1 0 1 0 0 1 E9
Opis:   Licznik rozkazów (rejestr PC) jest ładowany zawartością rejestru indeksowego IX. Następna instrukcja zostanie pobrana spod adresu wskazywanego przez nową zawartość PC.
   
Cykle Takty Czas
2 8 (4,4) 2,00μs
Zmieniane znaczniki:   Żaden
Przykład:   Jeśli zawartość licznika rozkazów PC jest równa 1000H, a zawartość rejestru indeksowego IX wynosi 4800H, to po wykonaniu instrukcji JP (IX) zawartość licznika rozkazów zmieni się na 4800H.

 


 

JP (IY)

      

JUMP = Skocz

Operacja:   PC ← IY
Mnemonik:   JP
Argumenty   (IY)

 

1 1 1 1 1 1 0 1 FD
1 1 1 0 1 0 0 1 E9
Opis:   Licznik rozkazów (rejestr PC) jest ładowany zawartością rejestru indeksowego IY. Następna instrukcja zostanie pobrana spod adresu wskazywanego przez nową zawartość PC.
   
Cykle Takty Czas
2 8 (4,4) 2,00μs
Zmieniane znaczniki:   Żaden
Przykład:   Jeśli zawartość licznika rozkazów PC jest równa 1000H, a zawartość rejestru indeksowego IY wynosi 4800H, to po wykonaniu instrukcji JP (IY) zawartość licznika rozkazów zmieni się na 4800H.

 


 

JP cc,nn

      

JUMP = Skocz warunkowo

Operacja:   Jeśli cc jest spełnione, to PC ← nn
Mnemonik:   JP
Argumenty   cc,nn

 

1 1 cc 0 1 0  
← n → LSB
← n → MSB

Uwaga: pierwszy argument za kodem instrukcji jest młodszym bajtem adresu nn, drugi jest starszym bajtem nn.

Opis:   Jeśli warunek cc jest prawdziwy, to instrukcja ładuje argument nn do rejestru licznika rozkazów PC (ang. Program Counter) i program wykonuje się dalej począwszy od instrukcji pod adresem nn. Jeśli warunek cc jest fałszywy, to licznik programu PC jest zwiększany w normalny sposób i program kontynuuje się od kolejnej instrukcji w programie. Warunek cc jest programowany jako jeden z ośmiu stanów, które odpowiadają bitom w rejestrze znaczników F. W kodzie instrukcji stany te są przedstawiane następująco:
cc   Warunek Znacznik
000
001
010
011
100
101
110
111
  NZ - nie zero
Z - zero
NC - brak przeniesienia
C - jest przeniesienie
PO - brak parzystości
PE - parzystość
P - znak dodatni
M 0 znak ujemny
Z
Z
C
C
P/V
P/V
S
S
   
Cykle Takty Czas
3 10 (4,3,3) 2,50μs
Zmieniane znaczniki:   Żaden
Przykład   Jeśli znacznik przeniesienia C w rejestrze F jest ustawiony na 1, to wykonanie instrukcji JP C,1520H spowoduje, że kolejną instrukcją wykonywaną w programie będzie instrukcja spod adresu 1520H.

 


 

JR e

      

JUMP RELATIVE = Skocz względnie

Operacja:   PC ← PC + e
Mnemonik:   JR
Argumenty   e

 

0 0 0 1 1 0 0 0 18
← e-2 →  
Opis:   Instrukcja udostępnia bezwarunkowe odgałęzienia do innych segmentów programu. Wartość przesunięcia e jest dodawana do Licznika Rozkazów (PC = Program Counter) i następna instrukcja będzie wykonana od tego wynikowego adresu. Skok jest mierzony od adresu kodu operacyjnego instrukcji i posiada zakres od -126 do +129 bajtów. Asembler automatycznie dopasowuje e dla dwukrotnie zwiększonego PC.
   
Cykle Takty Czas
3 12 (4,3,5) 3,00μs
Zmieniane znaczniki:   Żaden
Przykład   Aby skoczyć naprzód o pięć komórek spod adresu 480H, używane jest polecenie asemblera JR $+5. Wynikowy kod i końcowa wartość PC są pokazane poniżej:
Adres   Instrukcja
480
481
482
483
484
485
486
...
  18H      ; JR
03H      ; $+5
-
-
-
← PC po skoku
-
-

 


 

JR C,e

      

JUMP RELATIVE = Skocz względnie

Operacja:   Jeśli C=0, to kontynuuj
Jeśli C=1, to PC ← PC + e
Mnemonik:   JR
Argumenty   NC,e

 

0 0 1 1 1 0 0 0 38
← e-2 →  
Opis:   Instrukcja udostępnia warunkowe odgałęzienia do innych segmentów programu w zależności od wyniku testu na znaczniku przeniesienia C. Jeśli znacznik ten ma stan 1, to wartość przesunięcia e jest dodawana do Licznika Rozkazów (PC = Program Counter) i następna instrukcja będzie wykonana od tego wynikowego adresu. Skok jest mierzony od adresu kodu operacyjnego instrukcji i posiada zakres od -126 do +129 bajtów. Asembler automatycznie dopasowuje e dla dwukrotnie zwiększonego PC.

Jeśli znacznik jest równy 0, to następna instrukcja do wykonania zostanie pobrana z kolejnego adresu za tą instrukcją.

   
Warunek spełniony   Warunek niespełniony
Cykle Takty Czas   Cykle Takty Czas
3 12 (4,3,5) 3,00μs   2 7 (4,3) 1,75μs
Zmieniane znaczniki:   Żaden
Przykład   Ustawiony jest znacznik przeniesienia C i trzeba skoczyć wstecz o cztery komórki od adresu 480H. Instrukcja asemblera ma postać JR C,$-4. Wynikowy kod oraz końcowa wartość rejestru PC są pokazane poniżej:
Adres   Instrukcja
47C
47D
47E
47F
480
481
...
  ← PC po skoku
-
-
-
38H     ; JR C
FAH     ; liczba -6 w kodzie U2
-

 


 

JR NC,e

      

JUMP RELATIVE = Skocz względnie

Operacja:   Jeśli C=1, to kontynuuj
Jeśli C=0, to PC ← PC + e
Mnemonik:   JR
Argumenty   NC,e

 

0 0 1 1 1 0 0 0 38
← e-2 →  
Opis:   Instrukcja udostępnia warunkowe odgałęzienia do innych segmentów programu w zależności od wyniku testu na znaczniku przeniesienia C. Jeśli znacznik ten ma stan 0, to wartość przesunięcia e jest dodawana do Licznika Rozkazów (PC = Program Counter) i następna instrukcja będzie wykonana od tego wynikowego adresu. Skok jest mierzony od adresu kodu operacyjnego instrukcji i posiada zakres od -126 do +129 bajtów. Asembler automatycznie dopasowuje e dla dwukrotnie zwiększonego PC.

Jeśli znacznik jest równy 1, to następna instrukcja do wykonania zostanie pobrana z kolejnego adresu za tą instrukcją.

   
Warunek spełniony   Warunek niespełniony
Cykle Takty Czas   Cykle Takty Czas
3 12 (4,3,5) 3,00μs   2 7 (4,3) 1,75μs
Zmieniane znaczniki:   Żaden
Przykład   Znacznik przeniesienia C jest wyzerowany i trzeba powtórzyć instrukcję skoku. Instrukcja asemblera ma postać JR NC,$. Wynikowy kod oraz końcowa wartość rejestru PC są pokazane poniżej:
Adres   Instrukcja
480
481
...
  30     ;← PC po skoku
00
-

 


 

JR Z,e

      

JUMP RELATIVE = Skocz względnie

Operacja:   Jeśli Z=0, to kontynuuj
Jeśli Z=1, to PC ← PC + e
Mnemonik:   JR
Argumenty   Z,e

 

0 0 1 0 1 0 0 0 28
← e-2 →  
Opis:   Instrukcja udostępnia warunkowe odgałęzienia do innych segmentów programu w zależności od wyniku testu na znaczniku zera Z. Jeśli znacznik ten ma stan 1, to wartość przesunięcia e jest dodawana do Licznika Rozkazów (PC = Program Counter) i następna instrukcja będzie wykonana od tego wynikowego adresu. Skok jest mierzony od adresu kodu operacyjnego instrukcji i posiada zakres od -126 do +129 bajtów. Asembler automatycznie dopasowuje e dla dwukrotnie zwiększonego PC.

Jeśli znacznik jest równy 0, to następna instrukcja do wykonania zostanie pobrana z kolejnego adresu za tą instrukcją.

   
Warunek spełniony   Warunek niespełniony
Cykle Takty Czas   Cykle Takty Czas
3 12 (4,3,5) 3,00μs   2 7 (4,3) 1,75μs
Zmieniane znaczniki:   Żaden
Przykład   Znacznik zera Z jest ustawiony na 1 i trzeba skoczyć naprzód o pięć komórek od adresu 480H. Instrukcja asemblera ma postać JR Z,$+5. Wynikowy kod oraz końcowa wartość rejestru PC są pokazane poniżej:
Adres   Instrukcja
300
301
302
303
304
305
306
...
  28H      ; JR Z
03H      ; $+5
-
-
-
← PC po skoku
-
-

 


 

JR NZ,e

      

JUMP RELATIVE = Skocz względnie

Operacja:   Jeśli Z=1, to kontynuuj
Jeśli Z=0, to PC ← PC + e
Mnemonik:   JR
Argumenty   NZ,e

 

0 0 1 0 0 0 0 0 20
← e-2 →  
Opis:   Instrukcja udostępnia warunkowe odgałęzienia do innych segmentów programu w zależności od wyniku testu na znaczniku zera Z. Jeśli znacznik ten ma stan 0, to wartość przesunięcia e jest dodawana do Licznika Rozkazów (PC = Program Counter) i następna instrukcja będzie wykonana od tego wynikowego adresu. Skok jest mierzony od adresu kodu operacyjnego instrukcji i posiada zakres od -126 do +129 bajtów. Asembler automatycznie dopasowuje e dla dwukrotnie zwiększonego PC.

Jeśli znacznik jest równy 1, to następna instrukcja do wykonania zostanie pobrana z kolejnego adresu za tą instrukcją.

   
Warunek spełniony   Warunek niespełniony
Cykle Takty Czas   Cykle Takty Czas
3 12 (4,3,5) 3,00μs   2 7 (4,3) 1,75μs
Zmieniane znaczniki:   Żaden
Przykład   Znacznik zera Z jest wyzerowany i trzeba skoczyć wstecz o cztery komórki od adresu 300H. Instrukcja asemblera ma postać JR NZ,$-4. Wynikowy kod oraz końcowa wartość rejestru PC są pokazane poniżej:
Adres   Instrukcja
2FC
2FD
2FE
2FF
300
301
...
  ← PC po skoku
-
-
-
20H     ; JR NZ
FAH     ; liczba -6 w kodzie U2
-

 


 

DJNZ e

      

DECREMENT AND JUMP ON NON ZERO = Zmniejsz i skocz przy wyniku różnym od zera

Operacja:   B ← B - 1
Jeśli B = 0, to kontynuuj
Jeśli B 0, to PC ← PC + e
Mnemonik:   DJNZ
Argumenty   e

 

0 0 0 1 0 0 0 0 10
← e-2 →  
Opis:   Instrukcja ta jest podobna do instrukcji skoków warunkowych z tą różnicą, iż warunek rozgałęzienia jest oparty na zawartości rejestru B. Rejestr B jest najpierw zmniejszany o 1, a jeśli jego wartość jest wciąż różna od zera, to przesunięcie e zostaje dodane do zawartości rejestru licznika rozkazów PC. Następną wykonywaną instrukcją będzie instrukcja znajdująca się pod adresem wskazywanym przez nową zawartość PC. Skok jest mierzony od adresu kodu operacyjnego instrukcji i posiada zakres od -128 do +129 bajtów. Asembler automatycznie modyfikuje tę wartość dla zwiększonego o 2 PC.

Jeśli wynikiem zmniejszenia rejestru B jest zero, to zostanie wykonana kolejna instrukcja za instrukcją DJNZ w programie.

   
B 0   B = 0
Cykle Takty Czas   Cykle Takty Czas
3 13 (5,3,5) 3,25μs   2 8 (5,3) 2,00μs
Zmieniane znaczniki:   Żaden
Przykład   Do demonstracji zastosowania instrukcji DJNZ używana jest typowa procedura, która przemieszcza wiersz z bufora wejściowego (INBUF) do bufora wyjściowego (OUTBUF). Bajty są przesuwane aż do napotkania CR (ang. carriage return - znak końca wiersza o kodzie DH) lub do przesłania 80H bajtów.

      LD   B,80H       ; ustaw licznik
      LD   HL,INBUF    ; ustaw wskaźniki
      LD   DE,OUTBUF

LOOP: LD   A,(HL)      ; pobierz następny bajt z bufora wejściowego
      LD   (DE),A      ; umieść go w buforze wyjściowym
      CP   0DH         ; czy jest to CR?
      JR   Z,DONE      ; jeśli tak, to zakończ
      INC  HL          ; przesuń wskaźniki na następne bajty
      INC  DE
      DJNZ LOOP        ; kontynuuj w pętli aż do przesłania 80H bajtów lub napotkania CR

DONE:

 



List do administratora Serwisu Edukacyjnego Nauczycieli I LO

Twój email: (jeśli chcesz otrzymać odpowiedź)
Temat:
Uwaga: ← tutaj wpisz wyraz  ilo , inaczej list zostanie zignorowany

Poniżej wpisz swoje uwagi lub pytania dotyczące tego rozdziału (max. 2048 znaków).

Liczba znaków do wykorzystania: 2048

 

W związku z dużą liczbą listów do naszego serwisu edukacyjnego nie będziemy udzielać odpowiedzi na prośby rozwiązywania zadań, pisania programów zaliczeniowych, przesyłania materiałów czy też tłumaczenia zagadnień szeroko opisywanych w podręcznikach.



   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.