Transcript Wykład 6

Architektura systemów komputerowych
jesień 2014
Wykład 6
Mikroprocesor Z80
dr inż. Wojciech Bieniecki
Instytut Nauk Ekonomicznych
i Informatyki
http://wbieniec.kis.p.lodz.pl/pwsz
Materiały źródłowe
http://z80-heaven.wikidot.com/control-structures
http://we.pb.edu.pl/~kaie/kaie-md/Lab/TM2EDsem4instr.pdf
http://z80-heaven.wikidot.com/control-structures
http://edu.i-lo.tarnow.pl/inf/retro/004_z80_inst/0007.php
Marcin Peczarski Instytut Informatyki, Uniwersytet Warszawski,
Materiały do wykładu: Mikroprocesor
2
Geneza mikroprocesora
Zbyt czasochłonne projektowanie od podstaw z bramek
logicznych
nowego modelu np. kalkulatora lub sterownika windy
Podczas projektowania łatwo popełnić trudny do usunięcia
błąd
Układ uniwersalny – mikroprocesor
Nowa funkcjonalność przez wymianę programu
3
Geneza mikroprogramowania
Zbyt czasochłonne projektowanie od podstaw z bramek
logicznych nowej jednostki sterującej (mikro)procesora
Podczas projektowania łatwo popełnić trudny do usunięcia
błąd
Uniwersalna jednostka sterująca
Nowa funkcjonalność przez wymianę mikroprogramu
4
Mikroprogramowanie
5
Kod maszynowy a Asembler
Kod maszynowy – binarny sposób opisu rozkazów procesora
Każda architektura ma swój unikalny kod maszynowy
W obrębie tej samej architektury kod maszynowy może być
nieco różny dla poszczególnych modeli procesorów
Asembler – język programowania niskiego poziomu
Jedno polecenie odpowiada zwykle jednemu rozkazowi
maszynowemu
Każda architektura ma swój unikalny Asembler
6
Architektura mikroprocesora
7
Dlaczego Z80?
Jeden z najpopularniejszych
mikroprocesorów 8-bitowych
Nadal produkowany i używany
Bezpośredni wpływ na
najpopularniejszą obecnie
architekturę x86
Kompromisy projektowe,
kompatybilność z 8080
Wystarczająco prosty
8
Wykorzystanie procesora
Komputery domowe
-ZX 80/81
-ZX Spectrum
-Amstrad CPC
-Spectravideo
-Commodore 128
regulatory przemysłowe
sprzęt pomiarowy
9
Cechy procesora
8-bitowa magistrala danych
16-bitowa magistrala adresowa
możliwość bezpośredniego adresowania 64 kB pamięci
możliwość wykonywania operacji na bitach, słowach 8- i 16bitowych
158 rozkazów (w tym 78 rozkazów wykonywanych przez 8080)
dwie linie przerwań (maskowalna i niemaskowalna)
układ automatycznego odświeżania pamięci dynamicznych
RAM
pojedyncze zasilanie +5V
sygnały logiczne TTL
10
Opis wyprowadzeń procesora
11
Opis wyprowadzeń procesora
A15-A0 Magistrala Adresowa (wyjście, aktywna w stanie wysokim,
trójstanowa). Linie A15-A0 tworzą 16-bitową magistralę adresową.
Udostępnia ona adresy do wymiany informacji z pamięcią poprzez
magistralę danych(do 64K bajtów) oraz do komunikacji z urządzeniami
I/O (ang. Input / Output - wejście / wyjście).
BUSACK Bus Acknowledge - Potwierdzenie Zwolnienia Magistral (wyjście,
aktywne w stanie Niskim). BUSACK informuje żądające tego urządzenie
zewnętrzne, iż magistrale adresowa, danych oraz sygnały sterujące MREQ,
IORQ, RD i WR mikroprocesora przeszły w stan wysokiej impedancji (stały
się nieaktywne elektrycznie). Urządzenie zewnętrzne może teraz przejąć
pełną kontrolę nad magistralami w systemie.
BUSREQ Bus Request - Żądanie Zwolnienia Magistral (wejście, aktywne w stanie Niskim).
BUSREQ posiada wyższy priorytet niż NMI i jest zawsze rozpoznawane na końcu bieżącego cyklu
maszynowego. BUSREQ wymusza stan wysokiej impedancji na magistrali adresowej, magistrali danych
oraz dla sygnałów sterujących MREQ, IORQ, RD i WR, w celu przejęcia tych linii przez inne urządzenie
w systemie. Wejście BUSREQ zwykle łączy się równolegle z liniami urządzeń i dlatego wymaga
zewnętrznego podciągnięcia napięcia przy takich zastosowaniach (np. przez rezystor 4,7k do 5V).
Przedłużone okresy BUSREQ spowodowane operacjami DMA (ang. Direct Memory Access bezpośredni dostęp do pamięci) mogą spowodować problemy z odświeżaniem dynamicznych pamięci
12
RAM przez mikroprocesor.
Opis wyprowadzeń procesora
D7-D0 Magistrala Danych (wejście/wyjście, aktywna w stanie Wysokim,
trójstanowa). Linie D7-D0 tworzą 8-bitową, dwukierunkową magistralę
danych, używaną przy wymianie informacji z pamięcią i urządzeniami I/O.
HALT Stan Zatrzymania (wyjście, aktywne w stanie Niskim). Sygnał HALT
wskazuje, iż mikroprocesor wykonał instrukcję HALT i czeka albo na
przerwanie niemaskowane, albo na maskowane (z włączoną maską) zanim
powróci do wykonywania programu. Podczas stanu Zatrzymania
mikroprocesor wykonuje cyklicznie rozkaz NOP w celu podtrzymania funkcji
odświeżania pamięci dynamicznych.
INT Żądanie Przerwania (wejście, aktywne w stanie Niskim). Żądanie
Przerwania jest generowane przez urządzenia I/O. Mikroprocesor honoruje
to żądanie na końcu bieżącej instrukcji, jeśli wewnętrzny przerzutnik flip-flop
aktywacji przerwań (IFF), sterowany programowo, jest włączony Linia INT zwykle łączona jest
równolegle z liniami urządzeń I/O i wymaga zewnętrznego podciągnięcia napięcia, aby umożliwić tę
funkcję.
IORQ Żądanie I/O (wyjście, aktywne w stanie Niskim, trójstanowe). Sygnał IORQ oznacza, iż na dolnej
połowie magistrali adresowej znajduje się poprawny adres I/O do operacji odczytu lub zapisu
I/O. IORQ jest również generowane współbieżnie z M1 podczas cyklu potwierdzenia przyjęcia
przerwania w celu poinformowania urządzenia I/O, iż wektor odpowiedzi na przerwanie może zostać
13
umieszczony na magistrali danych.
Opis wyprowadzeń procesora
M1 Cykl Maszynowy Nr 1 (wyjście, aktywne w stanie niskim).
Sygnał M1 wraz z MREQ oznacza, iż bieżący cykl maszynowy jest cyklem
pobrania kodu rozkazu dla wykonywanej instrukcji. M1 wraz z IORQ oznacza
cykl potwierdzenia przyjęcia przerwania.
MREQ Żądanie dostępu do pamięci (wyjście, aktywne w stanie Niskim,
trójstanowe). Sygnał MREQ oznacza, iż magistrala adresowa zawiera ważny
adres dla operacji odczytu lub zapisu do pamięci.
NMI Żądanie Przerwania Niemaskowanego (wejście, wyzwalane ujemnym
zboczem: czyli przejściem ze stanu 1 na 0). Sygnał NMI posiada wyższy
priorytet od INT. Sygnał NMI jest zawsze przyjmowany na końcu bieżącej
instrukcji, bez względu na stan przerzutnika aktywacji przerwań (IFF) i
automatycznie wymusza na procesorze restart od adresu 0066H.
RD Odczyt (wyjście, aktywne w stanie Niskim, trójstanowe). Sygnał RD oznacza, iż mikroprocesor chce
dokonać odczytu lub zapisu z pamięci albo urządzenia I/O. Zaadresowane urządzenie I/O lub pamięć
powinni wykorzystywać ten sygnał do umieszczania informacji na magistrali danych mikroprocesora.
14
Opis wyprowadzeń procesora
RESET (wejście, aktywne w stanie Niskim). Sygnał RESET inicjuje
mikroprocesor w sposób następujący: kasuje przerzutnik aktywacji
przerwań, zeruje rejestr PC oraz rejestry I i R, a następnie ustawia status
przerwań na tryb 0. W czasie resetowania magistrale adresowa i danych
przechodzą w stan wysokiej impedancji, a wszystkie wyjściowe linie
sterujące przyjmują stan nieaktywny. Uwaga: sygnał RESET musi być
aktywny przez minimum 3 pełne cykle zegara, zanim operacja resetowania
zostanie zakończona.
RFSH Odświeżanie (wyjście, aktywne w stanie Niskim). Sygnał RFSH wraz
z MREQ oznacza, iż dolne siedem bitów magistrali adresowej systemu może
zostać wykorzystane jako adres odświeżania dla pamięci dynamicznych. W
górnej połowie magistrali adresowej jest umieszczana zawartość rejestru I.
WAIT Oczekiwanie (wejście, aktywne w stanie Niskim). Sygnał WAIT
informuje mikroprocesor, iż zaadresowana pamięć lub urządzenie I/O nie są jeszcze gotowe do
wymiany informacji. Mikroprocesor powtarza cykle oczekiwania tak długo, aż sygnał ten powróci do
stanu wysokiego. Przedłużone okresy oczekiwania mogą spowodować błędy w odświeżaniu przez
mikroprocesor pamięci dynamicznych.
WR Zapis (wyjście, aktywne w stanie Niskim, trójstanowe). Sygnał WR oznacza, iż magistrala danych
mikroprocesora zawiera ważne dane, które mają zostać umieszczone w zaadresowanej pamięci lub w
rejestrze I/O.
CLK Zegar (wejście). Jednofazowe wejście zegarowe o poziomie MOS.
15
Rejestry procesora
Każdy z rejestrów A, B, C, D, H, L jest 8-bitowy.
Rejestry można łączyć w pary 16-bitowe: AB, CD,
HL (H - starszy, L - młodszy bajt)
Wyróżnionym rejestrem jest rejestr A - tzw. akumulator. W rejestrze
tym umieszczony jest zazwyczaj jeden z argumentów operacji, a
później wynik jej działania. W operacjach na liczbach 16-bitowych
rolę akumulatora pełni para rejestrów HL.
W operacjach blokowych rejestr BC jest licznikiem.
16
Rejestry procesora
Procesor Z80 dysponuje alternatywnym bankiem rejestrów A', F', ... itd.
Dostęp do nich jest ograniczony – możliwy jest tylko poprzez rozkazy
wymiany.
EX AF, A'F' ; wymiana rejestrów AF z A'F'
EXX ; wymiana wszystkich rejestrów
17
Rejestr flag procesora
Bit
0
Znacznik
C
1
N
2
P/V
Nazwa
Carry
Negativ
Parity/Overflow
4
H
Half Carry
6
7
Z
S
Zero
Sign
Opis
przeniesienie z najstarszego bajtu (np. przy
sumowaniu)
oznacza, że ostatnio wykonaną operacją było
odejmowanie, informacja o tym jest istotna
przy korekcji wyników
•po operacjach logicznych - oznacza parzystą
liczbę jedynek w wyniku
•po operacjach arytmetycznych - przepełnienie
w kodzie U2
przeniesienie połówkowe pomiędzy tetradami
(z młodszej do starszej)
znacznik jest ustawiony, gdy wynik operacji = 0
znak liczby w kodzie U2 (kopia najstarszego bitu
wyniku)
18
Rejestry sterujące
PC - Program Counter, 16-bitowy licznik rozkazów
SP - Stack Pointer, 16-bitowy wskaźnik stosu. Przechowuje adres
szczytu stosu. Stos rozrasta się "w dół" /adresy/. Programista ma
dostęp tylko do szczytu stosu. Do wymiany danych ze stosem
służą instrukcje PUSH i POP.
IX, IY - rejestry indeksowe używane w rozkazach blokowych,
czasem mogą zastępować rejestry HL
I - Interrupt, wektor przerwania. Zawartość rejestru I uczestniczy
w obliczaniu adresu podprogramu obsługi przerwania
R - Refresh, rejestr odświeżania, jego zawartość jest umieszczana
w cyklu M1 (w drugiej połowie) na magistrali adresowej (na
młodszym bajcie)
19
Cztery podstawowe operacje
sprzętowe
Operacja/sygnały
MREQ* IOREQ*
RD*
WR*
odczyt danych: MEM --> CPU
0
1
0
1
zapis danych: CPU --> MEM
0
1
1
0
odczyt z portu we/wy: I/O --> CPU
1
0
0
1
zapis do portu we/wy: CPU --> I/O
1
0
1
0
20
Przesyłanie danej 8-bitowej
LD d, s
0 1
d
LD d, n
s
00
d
110
n
d, s
000
001
010
011
100
101
110
111
argument
B
C
D
E
H
L
(HL)
A
Adresowanie rejestrowe
bezpośrednie (pośrednie)
d
000
001
010
011
100
101
110
111
argument
B
C
D
E
H
L
(HL)
A
Adresowanie natychmiastowe
21
Przesłanie danej 8-bitowej (adresy)
Adresowanie bezpośrednie (adresy są 16-bitowe)
LD (p), A
LD A, (p)
000
LD (aa), A
LD A, (aa)
p d 010
0 0 1 1
d
0 1 0
aal
aah
p
0
1
para rejestrów
BC
DE
d
0
1
kierunek
z akumulatora do pamięci
z pamięci do akumulatora
22
Używanie rejestrów indeksowych
LD r, (HL)
0 1
r
LD r, (i + d)
1 1 0
1 1
0 1
i
1 1 1 0 1
r r r 1 0 0
d
r
rejestr
000
001
010
011
100
101
110
111
B
C
D
E
H
L
(HL)
A
i
0
1
rejestr indeksowy
IX
IY
23
Używanie rejestrów indeksowych
LD (HL), n
0 0
1 1 0
n
1 1 0
LD (i + d), n
1 1
i
1 1 1 0 1
0 0
1 1 0
1 1 0
d
n
i
0
1
rejestr indeksowy
IX
IY
24
Rejestry zapasowe i flagi
EX AF, AF’
EXX
0 0 0 0 1 0 0 0
S
Z
-
1 1 0 1 1 0 0 1
AC
-
P/V
N
CY
S – najstarszy bit wyniku operacji, wynik ujemny
Z – wynik operacji zerowy
AC – pomocnicze przeniesienie z pozycji 3, arytmetyka BCD
P/V – znacznik parzystości dla operacji logicznych i nadmiaru (ang. overflow) dla
operacji arytmetycznych
N – znacznik zerowany przy wykonywaniu dodawania i ustawiany
przy wykonywaniu odejmowania, arytmetyka BCD
CY – znacznik przeniesienia (pożyczki przy odejmowaniu)
25
Rotacje i przesunięcia bitowe
RL x
RR x
RLC x
RRC x
SLA x
SRL x
SRA x
x : A, B, C, D, E, H, L, (HL), (IX + d), (IY + d)
26
Operacje na adresach
Ładowanie
LD r, nn
LD r, (aa)
LD (aa), r
r: BC, DE, HL, SP, IX, IY
Zamiana
EX DE, HL
Inkrementacja i dekrementacja
INC r
DEC r
27
Operacje na adresach
Arytmetyka 16-bitowa
ADD HL, r
ADC HL, r
SBC HL, r
r: BC, DE, HL, SP
Dodawanie i odejmowanie wartości w rejestrach indeksowych
ADD IX, p
gdzie p ∈ {BC, DE, SP, IX}
ADD IY, p
gdzie p ∈ {BC, DE, SP, IY}
28
Operacje stosowe
Stos to blok pamięci.
Rejestr SP wskazuje wierzchołek stosu – adres ostatniego
zajętego bajtu.
Stos rośnie w dół – w kierunku mniejszych adresów.
PUSH p
Odkłada na stos najpierw starszy, potem młodszy bajt
argumentu (architektura little-endian).
Zmniejsza SP o 2
p ∈ {AF, BC, DE, HL, IX, IY}
POP p
Zdejmuje ze stosu najpierw młodszy, potem starszy bajt i
umieszcza je w argumencie.
Zwiększa SP o 2.
29
Operacje stosowe
Inicjowanie wskaźnika stosu
LD SP, nn
LD SP, (aa)
LD SP, p
gdzie p ∈ {HL, IX, IY}
Manipulowanie wierzchołkiem stosu
INC SP
DEC SP
EX (SP), p
gdzie p ∈ {HL, IX, IY}
30
Skoki i podprogramy
JP aa
1 1 0 0 0 0 1 1
aal
wykonuje skok pod podany
adres (wpisuje aa do PC)
aah
CALL aa
1 1 0 0 1 1 0 1
aal
aah
RET
1 1 0 0 1 0 0 1
odkłada na stos adres
następnego rozkazu (adres
powrotu) i wykonuje skok pod
podany adres
zdejmuje ze stosu adres powrotu i
wykonuje skok pod ten adres
31
Skoki warunkowe
JP w, aa
CALL w, aa
1 1
w
0 1 0
aal
w
skrót
warunek skoku
aah
000
NZ
Z=0
001
Z
Z=1
010
NC
CY = 0
011
C
CY = 1
100
PO
P/V = 0
101
PE
P/V = 1
110
P
S=0
111
M
S=1
1 1
w
1 0 0
aal
aah
RET w
1 1
w
0 0 0
32
Skoki względne
JR d
0 0 0 1 1 0 0 0
n
JR v, d
0 0 1
v
d
0 0 0
v
00
01
10
11
skrót
NZ
Z
NC
C
warunek skoku
Z = 0
Z = 1
CY = 0
CY = 1
Skok względny dodaje do PC wartość d traktowaną jako liczba ze
znakiem.
33
Przykłady programów
34
Pętle
zm:
equ 20h ;deklaracja zmiennej
org 0h ;adres poczatkowy programu
ld sp,38h ;zainicjowanie wskaznika stosu
ld b,8 ;B=licznik petli
petla: ld a,b
add a,b
ld c,a
push bc ;zapis na stos 2 bajtow
djnz petla ;realizacja petli programowej
ld hl,zm
ld (hl),a ;zapis do zmiennej 'zm'
halt
.end
35
Pętle i tablice
tab:
equ 20h
;deklaracja zmiennej
org 0h
;adres poczatkowy programu
ld sp,28h ;zainicjowanie wskaznika stosu
ld hl,1
ld de,2
add hl,de ;dodawanie 2-bajtowe
push hl
;zapis na stos slowa 16-bitowego
ex de,hl ;zamiana zawartosci HL i DE
add hl,de ;dodawanie 2-bajtowe
push hl
;zapis na stos slowa 16-bitowego
ld b,2
;B=licznik petli
petla: pop de
;odczyt ze stosu 2 bajtow
djnz petla;realizacja petli programowej
halt
.end
36
Tablice w assemblerze
wygodnym narzędziem do deklarowania adresu
początkowego zmiennej programowej, prostej lub
złożonej (tablicy), jest dyrektywa asemblera EQU
znak:
equ 110h
;zadeklarowanie 1-bajtowej zmiennej "znak"
znaki: equ 111h
;zadeklarowanie 15-bajtowej tablicy "znaki"
;o adresie początkowym 111h
liczba: equ 120h
;zadeklarowanie zmiennej 2-bajtowej liczba
znak:
equ 110h
znaki: equ znak+1
liczba: equ znaki+15
37
Dostęp sekwencyjny do tablicy
Należy do wybranego rejestru 16-bitowego załadować adres początkowy interesującej na
tablicy, a następnie odpowiednio czytać lub zapisywać jej kolejne komórki, zwiększając po
każdej operacji wartość tego rejestru rozkazem INC.
ld
ld
czysc: ld
inc
djnz
b,15
hl,znaki
(hl)," "
hl
czysc
;dlugosc tablicy znakow
;zainicjowanie rejestru adresujacego
;wpisanie spacji
;modyfikacja adresu
;realizacja petli programowej
dostęp sekwencyjny do tablicy od końca
ld b,liczba-znaki
ld ix,liczba-1
litA: ld (ix),"A"
dec ix
djnz litA
;dlugosc tablicy znakow wyliczona aut.
;zainicjowanie rejestru adresujacego
;na adres ostatniej komorki tabl. "znaki"
;wpisanie litery A
;modyfikacja adresu
;realizacja petli programowej
38
Dostęp swobodny do tablicy
ld bc,0
czysc: ld hl,znaki
add hl,bc
ld (hl)," "
inc bc
ld c,a
cp 15
jr c,czysc
;rejestr indeksujacy od 0 do 14
;kazdorazowa inicj. adresu pocz.tablicy
;dodanie indeksu, HL-> wybrany element
;wpisanie spacji
;modyfikacja indeksu
;sprawdzenie warunku konca
;czy indeks < 15
;skok jesli tak
39
Operacje blokowe
Przemieść w pamięci łańcuch danych o długości 737 bajtów spod adresu DATA do BUFFER
LD
HL, DATA
LD
DE, BUFFER
LD
BC, 737
LDIR
;
;
;
;
adres start. łańcucha danych
adres start. miejsca docelowego
długość łańcucha
prześlij łańcuch
Polecenie LDIR przemieści obszar pamięci wskazywany przez HL do obszaru pamięci
wskazywanego przez DE.
Sekwencyjnie zwiększa HL i DE, zmniejsza BC, kontynuuj e, aż BC = 0.
40
Operacje blokowe
Zadanie: skopiuj łańcuch tekstowy (o długości ograniczonej do 132 znaków) z adresu DATA
pod adres BUFFER.
Kopiowanie trwa do momentu napotkania znaku '$' lub przesłania wszystkich 132 znaków.
LD
LD
LD
LD
LOOP: CP
JR
LDI
END:
HL, DATA
DE, BUFFER
BC, 132
A, '$'
(HL)
Z, END
JP
PE, LOOP
HALT
.END
;
;
;
;
;
;
;
;
;
;
;
;
adres początku łańcucha
adres docelowego bufora
maksymalna długość łańcucha
kod zakończenia łańcucha
porównaj znak z '$'
idź na koniec, jeśli znak się zgadza
przenieś znak spod (HL) do (DE)
zwiększ HL i DE, zmniejsz BC
wróć do LOOP, jeśli pozostało więcej znaków
inaczej przejdź do zakończenia.
Uwaga: znacznik P/V jest używany
do informowania, że BC osiągnął zero.
41