Elektronika Mikroprocesory(1)


1.
Elementy cyfrowe
i mikroprocesory 8-bitowe
7
1.1. Podstawowe układy cfrowe
___________________________________________________________
Układy bramkujące
Układy cyfrowe są zbudowane z elementarnych układów, zwanych bramkami logicz-
nymi, realizujących podstawowe operacje logiczne.
Zestawienie symboli podstawowych bramek logicznych przedstawiono w tablicy 1.1.
H to poziom wysoki oraz L poziom niski. Niektóre z tablic operacji opisano za pomocą po-
ziomów logicznych 0 i 1, dla dodatniej konwencji poziomów: 1 odpowiada wysokiemu po-
ziomowi napięcia (H) oraz 0 odpowiada poziomowi niskiemu (L). Cyfrą 3 oznaczono trzeci
stan logiczny, wysokiej impedancji zmiennej wyjściowej.
Bramki logiczne umożliwiają realizację bardziej złożonych układów cyfrowych,
których przeznaczeniem jest:
- krótkotrwałe przechowywanie wektorów binarnych,
- przekazywanie wektorów binarnych między różnymi układami,
- przetwarzanie wektorów informacji,
- sterowanie procesem przetwarzania informacji.
Przykład prostego układu bramkującego pokazano na rys. 1.1, gdzie na wyjściu ukła-
du (WY) jest powtarzana informacja wejściowa (WE) wtedy, gdy sygnał bramkujący B = 1.
Tego typu blok wykorzystuje się we wszystkich układach synchronizacji pisania i czytania
danych.
8
Tablica 1.1
Symbole podstawowych bramek logicznych
Nazwa bramki Symbol Tabela operacji
x y
Wtórnik
y = x
x
L L
H H
x y
Invertor - negacja
x y = x
L H
H L
x x y
1 2
Alternatywa - OR
x
1
y = x +x
1 2
L
L L
x
2
H
L H
H
H L
H
H H
x x y
1 2
NOR
x
1
y = x +x
1 2
0 0 1
x
2
0 1 0
1 0 0
1 1 0
x x y
1 2
Iloczyn - AND
x
1
y = x x
1 2
0 0 0
x
2
0 1 0
1 0 0
1 1 1
x x y
1 2
NAND
x
1
y = x x
1 2
0 0 1
x
2
0 1 1
1 0 1
1 1 0
x x y
1 2
Bramka trójstanowa
y
x
1
L L 3
L H L
x
2
H L 3
H H H
9
WE WY
B - sygnał bramkujący ( )
Rys. 1.1. Przykład układu bramkującego
Multipleksery i demultipleksery
Do przełączania zródeł informacji stosowane są układy zwane multiplekserami. Na
jedno wyjście przepisywana jest informacja z jednego wybranego wejścia. Schemat takiego
układu pokazano na rys. 1.2. Dekoder przełącza na wyjście układu jedną z czterech linii
wejściowych (od 0 do 3). O tym która z linii wejściowych jest czynna decydują wartości
zmiennych adresowych a0,a1 dekodera. .Liczba adresowanych linii wejściowych jest potęgą
liczby zmiennych adresowych. Jeśli liczba zmiennych adresowych jest równa n, to liczba
adresowanych linii wejściowych jest równa k = 2n .
a)
X0
X1
Y
X2
X3
b)
a0
X0
X1
MUX
Y
a1
X2
X3
dekoder
a0
a1
Rys. 1.2. Schemat multipleksera (MUX) o czterech wejściach informacyjnych a) schemat
ideowy, b) symbol multipleksera
10
Równoległe połączenie multiplekserów 1-bitowych daje multiplekser wielobitowy,
którego przykład pokazano na rys. 1.3.
a) b)
0 1 2 3
(A0 - A3) (A0 - A3) MUX
Y0 - Y3
B B
Y0 - Y3
C
D
C
a0
D
a1
Rys. 1.3. Przykład multipleksera czterobitowego
a) schemat ideowy, b) symbol zastępczy
Dwie linie adresowe a0 a1 przełączają odpowiednie linie A0-A3 czterech 1-bitowych
multiplekserów (0,1,2,3), na odpowiadające im wyjścia Y. Gdy a0 a1 = 00, na wyjścia Y0-Y3
podłączone zostają przewody grupy (portu) A każdego z multiplekserów. Analogicznie prze-
łącza się pozostałe wejścia portów B, C i D; zgodnie z przyporządkowanymi im wartościami
zmiennych adresowych.
Operację przełączania w drugą stronę, z magistrali na porty wyjściowe, realizuje układ
zwany demultiplekserem. Zasadę działania demultipleksera ilustruje układ pokazany na
rys. 1.4. Linie adresowe a0 a1 przełączają magistralę X na odpowiednie porty wyjściowe A,
B, C i D. A = X dla a0 a1 = 00 , B = X dla a0 a1 = 01 , C = 10 dla a0a1 = 10 , D = X dla
a0 a1 = 11. Multiplekser i demultiplekser należą do grupy układów cyfrowych zwanych selek-
torami.
X0
A
X1
X2
Y0
B
koder
X3
DMX
X
Y1
1 z 8
X4
C
Y2
X5
D X6
X7
a0 a1
Rys. 1.4. Oznaczenia demultipleksera Rys. 1.5. Oznaczenia kodera 1 z 8
Kodery i dekodery
Koderem nazywamy układ realizującym operacje kodowania informacji, tzn. przypo-
rządkowania zbiorowi elementów informacji określonych wektorów binarnych. Na rys. 1.5
podano przykład kodera stanów zadziałania jednego z ośmiu sygnałów wejściowych (szyfra-
tora 1 z 8) za pomocą 3-bitowych wektorów binarnych, zgodnie z zasadą kodowania 2n = 23 =
8, gdzie n oznacza liczbę bitów wektora kodującego. Dekoder wykonuje operacje odwrotne
do operacji kodera, tzn. zamienia wartości wejściowych wektorów binarnych na odpowiada-
jący im aktywny sygnał wyjściowy.
Elementy i układy pamięci Zapis/Odczyt - RAM
Podstawowym układem pamięci półprzewodnikowej jest przerzutnik, którego schemat
ideowy przedstawiono na rys. 1.6.
a) b)
s
s
Q
Q
Q
r
Rys. 1.6. Schemat ideowy (a) i symbol (b) jednobitowej komórki pamięci Zapis/Odczyt
Jest to 1-bitowa komórka pamięci statycznej typu zapis/odczyt. W tym elemencie
pamięci aktywny jest niski poziom sygnałów wejściowych - s i r. Wartość s = 0 (s - set) usta-
wia wartość 1 na wyjściu Q natomiast r = 0 (r - reset) zeruje zmienną wyjściową Q.
Zespół przerzutników przeznaczonych do krótkotrwałego przechowywania wektora
informacji cyfrowej nazywamy rejestrem (rys. 1.7).
12
WY (OUT)
0 1 2 3
LE czytaj (RD)
Serial IN
pisz (WR)
Stb/Clock
0 1 2 3
WE (IN)
Rys. 1.7. Symbol czterobitowego rejestru równnoległego
Rejestr przyjmuje dane wprowadzane równolegle na przewodach wejściowych WE/IN
(0, 1, 2, 3) lub wprowadzane szeregowo, na przewodzie Serial IN. Przełączanie trybu wpro-
wadzania danych szeregowo lub równolegle odbywa się za pomocą linii sterującej LE. Sygnał
WR - pisz (write). Dane można wprowadzać szeregowo (Serial IN) w takt impulsu zegaro-
wego - Clock. Sygnał zegarowy jest też nazywany sygnałem synchronizującym.
Dane są czytane na przewodach WY/OUT synchronicznie w takt sygnału RD - odczy-
tu. Rejestry z równoległym wprowadzaniem danych i równoległym odczytem są elementem
składowym układów zwanych pamięcią operacyjną systemu cyfrowego (Rys. 1.8).
W pamięci operacyjnej przechowywane są ciągi wielobitowych wektorów binarnych
reprezentujące dane lub kody sterujące programu. Możliwość natychmiastowego zapisu i
odczytu została nazwana dostępem swobodnym lub dostępem natychmiastowym (RAM -
Random Access Memory). Na wejścia adresowe pamięci (Adr) zadawane są wektory binarne,
które dekoder zamienia na 1 z n aktywnych sygnałów selekcji rejestrów pamięciowych, po-
numerowanych od 0 do n - 1. Zadziałanie dekodera jest uwarunkowane poziomem aktyw-
nym dodatkowego sygnału bramkującego CS (chip select) selekcji bloku RAM. Zaadresowa-
ny rejestr pamięciowy zostaje podłączony do linii DANE WE/WY.
Kierunek transmisji danych do lub z rejestru pamięciowego określają poziomy sygna-
łów zapisu WR/Write i odczytu RD/Read. Układ Z/O (zapis/odczyt) zawiera elementy przełą-
czania kierunku transmisji, zwane zwrotnicami, wzmacniacze sterujące liniami danych oraz
wzmacniacze separujące linie danych od bloku rejestrów pamięciowych. Jest to stan linii
różny od 0 lub 1, zwany stanem wysokiej impedancji lub trzecim stanem (porównaj tabl. 1.1).
Stos
13
Pamięcią typu zapis odczyt przyjmującą dane w określonym porządku (od adresu
wyższego do niższego) jest również stos. Na rys 1.8 b przedstawiono zasadę wprowadzania
(Push) danych do pamięci typu STOS. Odczyt danych ze stosu (Pop) odbywa się w kolejno-
ści odwrotnej. Jako stos wykorzystywana jest pamięć RAM. Komórki pamięci są adresowane
specjalnym rejestrem liczący, zwanym wskaznikiem stosu, którego zawartość można zwięk-
szać lub zmniejszać programowo (Pop, Push) oraz automatycznie w trakcie obsługi żądań
przerwania (omówionych w dalszej części książki).
a)
0
1
CS
2
Adr dekoder
n-1
pisz (WR)
bufor Z/O
czytaj (RD)
Dane WE/WY
b)
D2
D1
D0
D0
D1
D0 D0
Rys 1.8. Blok pamięci RAM
a) schemat ideowy pamięci typu zapis/odczyt;
b) Zasada wpisywania danych do stosu.
Zwrotnica
Schemat ideowy 1-bitowej zwrotnicy 3-stanowej pokazano na rys.1.9. Przełącza ona
kierunek transmisji danych z punktu A do B lub z punktu B do A. Odpowiednio do wartości
sygnału bramkującego (E) jest aktywny jeden lub drugi ze wzmacniaczy 3-stanowych układu.
Moduły zintegrowane wzmacniaczy 3-stanowych zawierają kilka równolegle połączonych
układów 1-bitowych podłączonych do wspólnej szyny transmisyjnej zwanej magistralą.
14
3
A
B
3
E
Rys 1.9. Schemat ideowy zwrotnicy 3-stanowej
Pamięci stałe - ROM
Elementy pamięci RAM cechuje ulotność zapisanych danych, co oznacza, że po
wyłączeniu napięcia zasilania i ponownym jego załączeniu zapisane wcześniej w pamięci
wektory informacji binarnej nie zostają zachowane. Na rys.1.10 przedstawiono schemat
ideowy fragmentu matrycy tranzystorowej, która funkcjonuje podobnie jak pamięć.
Na wyjściach WY są odbierane dane odpowiadające stanowi zainstalowania tranzy-
storów. Funkcję sygnałów adresowych (ADR 0, 1, ...) spełniają linie sterowania bramek.
Aktywny poziom sygnału sterującego bramkami tranzystorów matrycy odpowiada warto-
ściom 0 na wyjściach z zamontowanym tranzystorem. Brak tranzystora w polu adresacji
odpowiada wartości 1 na tym wyjściu (zakładając, że 1 = UDD). Zapis informacji do pamięci
polega na wykonaniu określonych operacji na etapie produkcji takich pamięci lub zniszczeniu
połączeń dla tranzystorów zbędnych. Oznacza to jedynie możliwość odczytu informacji
uprzednio zapisanej (Read Only Memory).
15
a)
WY1
WY0
UDD UDD
0
ADR
1
2
WY0
b) WY1
ADR 0
1
2
Rys 1.10 Komórka pamięci ROM
a) schemat ideowy
b) uproszczony schemat zastępczy
Istotną cechą tych układów jest niezmienność ich zawartości po wyłączeniu i ponow-
nym załączeniu napięcia zasilania.
Liczniki
Liczniki są układami, w których zapisana informacja, czy odpowiadająca jej wartość
dziesiętna, może zostać zwiększona lub zmniejszona o jeden, czasem o zadaną wartość więk-
szą od jeden. Na rys. 1.11 pokazano oznaczenia licznika binarnego taktowanego sygnałem
 clock . Zadana na wejściach WE wartość początkowa jest powiększana, gdy aktywny jest
sygnał INC (Increment) lub pomniejszana dla aktywnego sygnału DEC (Decrement).
16
WY
Clock
licznik binarny
INC DEC WE
Rys.1.11. Oznaczenia podstawowego licznika binarnego
Jednostka Arytmetyczno-Logiczna (ALU)
Systemy obliczeniowe realizują operacje arytmetyczne lub operacje logiczne (polega-
jące na badaniu spełnienia założonego warunku). Wymienione operacje wykonuje układ
zwany jednostką arytmetyczno-logiczną (ALU - Arithmetic Logic Unit). Operacje są wyko-
nywane na dwóch wektorach binarnych zwanych operandami (rys. 1.12).
wskazniki (RF)
A
ALU Y
B
C
Rys 1.12. Oznaczenia sygnałów jednostki Arytmetyczno-Logicznej (ALU)
Na wejściach programujących C zadawany jest rodzaj operacji, której poddane zostają
operandy A i B. Wynik operacji przedstawia wartość wektora Y oraz wartości wskazników
RF - rejestru flagowego (rejestru wskazników). Bity flagowe przyjmują charakterystyczne dla
określonych operacji wartości, na przykład bit Z = 1 (wskaznik zera) dla spełnienia operacji
porównania A = B, czy S = 1 (znak) gdy spełniona jest nierówność A > B.
Skala integracji
Układy cyfrowe o typowej funkcji (jak: liczniki, rejestry, pamięci czy układy arytme-
tyczno-logiczne) produkuje się w postaci jednego układu elektronicznego zwanego układem
scalonym lub zintegrowanym. W latach siedemdziesiątych stosowano formalną klasyfikację
układów scalonych o tzw. małej (SSI), średniej (MSI) lub dużej (LSI) skali integracji, w
17
której kryterium podziału stanowiła liczba tranzystorów we wspólnej strukturze elektronicz-
nej. Nieustanny wzrost stopnia upakowania elementów scalonych spowodował, że wprowa-
dzone liczbowe wagi podziału układów zintegrowanych nie odpowiadają realiom technolo-
gicznym. Wiadomo na pewno, że mała skala integracji oznacza kilkadziesiąt tranzystorów w
układzie a bardzo duża skala integracji (VLSI) to kilkadziesiąt lub kilkaset milionów tranzy-
storów w układzie scalonym.
1.2. Podstawowe moduły komputera
___________________________________________________________
18
Mikroprogramowane sterowanie
Operacje arytmetyczne realizowane w zapisie dwójkowym są wykonywane jako
sekwencja operacji składowych (dodawanie, przesunięcia i dopełnienie - negacja). Zadania
wykonywane w jednym takcie zegarowym zwane są mikrooperacjami. Sekwencja takich
mikrooperacji zwana jest mikroprogramem zadanej operacji arytmetycznej. Na rys. 1.13
przedstawiono schemat blokowy mikroprogramowanego układu sterującego. Na liniach
wejściowych kod rozkazu podany zostaje wektor binarny będący adresem początku mikro-
programu odpowiadającego temu rozkazowi. Kod rozkazu zostaje wprowadzony do Rejestru
Adresu mikrorozkazów (RA), którego zawartość adresuje odpowiednią komórkę pamięci
ROM, gdzie rezydują wektory sterujące układami wykonawczymi procesora i komputera.
Zawartość wskazanej przez RA komórki pamięci zostaje wprowadzona do Rejestru Mikro-
rozkazu (RM). Jego zawartość zadaje jednostce arytmetyczno-logicznej kod mikrooperacji
oraz steruje pracą wszystkich elementów składowych układu cyfrowego  sygnałami P1 - Pk-1 .
Ostatni z tych sygnałów (Pk ) steruje przebiegiem sekwencji mikroprogramu. Gdy Pk = 0,
wówczas do RA w ciągu mikroprogramu dla zadanego kodu rozkazu jest wprowadzany wek-
tor adresowy następnego mikrorozkazu (i+1). W przedostatnim kroku mikroprogramu zostaje
odczytany następny kod rozkazu, a w ostatnim kroku mikroprogram, sygnałem Pk = 1, otwar-
ta zostaje droga transmisji dla pierwszego wektora drugiego rozkazu. Układ sterowania,
opisany w poprzednim rozdziale, generuje ciągi wektorów binarnych zapisane w pamięci
mikroprogramu.
19
RM
kod mikrooperacji
} P1 - Pk-1
pamięć
mikroprogra-
mu (ROM)
adres
i+1
Pk
RA
kod rozkazu
Rys 1.13. Schemat ideowy układu mikroprogramowanego sterowania
RA - Rejestr Adresu,
RM - Rejestr Mikrorozkazu
Po dodaniu do bloku pamięci modułu RAM (rys.1.14) możliwe jest modyfikowanie
mikroprogramów, dzięki wektorom binarnym wprowadzanym za pomocą linii wejściowych
WE/WY.
Są to bieżące dane dla elementów mikroprogramu rezydującego w pamięci programu
ROM. Ponadto można łączyć ze sobą rezydujące w pamięci ROM sekwencje sterowania w
mikroprogramy wielomodułowe, za pomocą danych czytanych z komórek pamięci RAM.
Pokazany na rys. 1.14 układ jest sterownikiem binarnym, w którego program pracy
może ingerować jego użytkownik. W ten sposób działają niektóre sterowniki przemysłowe o
programach pracy uzależnionych od wartości wektorów zadanych na liniach WE lub od
wyników operacji z poprzednich kroków.
Obliczenia arytmetyczne można wykonać w zapisie binarnym a bieżący wynik może
warunkować realizację kroku następnego w sekwencji sterowania, tzn. alternatywnie wzglę-
dem wartości badanej. Alternatywa należy do grupy operacji logicznych, stąd urządzenie
cyfrowe wykonające operacje obliczeniowe - arytmetyczne i operacje badania warunków
nazywamy układem lub jednostką arytmetyczno - logiczną (ALU - rys. 1.12). Jednostkę
arytmetyczno-logiczna wraz ze współpracującym z nią układem sterowania nazwano proce-
sorem.
20
RMR
WE/WY RAM
ALU - kod mikrooperacji
} P1 - Pk-1
pamięć
mikroprogra-
mu (ROM)
Pk
adres
i+1
RAMR
kod
rozkazu
Rys 1.14. Schemat ideowy sterownika mikroprogramowanego
Na rys. 1.15 przedstawiono mikroprogramowany układ zawierający podstawowe
elementy urządzenia przetwarzającego zwanego komputerem. Procesor jest elementem
składowym komputera.
magistraly
adresów i danych
blok rejestrów
układy
ROM
sprzęgające
RAM
i
ALU
dekodery
WE/WY
sterowanie
adresów
Rys. 1.15. Schemat blokowy komputera
" ALU (Arithmetic Logic Unit) jest jednostką arytmetyczno-logiczną komputera, która
realizuje podstawowe operacje arytmetyczne: binarne dodawanie i odejmowanie oraz ope-
racje logiczne: AND, OR i EXCLUSIVE-OR.
" Sterowanie (CU - Control Unit) jest jednostką sterującą realizacją mikroprogramów za
pomocą ALU i układów z nią współpracujących.
" Procesor zawiera ALU oraz jednostkę sterującą. Zwany jest centralnym układ przetwarza-
jący - CPU (Central Processing Unit) komputera. Procesor wykonuje program zapisany w
21
pamięci operacyjnej w formie wektorów (wielobitowych słów) binarnych. Wektory binar-
ne są wprowadzane do procesora za pośrednictwem magistral - do ALU i jednostki steru-
jącej oraz pomocniczych rejestrów wewnętrznych procesora.
" Układy sprzęgające zwane układami wejściowo/wyjściowymi (WE/WY, IN/OUT, interfa-
ce) pośredniczą w operacjach transmisji danych do centralnego układu przetwarzającego z
urządzeń wejściowych lub odwrotnie; z CPU do urządzenia wyjściowego. Układy
WE/WY zwalniają procesor z realizacji wielu czasochłonnych funkcji polegających głów-
nie na dopasowaniu szybkości i formatu transmitowanych danych, pomiędzy procesorem a
pamięciami lub urządzeniami do wprowadzania i wyprowadzania danych. Te i inne wzglę-
dy sprawiły, że współczesne procesory zostały "obudowane" różnymi układami wspoma-
gającymi ich pracę.
" Cykl pracy procesora - oznacza powtarzające się cyklicznie działania związane z prze-
twarzaniem zapisanego w pamięci programu.. Praca procesora rozpoczyna się od fazy po-
brania (fetch) kodu rozkazu (operacji), który zostaje zamieniony na ciąg mikrooperacji
procesora, tworzących fazę wykonawczą rozkazu (execute).
" Mikroprocesor - jest procesorem wykonanym w technikach wysokiej skali integracji
(VLSI, USI). Historycznie pierwszym (powszechnie stosowanym) układem mikroproceso-
rowym był element 8-bitowy firmy Intel 8080/85, którego dalszy rozwój dał opracowania
16- 32- i 64-bitowe stanowiące podstawę rozwoju komputerów firmy IBM.
22
1.3. Zasady działania mikroprocesora 8-bitowego
___________________________________________________________
Na rys. 1.16 pokazano schemat blokowy magistralowego mikroprocesora 8-bitowego,
na którym zaznaczono podstawowe elementy składowe oraz magistrale zewnętrzne i we-
wnętrzne typowe dla mikroprocesorów I8080/85-firmy Intel, M6500/6800-firmy Motorola i
Z80-firmy Zilog. Mikroprocesor 8-bitowy składa się z następujących bloków:
" jednostki arytmetyczno-logicznej (ALU),
" układu sterowania (CU - Control Unit),
" rejestrów operacyjnych, jak:
A - akumulator,
RP - rejestr pomocniczy,
RF - rejestr wskazników flagowych (flag register)
PC - licznik rozkazów, lub licznik programu (pogram counter),
SP - wskaznik stosu (stack pointer)
RR - rejestr rozkazów.
" bloku BR - rejestrów programisty (inaczej, rejestrów ogólnego przeznaczenia),
" buforów szyn zewnętrznych:
BMD - bufor magistrali danych,
BMA - bufor magistrali adresowej.
Mikroprocesor komunikuje się z otoczeniem za pomocą trzech magistral zewnętrz-
nych (Z):
23
- magistrali danych ZMD (data bus),
- magistrali adresowej ZMA (address bus),
- magistrali sygnałów sterujących MS (control bus).
ZMD
BMD
WMD
RP
A
RF
BR
RR
SP
PC
ALU
sterowanie
BMA
ZMA
MS
Rys.1.16. Schemat blokowy mikroprocesora 8-bitowego
Mikroprocesor jest centralną jednostką przetwarzającą komputera wykonującą opera-
cje na wielobitowych operandach. Rozkazy i dane są przekazywane do procesora za pomocą
magistrali danych. Magistrala adresowa służy do określenia lokacji zródła rozkazów lub
danych oraz miejsca przeznaczenia wyników operacji. Mikroprocesor współpracuje z urzą-
dzeniami zewnętrznymi za pośrednictwem sygnałów sterujących, które tworzą magistralę
sygnałów sterujących, MS. W pracy mikroprocesora, tak jak w każdym układzie mikropro-
gramowanym, wyróżniamy dwie fazy realizacji programu: pobrania rozkazu i jego wykona-
nia.
Jednym z podstawowych sygnałów sterujących procesora jest zerowanie (Reset), które
ustawia elementy mikroprocesora w stan początkowy. Następuje odczyt rozkazu z pamięci
komórki operacyjnej wskazanej adresem warunku początkowego i jego wykonanie. Lokacja
rozkazu lub operandów jest wskazywana każdorazowo zawartością licznika rozkazów (PC).
Odczytany rozkaz zostaje przekazany do jednostki sterującej mikroprocesora, która analizuje
kod rozkazu definiując rodzaj operacji i adresy operandów. Na zakończenie ciągu operacji
ustalona jest nowa zawartość licznika rozkazów, będąca adresem kolejnego rozkazu.
24
Jednostka arytmetyczno-logiczna wykonuje operacje na operandach zawartych w
rejestrach A i RP. Wyniki operacji zostają przekazane do określonego rejestru wewnętrznego
procesora, do zewnętrznej komórki pamięci lub do rejestru buforowego urządzenia zewnętrz-
nego. Z tych samych miejsc mogą być pobrane dane.
Wyniki operacji określonej grupy rozkazów są reprezentowane charakterystycznymi
wartościami bitów flagowych (warunków) rejestru wskazników, jak:
" wynik operacji równy zeru, wtedy Z = 1,
" występuje przeniesienie na najstarszym bicie, CY = 1,
" przeniesienie wewnętrzne na bicie czwartym, AC = 1,
" parzysta liczba znaków wyniku operacji (zero lub jeden), P = 1,
" znak wyniku operacji, S = 1 dla wartości 1 na najstarszym bicie wyniku operacji.
Do wartości wskazników odnoszą się rozkazy warunkowe, których wykonanie zależy
od spełnienia założonego warunku. Interpretację wskazników dokładniej omówiono w roz-
dziale opisującym autokod procesorów 8-bitowych firmy Intel.
Mikroprocesor współpracuje z elementami zewnętrznymi gromadzącymi kody steru-
jące i dane, czyta z pamięci kody programu, interpretuje je, pobiera dane z pamięci lub ukła-
dów sprzęgających (ze zródła informacji), wykonuje określone operacje i przekazuje wyniki
do rejestrów przeznaczenia procesora: wewnętrznych lub zewnętrznych. yródło i miejsce
przeznaczenia informacji są wskazywane za pomocą wielobitowych wektorów adresowych o
wartościach z przedziału 000...0 do 111...1.
Współpracą procesora z urządzeniami zewnętrznymi kierują sygnały sterujące magi-
strali MS: wejścia i wyjścia jednostki sterującej mikroprocesora. Do najważniejszych z nich
zaliczamy:
" sygnał gotowości danych na magistrali (Ready),
" sygnały obsługi przerwań (Interrupt - żądanie i potwierdzenie gotowości),
" sygnały obsługi bezpośredniego dostępu do pamięci (DMA- Direct Memory Access).
Sygnałem gotowości danych jest Ready (gotów). Transmisja danych za pośrednic-
twem magistrali równoległej odbywa się partiami 8-bitowymi, bajt po bajcie. Ponieważ szyb-
kość pracy procesora znacznie przewyższa szybkość pracy urządzenia zewnętrznego, dlatego
szybkość transmisji danych musi być dostosowana do parametrów pracy urządzenia najwol-
niejszego w systemie. Za synchronizację operacji transmisji danych jest odpowiedzialna linia
gotowości danych (Ready), informująca procesor o gotowości danych na magistrali.
25
Na rys. 1.17 przedstawiono schemat blokowy systemu transmisji danych z potwier-
dzeniem ich gotowości na magistrali. Dwa urządzenia (A i B) przekazują sobie dane w takt
zmian poziomów logicznych czterech sygnałów sterujących: Start, Gotów, Pełny i Takt. Na
przykład urządzenie A załaduje dane do bufora układu sprzęgającego sygnałem Start, o ile
bufor jest Gotów przyjąć dane, tzn. o ile poprzednia porcja danych została już przekazana do
urządzenia B. Urządzenie B zostaje poinformowane o stanie zapełnienia aktywnym pozio-
mem sygnału Pełny, co oznacza, że układ sprzęgający otrzymał nowe dane dla urządzenia B.
Odbiornik B dokonuje odczytu danych za pomocą sygnału Takt. Gdy sygnał Gotów jest ak-
tywny oznacza to dla urządzenia A zezwolenie na przesłanie następnej porcji danych sygna-
łem Start.
Gotów Takt
układ
urządzenie A
urządzenie B
sprzęgający
Start Pełny
Rys.1.17. Schemat blokowy układu transmisji
z potwierdzeniem gotowości danych
Podobnie przebiega proces transmisji danych w drugą stronę. Urządzenie A czyta
dane z bufora układu sprzęgającego sygnałem Start, o ile sygnał Gotów sygnalizuje stan
zapełnienia układu sprzęgającego aktualnymi danymi. Po ich odczycie urządzenie B jest
informowane (nieaktywny poziomem logicznym sygnału Pełny) o możliwości załadowania
kolejnej porcji danych do układu sprzęgającego sygnałem Takt.
INT (Interrupt) oznacza żądanie przerwania realizacji jednego programu w celu pod-
jęcia realizacji innego programu. Podobnie do transmisji sterowanej stanem gotowości magi-
strali (Ready) przebiega przekazywanie danych w trybie obsługi żądania przerwania (rys.
1.18). Różnica polega jedynie na kolejności zgłoszeń poziomów aktywnych sygnałów steru-
jących.
Na przykład, urządzenie A podejmuje proces czytania zawartości rejestrów układu
sprzęgającego po otrzymaniu informacji o pojawieniu się nowych danych w układzie sprzęga-
jącym. Żądanie czytania danych jest sygnalizowane poziomem aktywnym sygnału INT.
Urządzenie A czyta dane sygnałem Start. Do urządzenia B zostaje przekazany sygnał goto-
wości (Pełny = nieaktywny) oznaczający wykonanie operacji odczytu i możliwości wpisania
nowej porcji danych do układu sprzęgającego, sygnałem Takt.
26
INT Takt
układ
urządzenie A
urządzenie B
sprzęgający
Start Pełny
Rys.1.18. Schemat blokowy układu transmisji
w trybie obsługi żądania przerwania
Omówiony tu sposób przekazywania danych, między dwoma układami, nazywany jest
trybem obsługi żądania przerwania. Dane wolno gromadzone w urządzeniu B są przekazywa-
ne do urządzenia A w określonym czasie.
27
1.4. Realizacja rozkazów w mikroprocesorze
8  bitowym
___________________________________________________________
W celu wyjaśnienia zasad realizacji rozkazów w typowym mikroprocesorze 8-
bitowym posłużono się prostym schematem (rys. 1.19), zawierającym pięć podstawowych
układów:
" jednostka arytmetyczno-logiczna, ALU,
" jednostka sterująca, CU,
" licznik programu, PC,
" pamięć operacyjna, PAO,
" akumulator, A.
Praca procesora rozpoczyna się z chwilą włączenia napięcia zasilania. Wszystkie
elementy składowe komputera są wtedy ustawione w stan początkowy. Licznik rozkazów
(zwany również licznikiem programu) adresuje komórki pamięci operacyjnej zawierającej
wektory binarne, będące zakodowana formą programu. Gdy PC zawiera same zera wskazana
zostaje zawartość zerowej komórki pamięci operacyjnej (faza 1) i pobrany zostaje pierwszy
rozkaz programu - faza pobrania rozkazu (fetch). Kod rozkazu zostaje przekazany do jednost-
ki sterującej procesora (faza 2). W jednostce sterującej następuje rozszyfrowanie znaczenia
rozkazu i określenie kolejności kroków fazy wykonawczej (3, 4).
Pokazany na rys. 1.19 przykład ilustruje wykonanie prostego rozkazu, polegającego
na pobraniu (3) z PAO jednego operandu i przekazaniu go do ALU (4).
28
(1) (2)
PAO
PAO
adres
adres
rozkaz rozkaz
operand
operand
J S
PC
(3)
(4)
PAO PAO
rozkaz rozkaz
adres
A
operand operand
ALU
J S
PC
Rys 1.19. Schemat realizacji rozkazów w mikroprocesorze
(1) - operacja pobrania rozkazu, (2),(3),(4) - fazy wykonania rozkazu
W pamięci operacyjnej są przechowywane wektory binarne, których znaczenie jest
interpretowane w jednostce sterującej. Część z tych wektorów reprezentuje kod rozkazu, a
część dane na których wykonywane są kolejne operacje. W pamięci operacyjnej zapisywane
są również wyniki operacji wykonywanych przez procesor. Adresy kolejnych komórek pa-
mięci określa zawartość licznika programu. Faza pobrania rozpoczynająca każdy rozkaz,
wykonywana jest zawsze w taki sam sposób. Faza wykonawcza jest inna dla każdego rozka-
zu.
Rozgałęzienia i podprogramy
Realizacja wielu zadań przebiega według jednego stałego schematu. Program jest
ciągiem wektorów binarnych zapisanych w kolejnych komórkach pamięci. Jednak sposób
realizacji niektórych segmentów programu zależy od spełnienia określonych warunków.
Rozkazy warunkowe sprawiają, że realizacja programu może przebiegać w innej
29
kolejności niż jego zapis. Następuje rozgałęzienie programu, a więc licznik programu wska-
zuje komórki pamięci o adresie innym od kolejnego.
Szczególnym przypadkiem rozwidlenia jest wywołanie podprogramu. Uproszczony
schemat takiego rozwidlenia pokazano na rys 1.20.
Przed podjęciem podprogramu ma miejsce zapamiętanie adresu komórki, na której
została zatrzymana realizacja programu zasadniczego polegająca na przeniesieniu do specjal-
nego obszaru pamięci (3), zwanego stosem, ostatniej zawartości licznika rozkazów, a na jej
miejsce zostaje wprowadzony (4) adres pierwszej komórki pamięci zawierającej podprogram.
Po wykonaniu podprogramu do licznika rozkazów wraca (ze stosu) ostatni adres komórki
programu zasadniczego i zostaje podjęta dalsza jego realizacja.
rozkaz
operand
(1)
PAO
adres
podprogram
rozkaz rozkaz
(4)
operand
PC
PC
n-2
(3)
n-1
STOS
n
Rys 1.20. Uproszczony schemat realizacji skoku do podprogramu
(1) - faza pobrania, (2) - jak na rys 1.19,
(3) - odłożenie na stos adresu powrotu,
(4) - skok do podprogramu.
Przerwania
Każdy z procesorów przyjmuje sygnały zewnętrzne ingerujące w realizację jego bie-
żącego programu. Przerwaniem nazywamy zawieszenie realizacji programu zasadniczego
spowodowane sygnałem przerywającym. Może to być sygnał wewnętrzny generowany rozka-
zem zawartym w programie lub (i tak bywa najczęściej) sygnał zewnętrzny wywołujący
rozwidlenie programu. Powyżej (rys. 1.20) omówiono zasady realizacji rozkazu warunkowe-
go, w którym badanie warunku zostaje zainicjowane w jednostce sterującej kodem rozkazu.
30
Jednostka sterująca procesora jest wyposażona w układ inicjacji rozwidleń programu za
pośrednictwem zewnętrznych sygnałów sterujących. Aktywny poziom logiczny takiego sy-
gnału powoduje uruchomienie procedury przejścia do podprogramu o adresie przypisanym
sygnałowi przerywającemu. Uruchomienie podprogramu nazywamy wywołaniem procedury
obsługi przerwania.
Budowa procesora 8 - bitowego
Na rys. 1.21 przedstawiono uproszczony schemat przykładowego mikroprocesora 8-
bitowego 8080, opracowanego przez firmę Intel. Na nim oparta została architektura proceso-
rów 8-bitowych wszystkich firm. Jego mechanizmy działania są podstawą pracy wszystkich
magistralowych procesorów 8-bitowych, różnych firm. W dalszej cześci książki omówiono
jego szczególną wersję, układ 8051 zintegrowaną z elementami otoczenia procesorów, zwaną
sterownikiem lub komputerem jednoukładowym. Układ 8080 jest zasilany dwoma napięcia-
mi dodatnimi + 5V, +12 V oraz napięciem ujemnym -5V.
Mikroprocesor składa się z czterech bloków:
" bloku rejestrów i układu adresacji,
" bloku arytmetyczno-logicznego,
" bloku sterowania,
" bufora magistrali danych.
Blok rejestrów
Blok rejestrów wewnętrznych mikroprocesora, to:
" licznika programu (PC),
" wskaznika stosu (SP),
" bloku rejestrów ogólnego przeznaczenia (B,C, D,E i H,L).
Licznik programu wskazuje komórkę pamięci zawierającą adres następnego rozkazu.
Jego zawartość zwiększana się automatycznie (Inc - inkrementowana) w trakcie realizacji
operacji pobrania rozkazu.
Wskaznik stosu pokazuje lokację kolejnej wolnej komórki pamięci stosu. Wskaznik
automatycznie zmniejsza (Dec) zawartość po każdej operacji zapisu (Push) danych do stosu,
zwiększa zawartość (Inc) po każdej operacji odczytu (Pop) wektorów danych ze stosu.
Blok rejestrów zawiera trzy pary 8-bitowych rejestrów programisty, które można
wykorzystywać jako rejestry pojedyncze lub łączyć je parami (BC, DE i HL) w rejestry 16-
31
bitowe. Komunikacja z rejestrami pojedynczymi lub parami rejestrów odbywa się za pośred-
nictwem układu selekcji (MUX). W rejestrach ogólnego przeznaczenia przechowywane są
dane dla bieżących operacji programu. Do rejestru zatrzaskowego (Latch) przekazywane są
16-bitowe dane adresujące pamięć operacyjną komputera.
Układy procesora
Każdy procesor składa się z dwóch układów: jednostki arytmetyczno-logicznej (ALU)
oraz ze sterowania (CU). ALU wykonuje operacje arytmetyczne, logiczne i przesunięcia. W
skład zintegrowanego układu procesora wchodzą:
" jednostka arytmetyczno-logiczna, zwana centralnym elementem przetwarzającym,
" 8-bitowy rejestr akumulatorowy (A),
" 8-bitowy rejestr przejściowy (RP),
" rejestr wskazników flagowych (RF).
dane (D0-D7)
BMD
RF
A RP MUX
B
C
RR/DR
D
E
ALU
H
L
SP
PC
sterowanie
INC/DEC
LATCH/BMA
SYNC (RD) WR INT (INTA) INTE HOLD HOLDA READY RESET f1 f2
adres (A0-A15)
Rys. 1.21. Schemat blokowy przykładowego mikroprocesora 8-bitowego
32
W czasie operacji pobrania rozkazu pierwszy jego bajt zawiera kod rozkazu. Jest on
przekazywany z pamięci operacyjnej, poprzez magistralę danych do rejestru rozkazów (RR),
do dekodera rozkazów (DR) i jednostki sterującej (sterowania). Sterowanie procesora określa
wartości wszystkich sygnałów sterujących elementów procesora biorących udział w realizacji
operacji odpowiadającej kodowi rozkazu oraz wzajemne zależności czasowe tych sygnałów.
Bufor magistrali danych
Jest to 8-bitowy (D0 - D7), 3-stanowy bufor izolujący wewnętrzną magistralę proceso-
ra od magistrali zewnętrznej - magistrali komputera. W trybie wyprowadzania danych zawar-
tość wewnętrznej magistrali danych jest zapisywana w 8-bitowym rejestrze zatrzaskowym
(Latch), który na przewodach wyjściowych wyposażono we wzmacniacze trójstanowe. W
trybie wprowadzania danych wzmacniacze pełnią rolę układu przełączającego dla linii magi-
strali zewnętrznej. W fazie nieaktywnej bufora przewody WE/WY (D0 - D7) są ustawiane
w stan wysokiej impedancji (trzeci stan).
Cykl pracy procesora
Cykl rozkazu procesora składa się z operacji pobrania (Fetch) i wykonania (Execute)
rozkazu. W czasie pobrania do rejestru rozkazowego procesora przenoszone są z pamięci
operacyjnej jeden, dwa lub trzy bajty kodu rozkazu. W fazie wykonawczej rozkaz jest deko-
dowany i zamieniany na odpowiadający mu ciąg operacji.
Każdy cykl rozkazowy przykładowego procesora 8-bitowego zawiera od jednego do
pięciu cykli maszynowych. Faza pobrania składa się z tylu cykli maszynowych, ile bajtów
musi być przesłanych z pamięci operacyjnej do procesora w ramach jednego rozkazu. Czas
trwania cyklu wykonawczego zależy od rodzaju pobranego rozkazu.
Każdy z cykli maszynowych (Mk ) obejmuje trzy, cztery lub pięć cykli zegarowych
(Ti) procesora. Zintegrowane układy mikroprocesorowe są synchronizowane kilkoma fazami
zegarowymi. Definicję dwufazowego cyklu zegara synchroninzującecgo pokazano na rys.
1.22a. Dwa przesunięte względem siebie impulsy zegarowe (Ć1,Ć2) określają jeden cykl zega-
rowy procesora - zwany również dwufazowym cyklem taktowania procesora. Na początku
każdego cyklu maszynowego generowany jest impuls synchronizujący (SYNC) procesora.
Czas trwania cyklu zegarowego nie jest zgodny z podaną definicją w trzech przypad-
kach wyjątkowych: w stanie oczekiwania (WAIT), w stanie trzymania (HOLD) i w stanie
zatrzymania (HALT) pracy procesora, które opisano w dalszej części.
33
Liczba odwołań procesora do pamięci lub portu WE/WY określa minimalną liczbę cykli
maszynowych rozkazu (wyjątkiem jest rozkaz DAD). Każdy rozkaz odwołuje się co najmniej
raz do pamięci w celu pobrania jego kodu. Na przykład jednobajtowy rozkaz dodania zawarto-
ści rejestrów wewnętrznych procesora (ADD r) jest realizowany w jednym cyklu maszynowym.
Pobrany rozkaz w pojedynczym słowie 8-bitowym zawiera kod rozkazu oraz adres rejestru,
którego zawartość jest dodawana do bieżącej zawartości rejestru akumulatorowego (A). W
trzech cyklach zegarowych odbywa się pobranie rozkazu, a w czwartym jego wykonanie.
a)
T1 T2
f1
f2
SYNC
b)
T T T T T T
1 2 W 3 4 5
f
1
f
2
A
15 -0
D zapis
7- 0
odczyt
SYNC
READY
WAIT
DBIN
dane
WR
informacja
dane
statusowa
A dla
15 -0 faza dodatkowa
HALT
zapis
sprawdzenie
pamięci lub
lub wykonanie
faza
READY,HOLD
WE/WY
odczyt rozkazu
dodatkowa
HALT
D STATUS
7-0
Rys. 1.22. Przebiegi czasowe podstawowych sygnałów przykładowego procesora
a) faza początkowa każdego cyklu maszynowego
b) wybrane sygnały zewnętrzne i wewnętrzne w jednym cyklu maszynowym.
Dodatkowe odwołanie do pamięci (dodatkowy cykl maszynowy) ma miejsce w przy-
padku rozkazu ADD M dla rejestru pamięciowego M. Rejestr pamięciowy (M) jest wskazy-
wany w pamięci operacyjnej (ROM lub RAM) zawartościami rejestrów H i L. Do najdłuż-
34
szych rozkazów procesora 8080 można zaliczyć zapis zawartości rejestrów H i L do pamięci
operacyjnej (rozkazem SHLD). Zawiera on pięć cykli maszynowych, w tym szesnaście cykli
zegarowych.
W rozkazach mikroprocesora można zanotować dziesięć różnych cykli maszynowych:
(1) Pobranie - M1 (Fetch),
(2) Czytaj pamięć (Memory Read),
(3) Pisz do pamięci (Memory Write),
(4) Czytaj stos (Stack Read),
(5) Pisz do stosu (Stack Write),
(6) Czytaj wejście (Input),
(7) Pisz na wyjście (Otput),
(8) Przerwij (Interrupt),
(9) Zatrzymaj (Halt),
(10) Zatrzymaj i Przerwij (Halt and Interrupt).
Zaleznie od wykonywanego rozkazu wykonywana zostaję odpowiednia sekwencja
cykli maszynowych. O stanie wewnętrznym procesora informuje słowo statusowe, które w
opisywanym przykładzie jest generowane na magistrali danych, w cyklach zegarowych T1, T2
każdego cyklu maszynowego. Na rys. 1.22b pokazano przebiegi czasowe podstawowych
sygnałów zewnętrznych i wewnętrznych w jednym cyklu maszynowym procesora.
W cyklu T1 procesor wystawia na linie adresowe wektor lokacji zródła lub miejsca
przeznaczenia informacji w pamięci lub w portach WE/WY. Na magistralę danych (D0 - D7)
jest przekazywana informacja statusowa o aktualnie wykonywanym cyklu maszynowym. W
cyklu T2 badane są wartości sygnałów sterujących: zewnętrzny sygnał Ready - gotowość
zródła lub odbiornika informacji, zewnętrzny sygnał HOLD - żądania trzymanie, tzn. odłą-
czenia procesora od magistral komputera oraz wewnętrzny sygnał HALT - zatrzymania pracy
procesora odpowiadający rozkazowi HLT. Gdy dane nie są gotowe do odczytu, procesor
zawiesza operację transmisji, a kolejne takty zegarowe nie są numerowane (na rysunku ozna-
czone przez Tw - stan oczekiwania (wait)). Jednocześnie w takt impulsu Ć2 badana jest war-
tość sygnału gotowości danych (Ready); gdy Ready = H cykl maszynowy jest kontynuowany
(pokazane także na rys. 1.17).
Na rys. 1.22b pokazano również fazę wyprowadzania danych na przewody D0 - D7
opadającym zboczem sygnału WR. Ustalona wartość danych może zostać odczytana w cyklu
35
zegarowym T3. Przebieg dalszej część cyklu maszynowego (T4 ,T5) zależy od rodzaju rozka-
zu.
Ważnym sygnałem sterującym pracą procesora jest INT, czyli sygnał żądania prze-
rwania bieżącej pracy procesora w celu podjęcia realizacji zadania ważniejszego. Na
rys.1.23 pokazano przebiegi czasowe podstawowych sygnałów procesora przed podjęciem
realizacji programu o wyższym priorytecie.
Na rysunku wyróżniono trzy cykle maszynowe (M1 - M3) procedury obsługi żąda-
nia przerwania oraz ostatni cykl zegarowy (T3) w rozkazie, po którym przerwanie programu
zostanie wykonane.
Ponieważ program przerywający może zawierać takie same rozkazy, jak program
przerwany, musimy założyć, że wszystkie układy wewnętrzne procesora zostaną zapełnione
nowymi danymi. Jak już wiadomo, cykl rozkazowy rozpoczyna operacja pobrania rozkazu,
potem następuje jego zdekodowanie, i wykonanie. Nie jest zatem możliwe zawieszenie reali-
zacji cyklu rozkazowego przed jego zakończeniem, w przypadku, gdy program przerywający
może ingerować w zawartości wszystkich rejestrów wewnętrznych. Z tego względu procesor
został wyposażony w mechanizm zabezpieczenia miejsca przerwania, umożliwiający konty-
nuację programu przerwanego po wykonaniu procedur związanych z obsługą żądania prze-
rwania.
Dyskusję obsługi żądania przerwania ilustruje rys.1.23, którą rozpoczyna analiza
poziomu sygnału INTE (INTerrupt Enable - przerwanie dozwolone). Wartość wysoka tego
sygnału pojawia się w czasie jednego cyklu zegarowego w określonych okolicznościach,
które warunkowane są kilkoma elementami:
1. Procesor ustawia INTE = H po zakończeniu rozkazu poprzedniego, a przed podję-
ciem rozkazu następnego.
2. INTE = L (nieaktywne), jeśli zakończony został rozkaz poprzedni występujący w
programie przerywającym. Innymi słowy INTE = H po zakończeniu rozkazu jest ustawiane
tylko w programie głównym.
3. Przerzutnik warunku INTE = H zostaje wyzerowany (INTE = L) po uruchomieniu
programu przerywającego. Można go odblokować programowo rozkazem EI (Enable Inter-
rupt - przerwanie dozwolone). Po takim rozkazie INTE = H jest ustawiane tak samo jak w
programie głównym.
4. INTE = H zostaje wyzerowane i zablokowane programowo rozkazem DI (Disable
Interrupt - przerwanie zakazane, nieaktywne).
36
Jeśli mechanizm wystawiania INTE = H jest aktywny, zewnętrzne żądanie przerwania
INT = H oczekuje zezwolenia na przerwanie. Zgodność poziomów wysokich na liniach:
żądania przerwania INT i zezwolenia na przerwanie INTE ustawia wartość wysoką na we-
wnętrznym przerzutniku przerwań - INT F/F = H, który steruje dalszym przebiegiem obsługi
przerwania.
W trakcie realizacji programu zawartość licznika rozkazów podlega modyfikacji i
wpisywane są do niego kolejne adresy sekwencji rozkazów. Podjęcie żądania przerwania
uruchamia procedurę przerywającą, opisaną przebiegami czasowymi na rys.1.23. Zostaje ona
wtrącona pomiędzy program główny a program przerywający.
M M M
1 2 3
T3 T1 T2 T3 T4 T5 T1 T2 T3 T1 T2 T3
f
1
f
2
PC1 SP 1 SP2
PC
A
15- 0
RST PC PC
D
H L
D 0
7- 0
(INTA)
SYNC
DBIN
WR
RM
1
INTE
INT
INT F/F
NIPC
STATUS
8 5 5
Rys. 1.23. Przebiegi czasowe podstawowych sygnałów przykładowego procesora
dla obsługi INT=H
W takcie T2 cyklu maszynowego M1 zostaje zablokowany licznik rozkazów, którego
zawartość ma być odłożona na stos. Jest to cecha programu, wykorzystywana do jego restartu
po zakończeniu obsługi żądania przerwania. Na rys.1.21 pokazano sygnał INTA wyróżniony
linią przerywaną i nawiasami, co oznacza, że nie jest on bezpośrednio dostępny na wyprowa-
dzeniach procesora. Natomiast zaznaczony na rys.1.23 status 8 oznacza zezwolenie procesora
na przerwanie, które jest reprezentowane bitem D0 = INTA w słowie statusowym (D0 - D7).
37
Sygnały słowa statusowego wraz z sygnałami jednostki sterującej procesora określają
zasady jego współdziałania z otoczeniem. W tab.1.2 przedstawiono opis wektorów statuso-
wych dla dziesięciu, wyróżnionych w pracy przykładowego procesora (8080), cykli maszy-
nowych.
Tablica 1.2
Wektory statusowe przykładowego procesora
SAOWO STATUSOWE D0 D1 D2 D3 D4 D5 D6 D7
CYKL MASZYNOWY INTA WO STACK HLTA OUT M1 INP MEMR
(1) Pobranie - M1 0 1 0 0 0 1 0 1
(2) Czytaj pamięć 0 1 0 0 0 0 0 1
(3) Pisz do pamięci 0 0 0 0 0 0 0 0
(4) Czytaj stos 0 1 1 0 0 0 0 1
(5) Pisz do stosu 0 0 1 0 0 0 0 0
(6) Czytaj wejście 0 1 0 0 0 0 1 0
(7) Pisz na wyjście 0 0 0 0 1 0 0 0
(8) Przerwij 1 1 0 0 0 1 0 0
(9) Zatrzymaj 0 1 0 1 0 0 0 1
(10) Zatrzymaj 1 1 0 1 0 1 0 0
i Przerwij
Większość sygnałów dostępnych w słowie statusowym ma oczywiste znaczenie. Co
najmniej dwa z nich (WO i INP) są definiowane pośrednio. Niska wartość zmiennej WO
oznacza wyprowadzanie danych z procesora do pamięci lub portu urządzenia zewnętrznego
komputera. Wartość wysoka sygnalizuje operacje przesyłania danych w drugim kierunku.
INP = H oznacza, że magistrala adresowa zawiera adres portu danych urządzenia wejściowe-
go. Jeśli do urządzenia wystawiającego sygnał INT = H, zostanie przekazana informacja D0 =
H (INTA aktywne), do procesora musi być podany wektor danych umożliwiający zlokalizo-
wanie programu obsługi tego żądania.
W cyklu zegarowym T3 zaznaczono kod rozkazu restartu RST, który czyta procesor za
pomocą magistrali danych (DBIN = H - Data Bus In). Odłożenie zawartości 16-bitowego
licznika programu (PC) na stos odbywa się poprzez 8-bitową magistralę danych w dwóch
38
krokach: starszy bajt adresowy (PCH) a następnie młodszy bajt (PCL). Zapis odbywa się opa-
dającym zboczem sygnału WR - pisz. Kolejne lokacje komórek stosu wskazuje zawartość
rejestru wskaznika stosu: odpowiednio SP-1 i SP-2. Jednocześnie z impulsem synchronizu-
jącym SYNC na magistrali danych wystawiane jest słowo statusowe. Przekazywanie zawarto-
ści licznika programu na stos sygnalizowane jest statusem nr 5 - pisz do stosu.
Na szczególną uwagę zasługuje sygnał INTE, który nie przyjmuje wysokiej wartości
mimo zakończenia cyklu rozkazowego (M3). Powrót do cyklu pobrania sygnalizowany przez
wysoką wartość wewnętrznego sygnału RM1 (odpowiednik D6 = M1 w słowie statusowym).
Sygnał INTE zostaje zablokowany na wartości niskiej przez cały czas trwania obsługi prze-
rwania (INTE = L), umożliwiając w ten sposób zakończenie procedur przerywających.
Można również spowodować, że w trakcie obsługi żądania przerywania sygnał zezwo-
lenia na przerwanie będzie wystawiany (INTE = H). W tym celu należy użyć rozkaz EI -
zezwolenia na przerwanie. W dowolnym miejscu programu można również użyć rozkazu DI -
przerwanie nieaktywne, co jest równoznaczne z programowym ustawieniem wartości INTE =
L. Omówione zasady obsługi żądania przerwania obowiązują również w innych procesorach
8-bitowych oraz w większości procesorów 16-bitowych. Sekwencja operacji zilustrowanych
przebiegami czasowymi na rys. 1.23 jest realizowana automatycznie przez procesor przed
podjęciem programu związanego z wykonaniem procedur przerywających.
Zamiast rozkazu RST - restart po sygnale INT można zastosować rozkaz wywołania
CALL. Kod tego rozkazu wystawia urządzenie żądające przerwanie, a wtedy procesor zapyta
o adres lokacji pamięci zawierającej program jego obsługi, do którego odwołuje się kod
rozkazu CALL. Jest to metoda wywołania procedur przerywających z pełną adresacją restar-
tu, która została szczegółowo omówiona w dalszej części podręcznika przy okazji opisu zasad
działania sterownika priorytetów przerwań.
Innym sposobem wywołania adresu restartu po przerwaniu jest stała jego lokacja. Jeśli
na takim przewodzie żądania przerwania pojawi się sygnał aktywny, to obsługa programu dla
tego przerwania rozpoczyna się zawsze od tej samej lokacji pamięci (stały adres).
Współczesne mikroprocesory są również wyposażone w mechanizmy przesyłu danych
do pamięci i ich odczytu z pamięci operacyjnej z pominięciem procesora. Jest to tzw. bezpo-
średni dostęp do pamięci (DMA - Direct Memory Access). Do jednostki sterującej omawiane-
go procesora podłączono dwie linie sterujące: HOLD i HOLDA. Jeśli linia wejściowa HOLD
= H, do procesora zostaje przekazane żądanie trzymania. Jest ono równoznaczne z ustawie-
niem linii adresowych procesora, linii danych oraz linii pisz/czytaj w trzeci stan, czyli stan
39
wysokiej impedancji. Na rys. 1.24 pokazano przebiegi czasowe wybranych sygnałów proce-
sora ilustrujące zasady pracy procesora w trybie DMA.
Procedurę przejścia do stanu trzymania rozpoczyna żądanie trzymania sygnałem
HOLD Request. Ponieważ elementy wewnętrzne procesora nie biorą udziału w procesie
transmisji danych w trybie DMA, trzymanie może być podjęte w trakcie realizacji cyklu
rozkazowego - przed jego zakończeniem. Odłączenie procesora od magistral zostaje poprze-
dzone badaniem gotowości danych do transmisji sprawdzeniem, czy READY = H. Jeśli ten
warunek jest spełniony procesor wystawia HLDA = H, potwierdzając tym samym przejście
do stanu trzymania.
M M
n n+1
T1 T3 (T4)*
T2 Tw (T5)* T T1 T2
f
1
f
2
A
15- 0
zmienne
D
7- 0
żądanie
HOLD
HOLD
READY
HOLD F/F
HLDA
Rys 1.24. Przebiegi czasowe podstawowych sygnałów przykładowego procesora
dla obsługi HOLD=H
Linie adresowe i linie danych są sterowane za pośrednictwem specjalizowanego ele-
mentu przepisującego dane ze zródła informacji do jej odbiornika (sterownik DMA). Proces
bezpośredniej transmisji kończy poziom niski na linii HOLD żądania trybu DMA.
Wzajemne zależności opisanych wyżej zasad realizacji cyklu rozkazowego mikropro-
cesora ilustruje sieć działań na rys. 1.25, na którym pokazano jeden cykl maszynowy proceso-
ra, zawierający od trzech do pięciu taktów zegarowych. Cykl maszynowy rozpoczęto stanem
wyzerowania procesora - RESET = H. W cyklu T2 jest badany stan dwóch sygnałów: ze-
wnętrznego READY i wewnętrznego HLTA. Sygnał READY = L oznacza zatrzymanie pracy
procesora w oczekiwaniu na dane do transmisji.
40
l
u
b
Zatrzymanie pracy procesora może również spowodować rozkaz HLT (HALT - za-
trzymanie). Jeśli procesor rozpozna rozkaz HLT ustawia wewnętrzny przerzutnik zatrzymania
w stan HLTA = H. Jeśli jest aktywne READY lub HLTA, procesor ustanawia stan oczekiwa-
nia, Tw (czekaj) lub TwH (czekaj w stanie HLT). Jeśli zostanie zakończone oczekiwanie (Tw)
badany jest stan sygnału HOLD.
Jeśli HOLD = H, następuje przejście do stanu trzymania i transmisji danych poza tą
siecią działań. Gdy HOLD zmieni wartość na nieaktywną, rozkaz zostanie dokończony.
W zakończeniu cyklu maszynowego badany jest stan realizacji cyklu rozkazowego -
czy rozkaz został zakończony. Jeśli nie został wykonany ostatni krok w cyklu rozkazowym
jest realizowany następny cykl maszynowy.
Gdy procesor wykonał ostatni cykl maszynowy w cyklu rozkazowym, wystawiony
zostaje INTE = H i badany jest stan jego jednoczesności z INT = H. Zgodność tych dwóch
sygnałów oznacza podjęcie nowego cyklu rozkazowego w programie obsługi żądania prze-
rwania. Przy aktywnym HLTA procesor wchodzi w stan zawieszenia (TwH), z którego można
wyjść tylko przez przerwanie. W ten sposób działa większość programów zawierających
szereg opcji wybieranych alternatywnie z MENU użytkownika. Zakończenie jednego z pro-
gramów kończy przejście do stanu oczekiwania na kolejne wywołanie (przerwanie) z pulpitu
operatora. W stanie HALT można oczywiście przejść do trybu DMA, a po jego zamknięciu
nastąpi powrót do zatrzymania - HALT.
Omówione zasady współdziałania bloków mikroprocesora oraz relacje czasów wyko-
nania podstawowych procedur nie wyjaśniają wszystkich mechanizmów działania systemów
mikroprocesorowych. Jest to jedynie opis reakcji procesora na stany aktywne trzech podsta-
wowych sygnałów: żądania przerwania (INT), żądania trzymania (DMA) oraz badania stanu
gotowości danych (Ready) do transmisji. Zasady wykorzystania mechanizmów przerwań w
procesorach można zaliczyć do elementów kluczowych metod projektowania oprogramowa-
nia użytkowego i oprogramowania systemowego.
Użytkownik oprogramowania często korzysta z przerwań procesora, nie zdając sobie
sprawy z tego faktu. Miarą jakości procesora jest zwykle poziom rozbudowania systemu
przerwań.
41
RESET
T1
READY+HLTA
T2
TAK
HLTA
READY HLTA HOLD INTA
NIE
READY
INT INTE
READY
Tw T
wH
HOLD
SET
TAK SET
HOLD
HOLD F/F
HOLD F/F
T
3
HOLD
T
4
faza
HOLD
HOLD
T
5
RESET
HOLD F/F
TAK
HOLD F/F
SET
NIE
RESET
HLTA
NIE ROZKAZ
WYKONANY
TAK
HOLD
NIE
INT INTE
RESET
HOLD F/F
TAK
SET
INT F/F
Rys. 1.25. Sieć działań przykładowego mikroprocesora 8-bitowego.
42
1.5. Techniki adresacji
___________________________________________________________
Program pracy komputera jest zapisany w postaci ciągu wektorów binarnych zapisa-
nych ( ulokowanych ) w pamięci wewnętrznej lub zewnętrznej procesora, czy komputera.
Jest to ciąg wektorów binarnych, zwanych rozkazami, kodujących operacje na danych binar-
nych. Zasady uporządkowania programu regulują formaty rozkazów oraz mechanizmy proce-
sora realizacji rozkazów, określające zasady dostępu do wektorów zapisanych w pamięci
operacyjnej.
Dla bardziej komunikatywnego zapisu kodów binarnych programu maszynowego
stosuje się zapis szesnastkowy, zwany również heksadecymalnym (hexadecimal). Heksade-
cymalne odpowiedniki kodu binarnego przedstawiono w tab. 1. 3.
Tablica 1.3
Zapis szesnastkowy kodu binarnego
Kod Kod Kod Kod
binarny szesnastkowy binarny szesnastkowy
0 0 0 0 0 1 0 0 0 8
0 0 0 1 1 1 0 0 1 9
0 0 1 0 2 1 0 1 0 A
0 0 1 1 3 1 0 1 1 B
0 1 0 0 4 1 1 0 0 C
0 1 0 1 5 1 1 0 1 D
0 1 1 0 6 1 1 1 0 E
0 1 1 1 7 1 1 1 1 F
Dane do operacji są zawarte w pamięci operacyjnej, w rejestrach otaczających proce-
sor lub buforach pośredniczących (sprzęgających) usytuowanych między procesorem i urzą-
43
dzeniami WE/WY. Lokację wektorów binarnych definiuje się za pomocą określonych kombi-
nacji wartości zmiennych adresowych, a długość słowa adresowego określa liczbę adresowa-
nych komórek informacji. Najprostsza deklaracja bieżącego adresu polega na podaniu w
programie wartości wszystkich bitów adresu. Jest to jednak sposób najkosztowniejszy ponie-
waż zajmuje najwięcej pamięci operacyjnej a czas realizacji takiego programu jest najdłuż-
szy. W celu skrócenia zapisu procedur adresacji wprowadzono metody pośredniego określa-
nia adresu bieżącego operandu. W procesorach 8-bitowych zastosowano kilka metod określa-
nia adresów, z których korzystają również procesory bardziej zaawansowane (16-, 32- i 64-
bitowe). Niemniej każda nowa generacja procesorów wnosi nowe sposoby określania adre-
sów. Są to celowe zabiegi producentów układów elektronicznych i producentów oprogramo-
wania czynione w celu przyspieszenia realizacji procedur przetwarzających komputera.
W procesorach 8-bitowych można wyróżnić następujące metody adresacji wektorów
binarnych (komórek pamięci lub rejestrów):
" adresacja bezpośrednia,
" adresacja natychmiastowa,
" adresacja pośrednia,
" adresacja indeksowana,
Adresacja bezpośrednia
Adresacja bezpośrednia (direct addressinig) polega na podaniu pełnego adresu ope-
randu bezpośrednio w programie. Jest on bezpośrednim identyfikatorem lokacji komórki
pamięci lub rejestru komputera. Na rys 1.26 pokazano przesunięcie danych między rejestrami
wewnętrznymi procesora.
BC
11110000 11110000
DE 10101010 A
10101010 10101010
MOV A,D
HL 00001111 00001111
przesunięcie do A zawartości D
Rys. 1.26. Przykład adresacji bezpośredniej, przesunięcia danych
z rejestru D do rejestru A.
Rozkaz MOV (przesuń) oznacza przesunięcie danych z jednej lokacji pamięci do
drugiej; z rejestru D do rejestru akumulatorowego A. Podobnie jest realizowane przesunięcie
44
danych między dowolnymi rejestrami wewnętrznymi. Na rys. 1.27 pokazany został inny
przykład adresacji bezpośredniej przesyłu danych z pamięci do rejestru akumulatorowego.
PAO
0041 H 01010101
kopiowanie
00001111 A
0042 H 00001111
LDA 0042H ;
0043 H 11110000
16-bitowy adres wskazuje
0044 H 11001100
komórkę pamięci: 0042H
0045 H 11111111
adresy
Rys. 1.27. Przykład adresacji bezpośredniej komórki pamięci.
Adresacja natychmiastowa
Umieszczenie danych w komórce pamięci następującej po kodzie operacji jest nazy-
wane adresacją natychmiastową (immediate addressing). To znaczy, w polu operandu wystę-
pującym po kodzie operacji zapisane są dane dla tej operacji. Jest to najprostszy sposób adre-
sacji operandów polegający na ich zapisie bezpośrednio w ciągu wektorów binarnych pro-
gramu. Rozkaz MVI r dokonuje przesunięcia bajtu danych z pamięci do wskazanego rejestru
r. Zasadę realizacji tego trybu adresacji ilustruje przykład na rys. 1.28.
PAO
MVI A,D2H;
0042 H 00111110
A
0043 H 11000010 11000010
przesunięcie
0044 H
do rejestru A
adresy
Rys. 1.28. Przykład operacji przesunięcia drugiego bajtu do akumulatora
Adresacja pośrednia
Adresacja pośrednia (indirect addressing) dla procesorów 8-bitowych, polega na
wskazywaniu lokacji operandu za pomocą zawartości określonego rejestru wewnętrznego
45
procesora (rys. 1.29). Szczególnym przypadkiem rozkazu przesunięć jest MOV M. Dotyczy
on przesunięcia zawartości dowolnego rejestru wewnętrznego procesora do rejestru (M) w
pamięci operacyjnej, lokalizowanego zawartością pary rejestrów H, L. Rejestry H i L po
uprzednim załadowaniu spełniają funkcję wskaznika adresu pośredniego komórki pamięci, do
której przesuwamy zawartość wskazanego rejestru.
zawartość rejestru A
po wykonaniu operacji
PAO
00001111 A
0042 H 00001111 00000000 01000010 H,L
0043 H 11110000 MOV A,[HL] ;
adresy
Rys. 1.29. Przykład adresacji pośredniej zawartością HL
wskazanego rejestru procesora.
Adresacja indeksowana
Adres indeksowany lub indeksowy (indexed addressing) obliczamy jako sumę poda-
nego w rozkazie adresu (adr) i zawartości rejestru indeksowego RI, np:
MOV r, adr[RI] ; oznacza wpisanie do rejestru r zawartości komórki
pamięci adresowanej sumą adresu adr i [RI].
Na rys. 1.30 podano przykład adresacji indeksowanej z indeksem [RI]=3 dla transferu
danych z komórki pamięci o adresie 44H do rejestru wewnętrznego r.
46
PAO
adr
r
01010101 11001100
0041H
0042 H 00001111
0043 H 11110000
0044H 11001100 00000011 RI
0045H 11111111
MOV r, adr[RI] ;
adr=0041H+[RI]=44H
adresy
[RI] = 3H
Rys. 1.30. Przykład adresacji indeksowanej dla transmisji
danych z pamięci do rejestru procesora.
Ten tryb adresacji zaprojektowano tylko w jednym procesorze 8-bitowym Z80 firmy
Zilog. Oprócz wymienionych czterech podstawowych trybów adresacji spotykamy różne
kombinacje tych technik. Na przykład w mikroprocesorach firmy Intel można spotkać kombi-
nację adresacji pośredniej z indeksowaną. W tym celu procesor wyposażono w specjalny
rejestr bazowy BP (Base Pointer) - wskaznik bazy.
Różnorodność użytych trybów adresacji poprawia efektywność obliczeń komputera i
zmniejsza zajętość pamięci operacyjnej. Przykładem 8-bitowego procesora bardziej sprawne-
go jest Z80. Dzięki bogatej liście rozkazów i dziesięciu różnych trybów adresacji wprawny
programista może uzyskać program zajmujący o 40% pamięci mniej niż program opracowany
dla procesorów 8080 czy 8085 firmy Intel.
47
1.6. Autokod procesorów 8-bitowych
___________________________________________________________
Pisanie programu na poziomie wektorów binarnych nazywamy kodowaniem progra-
mu. Program realizowany binarnie w takt zegara mikroprocesora jest nazywany mikropro-
gramem albo ciągiem mikrooperacji. Program zapisany w formie binarnej (kod maszynowy
programu) jest budowany w oparciu o listę rozkazów procesora. Kody binarne programu
zostają przetworzone na ciąg mikrooperacji procesora. Każdy z procesorów ma własną listą
kodów operacji zwaną autokodem, stąd zapis programu w formie binarnej będzie inny dla
każdego procesora. Większość procesorów 8-bitowych operuje 16-bitowym słowem adreso-
wym (A0-A15) i 8-bitową magistralą danych (D0-D7). Informacja binarna jest umieszczona w
zewnętrznej pamięci operacyjnej lub w rejestrach wewnętrznych mikroprocesora.
Listę rozkazów mikroprocesorów 8080/85 można podzieli na cztery zasadnicze grupy:
" rozkazy przesyłań danych,
" rozkazy arytmetyczno - logiczne,
" rozkazy rozwidleń i wywołań,
" rozkazy wejściowo-wyjściowe i sterujące.
Oznaczenia:
rl, r2, r - rejestry A, B, C, ..., L;
DDD - bity kodu rejestru przeznaczenia (D - destination),
48
S S S - bity rejestru zródłowego (S - source).
Kody binarne rejestrów D i S przedstawiono w tab. 1.4 a). Rejestr M (memory) jest
lokalizowany w pamięci operacyjnej pod adresem wskazywanym przez zawartość pary reje-
strów HL. Rozkazy dla operandów 16-bitowych wykorzystują pary rejestrów, kodowanych
zgodnie z zapisem tabl. 1.4 b).
Tablica 1.4
Kody rejestrów wewnętrznych procesora
a). D D D b).
lub Rejestr RP Rejestr
S S S
1 1 1 A 0 0 B, C
0 0 0 B 0 1 D, E
0 0 1 C 1 0 H,L
0 1 0 D 1 1 S, P
0 1 1 E
1 0 0 H
1 0 1 L
1 1 0 (M)
Przez RP oznaczono kody pary rejestrów wewnętrznych procesora. Każdy rozkaz
składa się z kodu oraz operandów, na których operacja jest wykonywany. Jest on kodowany
pierwszymi bitami bajtu. Bajty następne, związane z rozkazem, definiują adres operandu.
Zapis binarny programu, jest formą czytaną bezpośrednio przez procesor, jednak kod tak
zapisanego programu pozostaje nieczytelny dla programisty. Aby ułatwić zapisu i analizę
programu, wprowadzono formy symboliczne rozkazów. Kod heksadecymalny był pierwszym
etapem formalizacji zapisu. Dalszym ułatwieniem dla programisty było wprowadzenie zapi-
sów symbolicznych używających pewnych znaków mnemonicznych, jak MOV r1,r2 - ozna-
czające przesunięcie zawartości rejestru r2 do rejestru r1, LDA adr jest operacją załadowania
zawartości akumulatora do komórki pamięci pod wskazanym adresem (adr). Język progra-
mowania na poziomie adresów symbolicznych nazwano językiem asemblera lub językiem
kodów mnemonicznych procesora. Pisanie programów na tym poziomie nazywamy kodowa-
niem programu lub programowaniem w autokodzie maszyny. W trakcie objaśniania funkcji i
zasad realizacji rozkazów maszynowych można spotkać pewne formy zapisu umownego
(symbolicznego), w którym używa się następujących skrótów:
A - rejestr akumulatora,
adr - 16-bitowy adres,
dane - 8-bitowe dane,
dane 16 - 16-bitowe dane,
49
bajt 2, bajt 3 - drugi, trzeci bajt rozkazu,
port - 8-bitowy adres rejestru WE/WY,
rh - rejestr przyjmujący lub zawierający starszy bajt informacji,
rl - rejestr przyjmujący lub zawierający młodszy bajt informacji,
SP - wskaznik stosu,
PC - licznik programu,
CY - przeniesienie, pożyczka,
! - przesłanie,
rp/RP - oznaczenie stwierdzające, że rozkaz dotyczy pary rejestrów
mikroprocesora,
(R) - zawartość rejestru R,
[R] - zawartość komórki pamięci wskazywana zawartością R.
Formaty rozkazów
W zapisie rozkazów mikroprocesorów posłużono się pewnymi regułami, których
poznanie znacznie ułatwia operowanie autokodem.
A. Przesył danych
MOV dotyczy przesyłu danych między dwoma wskazanymi rejestrami.
Zapis: MOV r1, r2
Działanie: r1: r1!(r2) - jest zapisem przesyłania zawartości rejestru r2 do rejestru
r1.
Format: 01 DDD SSS
Kod: W miejsce bitów D i S podstawiamy wartości kodujące odpowiednie
rejestry zródła i przeznaczenia danych (tabl.1.4a)) i na tej podstawie
wyznaczamy wartość binarną lub heksadecymalną kodu rozkazu. Np.:
przesłanie A!(B) zapiszemy binarnie: 01111000 lub heksadecymalnie
78H.
MVI Dotyczy przesłania danych zawartych w drugim bajcie instrukcji do
wskazanego rejestru.
Zapis: MVI r, dane
Działanie: r!dane - oznacza przesłanie drugiego bajtu rozkazu do, wskazanego
kodem rozkazu, rejestru.
50
Format: 00 DDD 110
dane
Kod: W miejsce D wstawiamy kod rejestrów przeznaczenia i na tej podsta-
wie wyznaczamy wartość binarną lub heksadecymalną kodu rozkazu.
Np. przesłanie bajtu danych do rejestru B można zapisać binarnie:
00 000 110 lub heksadecymalnie: 06H.
LXI Dotyczy przesyłu danych zawartych w drugim i trzecim bajcie do pary
rejestrów wskazanych rozkazem.
Zapis: LXI rp, dane 16
Działanie: RP ! dane 16 oznacza przesył dwóch, następujących po bajcie kodu
rozkazu, bajtów danych do zadanej pary rejestrów.
Format: 00 RP 0001
dane - młodszy bajt
dane - starszy bajt
Kod: W miejsce RP wstawiamy kod pary rejestrów przeznaczenia danych
(tabl.1.4 b). Np. przesył B, C !dane 16 zapisujemy binarnie:
00000001 lub heksadecymalnie: 01H.
LDA Dotyczy przesył danych do akumulatora, zawartych w komórce pamięci
lokalizowanej drugim i trzecim bajtem
Zapis: LDA adr
Działanie: A!((bajt 3), (bajt 2)),
Format: 00111010
Kod: Jest to rozkaz o stałym kodzie 3AH.
Operacje przesyłu danych do komórki pamięci lokalizowanej adresem zadanym za-
wartością pary rejestrów ((RP)) wyrażają rozkazy przedstawione w tabl. 1.5. Zawartości
rejestrów wyszczególnionych z prawej strony są wpisywane do komórek pamięci wskazywa-
nych zawartościami rejestrów umieszczonych w kwadratowych nawiasach [ ].
Załadowanie rejestrów zawartością komórek pamięci wskazywanych zawartościami
wskazywanych rejestrów odbywa się za pośrednictwem grupy rozkazów przedstawionych w
tabl. 1.6.
Tablica 1.5.
Adresacja parą rejestrów, transmisja do pamięci
51
Rozkaz Kod H Operacje
STAXB 02
[B, C]!(A)
STAD 12
[D, E]!(A)
SHLD adr 22
[bajt 3, bajt 2 ]!(L)
[(bajt 3, bajt 2)+1]!(H)
STA adr 32
[bajt 3, bajt 2]!(A)
Tablica 1.6.
Adresacja parą rejestrów, transmisja do rejestru
Rozkaz Kod H Operacje
LDAXB 0A
A ![B, C]
LDAXD 1A
A ![D, E]
L ![bajt 3, bajt 2]
LHLD adr 2A
H ![(bajt 3, bajt 2)+1]
LDA adr 3A
A ![bajt 3, bajt 2]
XCHG Dotyczy wymiany zawartości między rejestrami H, L i D, E
(odpowiednio)
Zapis: XCHG
Działanie (HL) "! (DE), wymiana informacji,
Format: 11101011
Kod: Rozkaz o stałym kodzie - EBH
B. Rozkazy arytmetyczne
Większość mikroprocesorów 8-bitowych wykonuje tylko cztery operacje arytmetycz-
ne:
- dodawanie (ADD, ADC, DAD),
- odejmowanie (SUB, SBB),
- zwiększenie zawartości rejestru (INR, INX),
- zmniejszenie zawartości rejestru (DCR, DCX).
ADD Oznacza dodanie do zawartości akumulatora zawartości wskazanego
rejestru (r), gdzie r jest lokalizowany kodem bitów S.
Zapis: ADD r
Działanie: A !(A) + (r), akumulacja danych.
Format: 10000 SSS
52
Kod: W miejsce S wstawiamy wartości odpowiadające odpowiednim
rejestrom zródła informacji, wtedy:
r B C D E H L M A
kod H 80 81 82 83 84 85 86 87
ADC Oznacza dodanie do zawartości akumulatora (A) zawartości wskaza-
nego rejestru (r) i bitu przeniesienia (CY). Rejestr r jest lokalizowany
kodem bitów S.
Zapis: ADC r
Działanie: A !(A) + (r)+ (CY)
Format: 10001 SSS
Kod: W miejsce S wstawiamy wartości odpowiadające odpowiednim
rejestrom zródła informacji
r B C D E H L M A
kod H 88 89 8A 8B 8C 8D 8E 8F
ACI Oznacza dodanie do zawartości akumulatora zawartości drugiego
bajtu następującego po kodzie rozkazu. Do pozycji najmłodszej doda-
wany jest bit przeniesienia (CY).
Zapis: ACI dane
Działanie: A ! (A) + (bajt 2) + (CY), gdzie dane = bajt 2
Format: 11001110
dane
Kod: Jest to rozkaz o stałym kodzie - CEH
DAD Oznacza dodanie do rejestrów H i L zawartości wskazanej pary
rejestrów
Zapis: DAD rp
Działanie: H, L ! (H,L) + (rp)
Format: 00 RP 1001
Kod: Para rejestrów jest lokalizowana kodem bitów RP.
RP B D H SP
kod H 09 19 29 39
SUB Oznacza odejmowanie od zawartości akumulatora zawartości
wskazanego rejestru
Zapis: SUB r
53
Działanie: A ! (A) - (r).
Format: 10010 SSS
Kod: Rejestr r lokalizowany jest bitami S:
r B C D E H L M A
kod H 90 91 92 93 94 95 96 97
Lokalizacja M w rozkazie SUB M jest taka sama jak w rozkazach INR
M czy DCR M.
SBB Oznacza odejmowanie od zawartości akumulatora zawartości wskaza-
nego rejestru z uwzględnieniem pożyczki
Zapis: SBB r
Działanie: A ! (A) - (r) - (CY)
Format: 10011 SSS
Kod: Rejestr r jest lokalizowany bitami S:
r B C D E H L M A
kod H 98 99 9A 9B 9C 9D 9E 9F
INR Oznacza zwiększenie zawartości wskazanego rejestru r o 1
Zapis: INR r
Działanie: r ! (r) + 1.
Format: 00 DDD 100
Kod: Rejestr r jest lokalizowany kodem bitów rejestrów przeznaczenia D:
r B C D E H L M A
kod H 04 0C 14 1C 24 2C 34 3C
Na uwagę zasługuje rozkaz INRM o kodzie 34H, w którym M jest rejestrem pamięci
lokalizowanym zawartością pary rejestrów H i L. Operację tę zapisujemy: ((H, L))!((H,
L))+1; co oznacza rozkaz zwiększenia o 1 zawartości komórki pamięci wskazywanej zawar-
tością rejestrów HL.
DCR Oznacza zmniejszenie zawartości wskazanego rejestru o 1
Zapis: DCR r
Działanie: r !(r)-1
Format: 00 DDD 101
Kod: Rejestr r jest lokalizowany przez bity rejestrów przeznaczenia D:
r B C D E H L M A
kod H 05 CD 15 1D 25 2D 35 3D
54
INX Oznacza zwiększenie zawartości pary rejestrów o 1
Zapis: INX rp
Działanie: rp ! (rp) + 1
Format: 00 RP 1011
Kod: Para rejestrów lokalizowana jest kodem RP:
RP BC DE HL SP
kod H 03 13 23 33
DCX Oznacza zmniejszenie zawartości pary rejestrów lokalizowanej bitami
RP rozkazu o 1.
Zapis: DCX rp
Działanie: rp ! (rp) - 1
Format: 00 RP 1011
Kod: RP B D H SP
kod H 0B 1B 2B 3B
Oprócz wymienionych operacji arytmetycznych dokonywanych na zawartościach
akumulatora i wskazanych rejestrów r lub rp istnieje możliwość wykonania tych samych
operacji na zawartościach akumulatora i bezpośrednio następującym po kodzie rozkazu bajcie
danych.
ADI Oznacza dodawanie do zawartości akumulatora drugiego bajtu rozkazu
Zapis: ADI dane
Działanie: A ! (A) + (bajt2)
Format: 11000110
Kod: Jest to rozkaz o stałym kodzie: C6H.
Podobnie działają trzy inne rozkazy arytmetyczne, jak:
ACI dane - A ! (A) + (bajt 2) + (CY). Kod rozkazu: CEH.
SUI dane - A ! (A) - (bajt 2). Kod rozkazu: 06H.
SBI dane - A ! (A) - (bajt 2) - (CY). Kod rozkazu: DEH.
C. Rozkazy dla operacji logicznych
Omówione wyżej rozkazy oraz zasady ich tworzenia ilustrują zasady kodowania
mikrooperacji przesyłu danych i wykonywania obliczeń arytmetycznych w procesorach 8-
bitowych. Te same reguły obowiązują przy kodowaniu operacji dla procesorów 16- czy 32-
55
bitowych. Różnica dotyczy możliwości ilościowych tych procesorów, o czym będzie mowa w
kolejnych rozdziałach podręcznika. Jeśli przeanalizujemy zasady działania algorytmów obli-
czeń stwierdzimy obecność ogniw decyzyjnych. Następny krok będzie uzależniony od wyni-
ków przetwarzania w kroku poprzednim. Poniżej omówiono cztery podstawowe operacje
logiczne i odpowiadające im rozkazy dla procesorów 8-bitowych, tj.: ANA, XRA, ORA i
CMP, bardzo często współpracujących z rozkazami dla rozwidleń i wywołań warunkowych
podprogramów.
ANA Oznacza iloczyn logiczny zawartości akumulatora z zawartością
wskazanego rejestru
Zapis: ANA r
Działanie: A ! (A) '" (r).
Format: 10100 SSS
Kod: r B C ... M A
kod H A0 A1 ... A6 A7
XRA Oznacza sumę logiczną zawartości rejestru akumulatorowego i
zawartości wskazanego rejestru
Zapis: XRA r
Działanie: A ! (A) " (r).
Format: 10101 SSS
Kod: r B C ... M A
kod H A8 A9 ... AE AF
ORA Oznacza sumę logiczną zawartości rejestru akumulatorowego i
zawartości wskazanego rejestru:
Zapis: ORA r
Działanie: A ! (A) (" (r).
Format: 10110 SSS
Kod: r B C ... M A
kod H B0 B1 ... B6 B7
CMP Oznacza odjęcie zawartości wskazanego rejestru od zawartości
akumulatora
Zapis: CMP r
56
Działanie: (A) - (r) przy nie zmienionej zawartości akumulatora. Równość
porównywanych operandów sygnalizowana jest wartością 1 na bicie C
rejestru flagowego. C = 1, gdy (A)<(r)
Format: 10111 SSS
Kod: r B C ... M A
kod H B8 B9 ... BE BF
Możliwe jest też wykonywania operacji logicznych na zawartości akumulatora i na
zawartości drugiego bajtu rozkazu:
ANI dane - A ! (A) '" (bajt 2). Kod rozkazu: E6H.
XRI dane - A ! (A) " (bajt 2). Kod rozkazu: EEH.
ORI dane - A ! (A) (" (bajt 2). Kod rozkazu: F6H.
CPI dane - (A) - (bajt 2). Kod rozkazu: FEH.
Zawartość akumulatora pozostaje bez zmian, a rezultat porównania sygnalizowany
jest na bitach wskaznikowych - Z i CY.
D. Rozkazy dla rozgałęzień programów
Rozgałęzienia programów oznaczają wybór wariantu obliczeń w punkcie decyzyjnym.
Decyzja dla kroku następnego zależy od wyniku kroku poprzedniego. Tego typu operacje są
wykonywane przy przetwarzaniu zadań numerycznych zapisanych w dowolnym języku pro-
gramowania. Różnica polega jedynie na sposobie zapisu tego samego problemu. Rozgałęzie-
nia programów stosuje się przy przejściach do realizacji podprogramów lub przy wyborze
wariantu programu. Do tej grupy należą: skok (JMP), wywołania adresów (CALL), rozkaz
powrotu (RET) i rozkaz restartu (RST). Wybór wariantu programu zależy od spełnienia okre-
ślonych warunków. W szczególnym przypadku skok może być bezwarunkowy (JMP adr)
zwany również skokiem z warunkiem zerowym.
W rozkazach warunkowych procesor korzysta z informacji zawartej w rejestrze fla-
gowym charakteryzującej wynik operacji poprzedniej. W rozkazach warunkowych proceso-
rów 8-bitowych firmy Intel (oraz Zilog) badania rejestrów flagowych zakodowano na trzech
bitach CCC zdefiniowanych w tabl. 1.7.
JMP Oznacza bezwarunkowy skok do komórki pamięci adresowanej drugim
i trzecim bajtem rozkazu.
Zapis: JMP adr
Działanie: PC!(bajt 3, bajt 2).
57
Format: 11000011
Kod: Rozkaz o stałym kodzie - C3H.
Skoki warunkowe:
JNZ, JZ, JNC, JC, JPO, JPE, JP i JM,
o kodach odpowiednio: C2, CA, D2, DA, E2, EA, F2, FA.
Odnoszą się one do warunków zakodowanych na bitach CCC zawartych w
pierwszym bajcie rozkazu:
Format rozkazów skoków :
11 CCC 010
bajt młodszy
bajt starszy
CALL Jest to rozkaz bezwarunkowy o podobnym działaniu jak skok JMP adr,
z tym że w przypadku CALL następuje przekazanie do stosu zawarto-
ści licznika programu, czego nie wykonuje procesor w trakcie realizacji
rozkazu JMP. Procesor wykonuje te same operacje jak przy żądaniu
przerwania. Powrót z wywołanego podprogramu wykonuje jednobajto-
wy rozkaz RET, który zdejmuje ze stosu zawartość licznika programu z
adresem komórki miejsca przerwania.
Zapis: CALL adr
Działanie: [SP]! (PCH ), [SP-1]! (PCL), PC ! (bajt 3, bajt 2),
Format: 11001101
Kod: Jest to rozkaz o stałym kodzie CDH.
Wywołania warunkowane:
CNZ, CZ, CNC, CC, CPU, CPE, CP i CM
o kodach odpowiednio: C4, CC, D4, DC, E4, EC, F4 i FC
mają takie samo znaczenie jak odpowiednie skoki warunkowe z taką samą
uwagą jak dla rozkazu CALL.
RET Oznacza powrót bezwarunkowy do programu, którego adres jest określany
przez zawartość rejestrów stosu, wskazywanych wskaznikiem stosu.
Zapis: RET
Działanie: (PCL) ! [SP] i (PCH ) ! [SP+1]
11001001
Format:
Kod: Rozkaz o stałym kodzie - C9H.
58
Powroty warunkowe:
RNZ, RZ, RNC, RC, RPO, RPE, RP i RN,
o kodach odpowiednio: C4, CC, D4, DC, E4, EC, F4, FC.
Uwarunkowania powrotu są takie same jak dla poprzednio omówionych
rozkazów warunkowych.
Restart
Obsługa żądania przerwania została omówiona przy okazji dyskusji zasad działania
sygnałów sterujących mikroprocesora 8-bitowego. W wyniku potwierdzenia przyjęcia żąda-
nia INT (INTR) urządzenie które wysłało sygnał INT= H, otrzymuje sygnał INTA = H po-
twierdzający gotowość restartu procesora od komórki pamięci zawierającej początek procedu-
ry przerywającej. Lokacja tego restartu zostaje wskazana rozkazem RSTn, czytanym na magi-
strali danych procesora. Na rys 1.31 pokazano tablicę ośmiu restartów mikroprocesorów
zastosowaną w procesorach 8-bitowych firmy Intel i firmy Zilog. W podobny sposób działa
mechanizm obsługi restartów dla procesorów wyższej generacji (INT), dlatego temu zagad-
nieniu poświęcono nieco więcej uwagi. Rozkaz jest kodowany na pozycjach NNN, które
określają osiem lokacji restartu, po osiem bajtów w każdym bloku.
RST Oznacza programowe wywołanie jednej z ośmiu lokacji restartów (odpowie-
nio do żądania przerwania sygnałem INT).
Zapis: RSTn
Działanie: ((SP)) ! (PCH ), ((SP-1)) ! (PCL), PCH!00H, PCL!(00NNN000)
Format:
7 6 5 4 3 2 1 0
1 1 N N N 1 1 1
Kod:
RST 0 1 2 3 4 5 6 7
kod H C7 CF D7 DF E7 EF F7 FF
Pozycje NNN kodu rozkazu RST określają osiem lokacji restartu.
59
Lokacja rejestru
(w pamięci)
RSTO
O
RST1
8
TRAP
RST2
RST7,5
16
RST3
RST6,5
24
RST4
RST5,5
32
36
RST5
40
44
RST6
48
52
RST7
RST 56
60
Rys. 1.31. Tablica restartów procesorów 8-bitowych firmy Intel
Na rys. 1.32 przedstawiono zasadę wywołania podprogramu przerywającego dla
procesora 8-bitowego.
PC
pola dla RSTn
RST C3 k Podprogram obsługi
przerwania
Adr L k+ 1
k+ 2
Adr H
k+ 8
Rys. 1.32. Procedura wywołania podprogramu przerywającego
E. Rozkazy specjalne
Rozkazy specjalne są związane bezpośrednio z operacjami arytmetycznymi, choć nimi
nie są. Do tej grupy można zaliczyć rozkazy:
DAA, CMA, STC, CMC oraz RLC, RRC, RAL i RAR.
DAA - zamiana operacji binarnych na dziesiętne. Kod rozkazu: 27H.
CMA - dopełnienie zawartości akumulatora: A ! (A). Kod rozkazu: 2FH.
STC - ustawienie bitu przeniesienie: CY ! 1. Kod rozkazu: 37H
CMC - dopełnienie wartości bitu przeniesienia: CY! (CY). Kod rozkazu: 3FH
60
Przesunięcia zawartości akumulatora reprezentują następujące rozkazy:
Rozkaz Kod H Operacje
RLC 07
An+1! (An), A0 ! (A7), CY! (A7)
RRC 0F
An ! (An+1), A7 ! (A0), CY! (A0)
RAL 17
An+1! (An), CY! (A7), A0 ! (CY)
RAR 1F
An ! (An+1), CY! (A0), A7 ! (CY)
F. Rozkazy dla sterowań i urządzeń WE/WY
Ta grupa rozkazów służy do obsługi urządzeń wejściowo-wyjściowych, obsługi stosu
i rejestru flagowego.
PUSH Oznacza przesłanie dwóch bajtów informacji do stosu adresowanego
przez zawartości rejestru wskaznika stosu SP pomniejszone odpowied-
nio 1 i o 2.
Zapis: PUSH rp
Działanie: ((SP) - 1) - starszy bajt, ((SP) - 2) - młodszy bajt, SP ! (SP)  2
Format: 1 1 R P 0 1 0 1
Kod: Kod pary rejestrów wyznaczają dwa bity RP.
RP B D H PSW
kod H C5 D5 E5 F5
POP Oznacza operację odwrotną do wywołanej przez instrukcję: PUSH rp.
Zawartość dwóch bitów stosu zostaje przekazana do wskazanej ko-
dem RP pary rejestrów.
Zapis: POP rp
Działanie: RP ! ((SP))
Format: 1 1 R P 0 0 0 1
Kod:
RP B D H PSW
kod H C1 D1 E1 F1
XHLT Dokonuje wymian zawartości pary rejestrów HL odpowiednio z
ostatnimi zawartościami stosu.
Zapis: XTHL
Kod: E3H
61
SPHL Dokonuje przesłania zawartości rejestrów H i L do rejestru SP.
Zapis: SPHL
Kod: F9H.
OUT Oznacza przesłanie bajtu informacji z akumulatora do zaadresowanego
wyjścia. Port (rejestr) wyjściowy adresowany jest słowem 8-bitowym,
następującym po bajcie kodu rozkazu.
Zapis: OUT port
Działanie: port ! (A)
Format: 110 100 11
adres wyjścia
Kod: D3H
IN Oznacza przesłanie bajtu informacji ze wskazanego 8-bitowym słowem
adresowym portu do rejestru akumulatorowego.
Zapis: IN port
Działanie: A ! (port).
Format:
110 110 11
adres wejścia
Kod: DBH.
DI Oznacza zablokowanie systemu przerwań instrukcją DI procesora od
chwili wprowadzenia do akumulatora kodu instrukcji do czasu odblo-
kowania momentu systemu przerwań
Kod: FBH, jednobajtowy rozkaz o stałym kodzie.
NOP Oznacza brak operacji. Rozkaz umieszczany najczęściej przy korekcie
programu jako wypełniacz w miejsce usuniętych rozkazów.
Kod: OCH.
HLT Jest rozkazem zatrzymywania realizacji programu, wywołując stan
czekania TwH (oczekiwanie w stanie Halt). Wyjście z tego stanu jest
możliwe tylko poprzez przerwanie (lub przez Reset).
Kod: 76H, rozkaz o stałym kodzie.
62
RIM Rozkaz obowiązujący dla procesora 8085. Jest to informacja statusowa
ładowana do akumulatora relacjonująca możliwość obsługi restartów:
RST 7,5 RST 6,5 oraz RST 5,5.
Kod: 20H. Rozkaz o stałym kodzie
RIM wprowadza do akumulatora bajt o następującym znaczeniu posz-
czególnych bitów:
Bit 7 6 5 4 3 2 1 0
SID I7,5 I6,5 I5,5 I E M7,5 M6,5 M5,5
maski dla przerwań,
zezwolenie na przerwanie,
zarejestrowane przerwania (nie zrealizowane),
szeregowe wejście informacyjne.
SID Przyjmuje wartość szeregowego sygnału wejściowego procesora o tej
samej nazwie. Bit SID umożliwia szeregowe wprowadzanie informacji
do procesora.
I7,5/6,5/5,5 - reprezentuje żądania nie zrealizowanych przerwań - nie obsłużone ze
względu na ich zamaskowanie. Linia RST 7,5 jest wyposażona w prze-
rzutnik reagujący na zbocze sygnału przerywającego. Oznacza to zapa-
miętanie przerwania przemijającego.
IE Jest sygnałem zezwolenia przerwania. Wartość 1 na tym bicie oznacza,
że przerwania są możliwe, a wartość 0 oznacza, że obowiązują zadane
maski przerwań. Warunek nie dotyczy przerwania TRAP.
M7,5/6,5/5,5 reprezentują zadane maski przerwań. Wartość 1 na wybranym bicie
oznacza, że odpowiednia pozycja RST jest maskowana. Maski przer-
wań są ustawiane rozkazem SIM.
SIM Jest to rozkaz, który służy do ustawiania maski dla przerwań procesora
8085 RST 7,5 RST 6,5 i RST 5,5.
Kod: 30H, rozkaz o stałym kodzie.
Przed użyciem w programie rozkazu SIM należy ustawić wartości 1 na
poszczególnych bitach akumulatora według następujących zasad:
Bit 7 6 5 4 3 2 1 0
SOD SOE X R 7,5 MSE M7,5 M6,5 M5,5
63
maski restartów
zezwolenie na ustawienie maski
zerowanie przerzutnika RST 7,5
zezwolenie na szeregowe wyprowadzenie danych
wyjście szeregowe
SOD Może być użyty do szeregowego wyprowadzania danych przewodem o
tym samym oznaczeniu na przewodach zewnętrznych procesora (SOD).
SOE Wartość 1 na pozycji SOE jest zezwoleniem na transmisję szeregową
danych.
R7,5 Wartość 1 na tej pozycji oznacza wyzerowanie przerzutnika żądania
przerwania RST7,5 ustawianego dynamicznie narastającym zboczem
żądania przerwania. Pozostałe wejścia przerwań są obsługiwane sta-
tycznie.
MSE Ustawienie wartości 1 na tej pozycji oznacza zezwolenie (akceptację)
na maskowanie restartów (przerwań).
M7,5/6,5/5,5 Wartości 1 na tych pozycjach oznaczają maskowanie odpowiedniego
restartu.
Język symboli mnemonicznych
Pomimo dużej szybkości wykonywania programu zapisanego binarnie język tego
poziomu jest mało użyteczny dla programisty. Przyczyną tego jest skomplikowana forma
zapisu, w której bardzo łatwo o pomyłkę. Dlatego nie używa się formy binarnej kodów ma-
szynowych jako języka programowania. Dla wygody programisty opracowano bardziej przy-
jazne formy języka programowania; wzorowane na elementach języka naturalnego. Są nimi
języki wysokiego poziomu programowania. Można jednak znalezć wiele przykładów, gdzie
niezbędne jest operowanie wektorem binarnym zapisywanym w rejestrze wewnętrznym
procesora. Dlatego opracowano język bliski schematów wewnętrznych mikrokomputera,
zwany językiem kodów mnemonicznych albo językiem asemblera. Programowanie na tym
poziomie języka sprowadza się do wykonywania operacji binarnych, zapisanych w formie
symboli mnemonicznych, dla przesłań międzyrejestrowych.
64
Kod mnemoniczny języków maszynowych zapisuje skrótem sens każdej operacji.
MOV jest skrótem z języka angielskiego: move - przesuń lub prześlij. AND jest operacją
logiczną dwóch operandów na bitach o tych samych numerach, LDA (od load - załaduj) na
które składa się LD - ładuj i A - akumulator, OUT - wyjdz lub wyprowadz na wyjście (port)
zewnętrzne, itp. Bywa jednak, że symbol mnemoniczny jakiegoś rozkazu ma mniej czytelne,
a bardziej umowne znaczenie.
Język asemblera operuje symbolami mnemonicznymi i operandami występującymi w
określonej kolejności za kodami. Ponieważ procesor czyta tylko wektory binarne, każdy inny
zapis programu musi być przetłumaczony do poziomu binarnego.
Tłumaczenie takie odbywa się automatycznie, za pomocą programu (translatora)
zwanego asemblerem. lub  ręcznie przez programistę. Przykład programu zapisanego w
języku asemblera przedstawiono poniżej. Jest to operacja załadowania akumulatora zawarto-
ścią wskazanej adresem komórki pamięci oraz dodania do niej innego wektora binarnego :
LDA 3000; (załaduj akumulator zawartością komórki pamięci o adresie 3000)
MOV B, A; (przesuń do rejestru B zawartość akumulatora)
LDA 4500; (załaduj akumulator zawartością komórki pamięci o adresie 4500)
ADD B; (operacja (A) + (B))
STA 8000; (zapisz do pamięci wynik operacji - zawartość A)
Przeanalizujmy zapis operacji załadowania zawartości komórki pod adresem 4011H:
Symbol mnemoniczny. Adres operandu Komentarz
! ! !
TEST: LDA 4011H ; załaduj akumulator
ę! ę! ę! ę! ę! ę!
etykieta dwukropek średnik
odstępy
W zapisie asemblera można wyróżnić pewien charakterystyczny szyk (format) nastę-
pujących po sobie danych. W formacie języka asemblera wyróżniono cztery pola, z tego dwa
podstawowe:
" pole kodu operacji,
" pole operandów lub adresu,
oraz dwa pola dodatkowe:
" pole etykiety,
" pole komentarza.
Zasadniczy program jest zawarty pomiędzy znakiem dwukropka a znakiem średnika.
65
Pole kodu operacji zawiera mnemoniczny skrót operacji.
Pole operandów zawiera jeden lub dwa operandy przedzielone przecinkami. Pole
operandów dla niektórych rozkazów jest puste. Wartości zapisywane w tym polu mogą rów-
nież wskazywać lokacje operandów (są adresami).
Pole etykiety występuje przed znakiem dwukropka. Etykieta zaczyna się od litery a
kończy dwukropkiem. Etykieta jest symbolicznym adresem komórki w której jest umieszczo-
ny kod binarny rozkazu/instrukcji, np: TEST - nazwa symboliczna linii programu.
Pole komentarza jest tekstem pomijanym w wersji wynikowej programu. Komentarz
ma ułatwić analizę programów napisanych - w trakcie ich uruchamiania lub modyfikacji w
formie zródłowej (tekstowej). Pole komentarza zamyka znak zmiany linii (nowej linii). Tekst
pojawiający się po znaku nowej linii (Enter) jest traktowane jako etykieta następnej linii
programu.
Mikroprocesory 8-bitowe są dziś stosowane wyłącznie w małych systemach rejestracji
danych binarnych lub w prostych urządzeniach pomiarowo-sterujących. Jednak z uwagi na
ich prostą architekturę i nieskomplikowane działanie ich dyskusja ma swoje uzasadnienie w
walorach dydaktycznych.
Ponieważ podręcznik jest zorientowany na rodzinę komputerów osobistych opraco-
wanych przez firmę IBM większość wywodów na temat zasad działania komputerów nawią-
zuje do mikroprocesorów firmy Intel, montowanych w tych komputerach.
Asembler jest translatorem zamieniającym zapis zródłowy programu na kody operacji
w zapisie binarnym; zapis obiektu (procesora) zwany wersją "Object" programu.
Loader jest translatorem zamieniającym zapis z kodu hexadecymalnego programu na
zapis binarny.
Zapis etykiety jest ciągiem znaków o ograniczonej długości, zwykle do 5-ciu, lub
6-ciu znaków. Pierwszy znak etykiety najczęściej jest literą. Zastrzeżone są również pewne
znaki specjalne - zależnie od wersji asemblera. Jednak w każdym przypadku w pole etykiety
zostaje wpisany, za pomocą asemblera, adres pierwszego bajtu programu w wersji object.
Zaleca się używanie etykiet wyrażających sens logiczny operacji, ale różnych od nazw mne-
monicznych rozkazów asemblera.
Skoki wykorzystują pole etykiety, w którym zapisany jest adres powrotu do poprzed-
nio realizowanego fragmentu programu lub adres specjalnej części programu podprogramu.
66
W zapisie zródłowym programu asemblera stosujemy szereg zapisów uzupełniających
i upraszczających redakcję programu. Są to pseudorozkazy, które nie dotyczą samej realizacji
programu, ale znacznie upraszczają jego opracowanie.
Pseudooperacje są reprezentowane przez rozkazy nie przenoszone przez asembler na
kod maszynowy obiektu. Są to tzw. dyrektywy asemblera, które definiują specjalne obszary
pamięci, przenoszą tablice lub inne dane do pamięci - definiują symbole.
Przykłady komend dla pseudooperacji:
DATA, EQUATE, DEFINE, ORIGIN, RESERVE, END, LIST, NAME, PAGE,
SPACE, TITLE.,
DATA Jest to pseudooperacja, która otwiera proces wprowadzania danych
przez użytkownika programu np.:
CON DATA ; oznacza wpisanie liczby do pierwszej wolnej
komórki pamięci i oznaczenie jej adresem sym-
bolicznym CON.
POM DATA 'ERROR',
PIERW DATA 1,4,3,5,7
Długość łańcucha znaków w parametrach DATA jest ograniczona długością 1 linii
edycyjnej.
NAPIS DATA TABLICA WYNIKOWA,
DATA POMIARU PIERWSZEGO,
DATA BEZ KOMENTARZA,
DATA LICZB,
EQU Jest pseudooperacją (EQUATE / EQUALS), która służy do przypisania
nazw etykiet lub innych nazw, fizycznym adresom lub danym. Np.:
TTY EQU 5
OSTATNI EQU 2000,
ST1 EQU START + 1,
Tablicę pseudo operacji EQU najczęściej umieszczamy na początku programu, choć
nie jest to wymóg konieczny.
ORG Określa pseudo operację (ORIGIN), służącą do określania lokacji
pamięci dla programu/podprogramu napisanego w języku assemblera.
67
RESET Jest zerowaniem adresów.
RESERVE Służy do przydzielania obszarów RAM zbiorom o określonych nazwach, np.:
1) POMIAR RESERVE 100,
TEMPER RESERVE 40,
ZNAK RESERVE 1,
2) ORG 3000,
POMIAR RESERVE 100,
TEMPER RESERVE 40,
ZNAK RESERVE 1,
Tablica POMIAR rozpoczyna się od adresu 3000 i ma zarezerwować dla danych 100
komórek pamięci. Tablica TEMPER ma przyporządkować dla danych 40 komórek, poczyna-
jąc od adresu 3100. Znak jest wpisywany do komórki pamięci o adresie 3141.
Ważniejsze słowa kluczowe komend systemowych:
END Pseudooperacja oznaczająca koniec programu zródłowego.
LIST Jest komendą zezwalającą na drukowania programu zródłowego.
NAME/TITLE Podaje na każdej stronie wydruku nazwę programu zródłowego.
PAGE/SPACE Komendy redakcyjne stron.
DB Umieszcza 8-bitowe dane w pamięci.
DW Umieszcza 16-bitowe dane w pamięci.
Przykłady:
1) ERROR DB 'ERROR'
w pamięci zostają zapisane kody ASCII E, R, R, O, R (E) zosta
je przypisana etykieta o nazwie ROR,
2) DANE DB 32,
liczba 32 zostaje wpisana do komórki pamięci oznaczona adre-
sem symbolicznym DANE
Większość asemblerów akceptuje wartości danych w zapisie:
" binarnym; z identyfikatorem B, np. 10010010B,
" oktalnym; z identyfikatorem Q lub C, np. 07Q,
" heksadecymalnym; z identyfikatorem H, np. 0E7H,
" dziesiętnym; z identyfikatorem D. np. 1240D,
68
" ASCI 'w cudzysłowie'.
69


Wyszukiwarka

Podobne podstrony:
elektr zegar sterujący z mikroprocesorem
elektroniczny bęben
Elektrotechnika i elektronika samochodowa Walusiak
elektronowy (2)
elektryczne gitary gon pawia
elektro zerowka
Sieci elektroenergetzcyne
song23 Elektryczne gitary Dzieci text tab
Analizowanie działania układów mikroprocesorowych
Elektroenergetyka opracowanie1
6 Gospodarka wodna elektrocieplowni
hezjod teogonia, dokument elektroniczny

więcej podobnych podstron