Serwis Edukacyjny
w I-LO w Tarnowie
obrazek

Materiały dla uczniów liceum

  Wyjście       Spis treści       Wstecz       Dalej  

Tłumaczenie: mgr Jerzy Wałaszek

©2021 mgr Jerzy Wałaszek
I LO w Tarnowie

Instrukcje mikroprocesora – 1

SPIS TREŚCI

Instrukcje mikroprocesora – 1

Kody operacyjne instrukcji

Ten rozdział opisuje każdą z instrukcji mikroprocesora Z80, udostępniając dla nich tablicowe listingi kodów operacyjnych. W każdej z tych tablic kody operacyjne umieszczone w cieniowanych komórkach są identyczne z kodami dla mikroprocesora 8080A. Również dla każdej instrukcji podano mnemonik asemblerowy. Wszystkie kody operacyjne są podane w zapisie szesnastkowym. Kody jednobajtowe wymagają dwóch cyfr szesnastkowych, natomiast kody dwubajtowe wymagają czterech cyfr. Dla wygody tablica 4 przedstawia konwersję pomiędzy systemem szesnastkowym i dwójkowym.

Tablica 4. Konwersja szesnastkowo - dwójkowo - dziesiętna

Hex Bin Dec
0 0000 0
1 0001 1
2 0010 2
3 0011 3
4 0100 4
5 0101 5
6 0110 6
7 0111 7
8 1000 8
9 1001 9
A 1010 10
B 1011 11
C 1100 12
D 1101 13
E 1110 14
F 1111 15

Mnemoniki instrukcji mikroprocesora Z80 składają się z kodu operacyjnego oraz od zera do dwóch argumentów. Tam, gdzie argument jest implikowany, za kodem instrukcji nie jest umieszczany żaden argument. Instrukcje, zawierające tylko jeden argument logiczny, gdzie jeden z argumentów jest niezmienny (np. w instrukcji logicznego OR), są reprezentowane przez jeden mnemonik argumentu. Instrukcje, zawierające dwa zmienne argumenty, są reprezentowane przez dwa mnemoniki argumentów.

Przesłanie i wymiana

Tablica 5 definiuje kody operacyjne dla wszystkich 8 bitowych instrukcji przesłań, zaimplementowanych w mikroprocesorze Z80. W tablicy tej również opisany jest rodzaj adresowania dla każdej instrukcji. Źródło danych znajduje się w górnym wierszu, a miejsce docelowe jest określone w lewej kolumnie. Na przykład, przesłanie rejestru B do rejestru C używa kodu operacyjnego 48H. Na wszystkich pozycjach kody operacyjne są podane w systemie szesnastkowym , a kod 48H (dwójkowo 01001000) jest pobierany przez mikroprocesor z pamięci zewnętrznej podczas okresu M1, dekodowany, a następnie mikroprocesor wykonuje automatycznie przesył danych pomiędzy wybranymi rejestrami.

Mnemonikiem asemblerowym dla całej tej grupy jest LD, za którym umieszcza się miejsce docelowe danych i źródło (LD dokąd, skąd). Możliwe jest kilka kombinacji trybów adresowania. Na przykład, źródło może stosować adresowanie rejestrowe, a miejsce docelowe może stosować adresowanie rejestrowe pośrednie, jak przy ładowaniu komórki pamięci wskazywanej parą HL przez zawartość rejestru D. Kodem operacyjnym takiej operacji jest 72H. Mnemonikiem natomiast dla tej instrukcji będzie LD (HL),D.

Nawiasy wokół HL oznaczają, że zawartość HL jest używana jako wskaźnik komórki pamięci. We wszystkich instrukcjach przesłania w asemblerze Z80 miejsce przeznaczenia jest zawsze wymieniane najpierw, za nim następuje źródło danych. Język asemblera Z80 został zdefiniowany w celu ułatwienia programowania. Każda instrukcja dokumentuje się sama, a programy napisane w języku asemblera Z80 są łatwe do analizy i poprawiania.

W tablicy 5 niektóre kody operacyjne, dostępne dla mikroprocesora Z80, używają dwóch bajtów. Ta cecha jest efektywnym sposobem wykorzystania pamięci, ponieważ w Z80 zaimplementowano instrukcje 8-, 16-, 24- i 32-bitowe. Często wykorzystywane instrukcje, takie jak arytmetyczne lub logiczne, są jedynie ośmiobitowe, co daje w wyniku lepsze wykorzystanie pamięci niż przy instrukcjach o stałym rozmiarze, np. 16 bitów.

Tablica 5. Grupa instrukcji przesłań 8 bitowych - LD

    Źródło
    Impl. Rejestrowe Rejestrowe pośrednie Indeksowane Rozszerzone Natychmiastowe
Przeznaczenie I R A B C D E H L (HL) (BC) (DE) (IX+d) (IY+d) (nn) n
Rejestrowe A ED
57
ED
5F
7F 78 79 7A 7B 7C 7D 7E 0A 1A FD
7E
d
DD
7E
d
FD
3A
nn
FD
2E
n
B     47 40 41 42 43 44 45 46     DD
46
d
FD
46
d
  DD
D5
n
C     4F 48 49 4A 4B 4C 4D 4E     DD
4E
d
FD
4E
d
  DD
DE
n
D     57 50 51 52 53 54 55 56     DD
56
d
FD
56
d
  DD
1B
n
E     5F 58 59 5A 5B 5C 5D 5E     DD
5E
d
FD
5E
d
  DD
1E
n
H     67 60 61 62 63 64 65 66     DD
66
d
FD
6E
d
  DD
2B
n
L     67 68 69 6A 6B 6C 6D 6E     DD
6E
d
FD
6E
d
  DD
36
n
Rejestrowe
pośrednie
(HL)     77 70 71 72 73 74 75             DD
78
n
(BC)     02                          
(DE)     12                          
Indeksowane (IX+d)     DD
77
d
DD
70
d
DD
71
d
DD
72
d
DD
73
d
DD
74
d
DD
75
d
            DD
36
d
n
(IY+d)     FD
77
d
FD
70
d
FD
71
d
FD
72
d
FD
73
d
FD
74
d
FD
75
d
            FD
36
d
n
Rozszerzone (nn)     32
nn
                         
Implikowane I     ED
47
                         
R     ED
4F
                         

Wszystkie instrukcje przesłań, wykorzystujące adresowanie indeksowe dla źródła lub dla miejsce docelowego, właściwie używają trzech bajtów pamięci, gdzie trzeci bajt jest przesunięciem d. Na przykład ładowanie rejestru E argumentem wskazywanym przez IX z przesunięciem +8 zapisuje się jako:

LD E, (IX + 8)

W pamięci instrukcja ta tworzy ciąg trzech bajtów:

Adres A DD }- kod operacyjny
A + 1 5E
A + 2 08 }- przesunięcie d

Dwie instrukcje z adresowaniem rozszerzonym są również 3 bajtowe. Na przykład instrukcja ładująca akumulator argumentem z komórki pamięci o adresie 6F32H jest zapisywana jako:

LD a, (6F32H)

a ciąg bajtów dla tej instrukcji jest następujący:

Adres A 3A }- kod operacyjny
A + 1 32 }- młodszy bajt adresu
A + 2 6F }- starszy bajt adresu

Zwróć uwagę, że młodszy bajt adresu zawsze jest pierwszym argumentem.

Instrukcje ładowania natychmiastowego dla 8 bitowych rejestrów ogólnego przeznaczenia są instrukcjami 2 bajtowymi. Instrukcję załadowania rejestru H liczbą 36H zapisujemy jako:

LD H, 36H

a jej ciąg bajtów jest następujący:

Adres A 26 }- kod operacyjny
A + 1 36 }- argument

Załadowanie komórki pamięci daną przy zastosowaniu adresowania indeksowanego dla komórki docelowej i adresowania natychmiastowego dla źródła danych, wymaga czterech bajtów. Na przykład:

LD (IX - 15), 21H

w pamięci wygląda jako:

Adres A DD }- kod operacyjny
A + 1 36
A + 2 F1 }- przesunięcie (-15 jako liczba U2)
A + 3 21 }- argument do umieszczenia w komórce pamięci

Zauważ, że w każdym trybie adresowania indeksowanego przesunięcie jest zawsze umieszczone bezpośrednio za kodem operacyjnym instrukcji.

Tablica 6 określa 16 bitowe operacje przesłań. Cecha rozszerzonego adresowania pokrywa wszystkie pary rejestrów. Operacje z adresowaniem pośrednim rejestrowym dotyczącym wskaźnika stosu to instrukcje zapisujące daną na stos i pobierające daną ze stosu. Posiadają one odpowiednio mnemoniki PUSH (zapis na stos) i POP (pobranie ze stosu). Różnią się od innych przesłań 16 bitowych tym, iż wskaźnik stosu SP jest automatycznie zmniejszany lub zwiększany przy zapisie lub odczycie każdego bajtu. Na przykład instrukcja PUSH  AF jest instrukcją jednobajtową o kodzie operacyjnym równym F5H. Podczas jej wykonywania generowany jest ten ciąg operacji:

Zmniejsz SP
LD (SP), A
Zmniejsz SP
LD (SP), F

Stos zewnętrzny ma teraz postać:

             
(SP) F ← Szczyt stosu
(SP+1) A  
* *  
* *  
     

Instrukcja POP wykonuje działanie dokładnie odwrotne do PUSH.  Wszystkie instrukcje PUSH i POP wykorzystują argument 16 bitowy, a starszy bajt jest zawsze umieszczany na stosie jako pierwszy i pobierany z niego jako ostatni:

PUSH BC   najpierw na stos B, później C
PUSH DE  
najpierw na stos D, później E
PUSH HL  
najpierw na stos H, później L
POP HL   
najpierw ze stosu L, później H

Instrukcja wykorzystująca rozszerzone adresowanie natychmiastowe dla źródła wymaga dwóch bajtów danych umieszczonych za kodem operacyjnym. Na przykład:

LD DE, 0659H

w pamięci wygląda następująco:

Adres A 11 }- kod operacyjny
A + 1 59 }- młodszy bajt danej natychmiastowej
A + 2 06 }- starszy bajt danej natychmiastowej

We wszystkich trybach rozszerzonych adresowych i natychmiastowych młodszy bajt zawsze poprzedza starszy za kodem operacyjnym instrukcji.

Tablica 6. Grupa instrukcji przesłań 16 bitowych - LD, PUSH i POP

      Źródło
      Rejestr Roz. natychm. Roz. adr. Rej. pośr.
Przeznaczenie     AF BC DE HL SP IX IY nn (nn) (SP)
  Rejestrowe AF                   B1
BC               01
n
n
ED
4B
n
n
C1
DE               11
n
n
ED
5B
n
n
D1
HL               21
n
n
2A
n
n
E1
SP       F9   DD
F9
FD
F9
31
n
n
ED
7B
n
n
 
IX               DD
21
n
n
DD
2A
n
n
DD
E1
IY               FD
21
n
n
FD
2A
n
n
FD
E1
  Rozszerzone
adresowe
(nn)   ED
43
n
n
ED
53
n
n
22
n
n
ED
73
n
n
DD
22
n
n
FD
22
n
N
     
Instrukcje
PUSH
Rejestrowe
pośrednie
(SP) F6 C6 D6 E6   DD
E6
FD
E6
     
                        Instrukcje
POP

Tablica 7 wymienia 16 bitowe instrukcje wymiany, które zaimplementowano w mikroprocesorze Z80.  Kod operacyjny 08H pozwala programiście przełączać się pomiędzy dwoma parami rejestrów akumulatora i znaczników, natomiast kod D9H przełącza pomiędzy zestawem [podstawowym a zapasowym sześciu rejestrów ogólnego przeznaczenia. Te kody operacyjne maja rozmiar jednego bajtu w celu zminimalizowania czasu niezbędnego do wymiany, zatem zapasowe zestawy rejestrów mogą być używane w szybko reagujących procedurach przerwań.

Tablica 7. Instrukcje wymian - EX i EXX

    Adresowanie implikowane
    A'F BC', DE' i HL' HL IX IY
Implikowane AF 08        
BC
DE
HL
  D9      
DE     EB    
Rejestrowe
pośrednie
(SP)     E3 DD
E3
FD
E3
Na początek:  podrozdziału   strony 

Zespół Przedmiotowy
Chemii-Fizyki-Informatyki

w I Liceum Ogólnokształcącym
im. Kazimierza Brodzińskiego
w Tarnowie
ul. Piłsudskiego 4
©2021 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.