Serwis Edukacyjny w I-LO w Tarnowie ![]() Materiały dla uczniów liceum |
Wyjście Spis treści Wstecz Dalej Autor artykułu: mgr Jerzy Wałaszek |
©2021 mgr Jerzy Wałaszek
|
SPIS TREŚCI |
Podrozdziały |
![]() |
John Von
Neumann (1903 - 1957) |
Wszystkie współczesne komputery budowane są wg schematu określonego w 1945 przez Johna Von Neumana. Schemat ten zakłada, iż komputer będzie posiadał trzy odrębne elementy składowe: pamięć, urządzenia wejścia/wyjścia oraz procesor. W pamięci będą przechowywane przetwarzane dane oraz program dla procesora. Urządzenia wejścia/wyjścia umożliwią wymianę informacji pomiędzy komputerem a otoczeniem, natomiast procesor umożliwi przetwarzanie danych. Nasza Przykładowa Maszyna Cyfrowa również zbudowana jest wg schematu komputera Johna Von Neumana i posiada wszystkie trzy wymienione wyżej składniki.
Struktura logiczna Przykładowej Maszyny Cyfrowej
Centralną funkcję w systemie pełni procesor, który komunikuje się z pozostałymi komponentami za pomocą trzech magistral (magistrala składa się z kilku linii, po których biegną sygnały cyfrowe, tzn. 0 lub 1):
Omawianie struktury PMC rozpoczniemy od pamięci. Pamięć jest elementem każdego komputera, w którym przechowuje się program dla procesora oraz dane przez ten program przetwarzane. Pamięć składa się z komórek. W PMC każda komórka może zapamiętać 16 bitów, powiemy więc, iż pamięć PMC jest 16 bitowa. Aby uzyskać dostęp do zawartości komórki musimy operować adresem. Adres jest numerem przypisanym każdej komórce. W PMC pierwsza komórka pamięci ma adres 8, a ostatnia 1023. Wynika stąd, iż komórek pamięci jest w sumie 1016 (w rzeczywistej pamięci komórek tych jest 1024, lecz pierwsze osiem nie są dostępne dla procesora, gdyż w tym miejscu przestrzeni adresowej przebywają rejestry wejścia/wyjścia). Ponieważ PMC służy tylko do przykładowych programów, jest to ilość więcej niż wystarczająca.
Schemat pamięci PMC
Gdy sygnał sterujący MEM ma stan 1, pamięć PMC może wykonywać dwa cykle pracy - cykl zapisu oraz cykl odczytu. Gdy sygnał MEM ma stan niski 0, pamięć jest nieaktywna i odłączona od magistrali danych.
Każdy cykl rozpoczyna się stanem niskim sygnałów R, W oraz MEM,
Cykl odczytu pamięci PMC
Na początku cyklu zapisu sygnały sterujące MEM, W oraz R mają stan niski 0.
Cykl zapisu pamięci PMC
Porty wejścia/wyjścia (ang. I/O - Input/Output) są bramami, poprzez które procesor może przesyłać informację do różnych urządzeń zewnętrznych komputera. W PMC jest osiem portów we/wy umieszczonych w przestrzeni adresowej procesora od adresu 0 do 7. Tłumaczy to, dlaczego właściwa pamięć rozpoczyna się dopiero od komórki o adresie 8 - niższe adresy zajmują porty.
Cykl zapisu i odczytu portu wejścia wyjścia jest identyczny z cyklem zapisu i odczytu pamięci. Jedyną różnicą jest użycie w tym przypadku linii IO do uaktywniania portów zamiast linii MEM. Porty posiadają różną długość w bitach w zależności od pełnionej przez nie funkcji i nie zachowują się jak komórki pamięci, tzn. zapis do portu powoduje wykonanie pewnej operacji przez urządzenie zewnętrzne, które jest sterowane za pomocą tego portu.
Teraz omówimy dokładnie każdy z portów dostępnych w PMC. Poznanie ich funkcji jest niezbędne dla programowania tego komputera.
Widok ekranu znakowego na symulatorze PMC
PMC wyposażona jest w wyświetlacz znakowy, który potrafi wyświetlać 16 znaków. Nie jest to ilość imponująca, ale pamiętaj o przeznaczeniu PMC! Kolor wyświetlanych znaków wybieramy klikając w kolorowe przyciski umieszczone ponad wyświetlaczem po prawej stronie. Sterowanie odbywa się poprzez dwa skojarzone ze sobą porty:
Adres | Port | Funkcja |
0 | CHP | CHaracter Port - port znakowy |
1 | CHI | CHaracter Index Port - port indeksowy |
Do portu CHP zapisujemy polecenie, które ma wykonać wyświetlacz. Polecenia są 9 bitowe i mają następujący format:
funkcja | b8 | b7 | b6 | b5 | b4 | b3 | b2 | b1 | b0 |
znak | 0 | kod ASCII znaku | |||||||
funkcja | 1 | 0 | 0 | 0 | 0 | 0 | x | x | x |
Jeśli bit b8 ma wartość 0, to pozostałe bity są traktowane jako kod ASCII znaku, który zostanie wyświetlony na wyświetlaczu (jeśli więc zechcesz wyświetlić znak, to wystarczy przesłać do tego portu jego kod ASCII). Pozycję znaku na wyświetlaczu określa zawartość portu CHI. Na przykład, jeśli wyświetlacz jest pusty i do portu CHI prześlemy liczbę 5, a do CHP kod ASCII znaku A, to wyświetlacz znakowy przyjmie następujący wygląd:
. |
. |
. |
. |
. |
A |
. |
. |
. |
. |
. |
. |
. |
. |
. |
. |
Literka A pojawi się na pozycji nr 5 (pozycje numerujemy od zera poczynając
od lewej strony). Jeśli teraz do portu CHI
wpiszemy 6, a do CHP kod literki B, to na
wyświetlaczu pojawi się następujący napis:
. |
. |
. |
. |
. |
A |
B |
. |
. |
. |
. |
. |
. |
. |
. |
. |
Zrozumiałeś już przeznaczenie tych portów? Port CHP steruje wyświetlaniem znaków, a CHI określa pozycję znaku na wyświetlaczu. Port ten jest 4-bitowy. Ogólniej CHI określa pozycję wyświetlacza, której użyje funkcja wprowadzona do portu CHP.
Jeśli bit b8 ma stan 1 (kody > 255), to wprowadzenie takiej wartości do portu CHP spowoduje wykonanie operacji określonej stanem bitów b2, b1 oraz b0. Są to następujące operacje:
|
DEL - usuwa znak na pozycji
CHI. Znaki znajdujące się na prawo od tej
pozycji są przesuwane o jedną kolumnę w lewo. Na ostatniej pozycji
wyświetlacza umieszczana jest spacja. Na przykład, jeśli wyświetlacz
przedstawia napis:
...to po wprowadzeniu do portu CHI wartości 5, a do CHP kodu 256 na wyświetlaczu pojawi się:
Z wyświetlacza zniknęła literka "c", ponieważ przed wykonaniem operacji DELETE literka ta była na pozycji 5, czyli tej, którą określiliśmy w porcie CHI. Zwróć uwagę, iż literki na prawo od tej pozycji zmieniły swoje położenie. |
||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
INS - znaki zostaną rozsunięte w prawo począwszy od pozycji CHI. Znak, który znajdował się przed wykonaniem tej operacji na pozycji 15 wyświetlacza zostaje stracony. Następnie na pozycji CHI zostaje umieszczony znak spacji. Funkcja ta umożliwia zrobienie miejsca pod nowe znaki, które chcielibyśmy wstawić do tekstu już wyświetlonego na wyświetlaczu znakowym. Jeśli wyświetlacz ma następujący wygląd:
to po wstawieniu do portu CHI wartości 5, a do portu CHP kodu 257, wyświetlacz przyjmie następujący wygląd:
Na pozycji 5 zrobione zostało miejsce - można tam bezpośrednio wprowadzić nowy znak. Znaki od F do O zostały przesunięte o jedną kolumnę w prawo. Literka P została usunięta z wyświetlacza. |
||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
SHL - funkcja powoduje przesunięcie wszystkich znaków na wyświetlaczu
o jedną kolumnę w lewo. Znak na pozycji 0 zostaje usunięty. Na pozycji 15
wpisywana jest spacja. Jeśli przed wykonaniem tej funkcji wyświetlacz znakowy
miał wygląd:
to po wprowadzeniu do portu CHP kodu 258, wyświetlacz zmieni się na:
Funkcja SHL nie korzysta z zawartości portu indeksowego CHI. Funkcja ta pozwala w prosty sposób wyświetlać dłuższe teksty. Port CHI ustawiamy na 15. Następnie przed wypisaniem kolejnej literki tekstu wprowadzamy do portu CHP kod 258. Spowoduje to przesunięcie wszystkich znaków w lewo i pozostawienie pozycji 15 pustej. Teraz możemy zapisać do portu CHP kod znaku, który pojawi się na końcu wyświetlacza. Osiągniemy efekt giełdowego paska tekstowego. |
||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
SHR - funkcja przesuwa wszystkie znaki na wyświetlaczu o jedną kolumnę w
prawo. Znak na pozycji 15 zostaje usunięty. Na pozycję 0 wpisywana jest
spacja. Jeśli przed wykonaniem tej funkcji wyświetlacz znakowy miał
następującą zawartość:
to po umieszczeniu w porcie CHP kodu 259, wyświetlacz zmieni się na:
Funkcja SHR nie korzysta z zawartości portu indeksowego CHI. |
||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
RLL - wszystkie znaki na wyświetlaczu zostają przesunięte o jedną kolumnę w
lewo. Znak z pozycji 0 trafia na pozycję 15. Jeśli wyświetlacz miał zawartość:
to po wprowadzeniu kodu 260 do portu CHP na wyświetlaczu pojawi się następujący napis:
Po przesunięciu znaków w lewo literka N trafiła z pozycji 0 na pozycję 15. Funkcja ta umożliwia cykliczne wyświetlanie określonego napisu. Zawartość portu CHI nie jest wykorzystywana. |
||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
RLR - wszystkie znaki na wyświetlaczu
zostają przesunięte o jedną kolumnę w prawo. Znak z pozycji 15 trafia na
pozycję 0. Jeśli wyświetlacz przed wykonaniem tej operacji miał zawartość:
to po wprowadzeniu kodu 261 do portu CHP na wyświetlaczu pojawi się następujący napis:
Po przesunięciu znaków w prawo literka B trafiła z pozycji 15 na pozycję 0. Funkcja ta umożliwia cykliczne wyświetlanie określonego napisu. Zawartość portu CHI nie jest wykorzystywana. |
||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
CLR - funkcja usuwa wszystkie znaki z wyświetlacza. Zawartość rejestru CHI nie jest zmieniana. Funkcja umożliwia szybkie czyszczenie wyświetlacza znakowego przed wyprowadzeniem nowego tekstu. |
Następną właściwością wyświetlacza znakowego (dotyczy to również pozostałych urządzeń we/wy, które posiadają porty indeksowe) jest możliwość odczytu jego zawartości. Jeśli odczytamy stan portu CHP, to dostaniemy w wyniku kod znaku, który jest wyświetlany na pozycji określonej zawartością portu CHI. Na przykład, jeśli wyświetlacz ma następującą zawartość:
A |
B |
C |
D |
E |
F |
G |
H |
I |
J |
K |
L |
M |
N |
O |
P |
to wprowadzenie do portu CHI wartości 5, a następnie odczytanie portu CHP da w wyniku kod literki F, gdyż znajduje się ona właśnie na pozycji 5. Odczytanie portu CHI da z kolei numer pozycji wyświetlacza, na której pojawi się znak wprowadzany do portu CHP. Ponieważ jednak port CHI ma rozmiar 4 bitów, to zapis liczby większej od 15 pozostawi w tym porcie tylko 4 ostatnie bity. Odczyt zwróci te cztery bity. Na przykład, zapisujemy do portu CHI liczbę 27(10). Binarnie jest to liczba 11011(2). W porcie pozostanie 1011(2). Odczyt da więc wartość 11(10).
Zapamiętaj!Jeśli wprowadzisz liczbę do portu CHI, to ustawisz aktywną pozycję na wyświetlaczu znakowym. Teraz odczyt portu CHP zwróci ci kod znaku znajdującego się na tej pozycji, a zapis kodu znaku do portu CHP spowoduje wyświetlenie znaku na ustawionej pozycji. |
Widok bufora znakowego na symulatorze PMC
Wyjście znakowe (CHP i CHI) umożliwia PMC wyświetlanie prostych informacji tekstowych. Bardzo często jednak program musi odczytywać dane wprowadzane przez użytkownika. Do tego celu służy kolejny port - wejście znakowe.
Adres | Port | Funkcja |
2 | INP | INput Port - port wejścia znakowego |
Port jest 16-bitowy i służy tylko do odczytu. Zapis danych do tego portu jest ignorowany i nie wywołuje żadnego działania ze strony PMC. Każdy odczyt portu INP daje w wyniku kod kolejnego znaku z bufora tekstowego lub wartości 0 albo -1. Znaki do bufora wprowadza użytkownik za pomocą klawiatury. Jeśli program stara się odczytać znak z bufora, a bufor jest pusty (skończyły się w nim znaki, użytkownik nie wprowadził jeszcze nowych), to otrzymamy w wyniku wartość -1 (kody wszystkich znaków są dodatnie). Jeśli natomiast użytkownik edytuje zawartość bufora, to odczyt portu INP da w wyniku 0. Wynika stąd następujący algorytm odczytu danych:
Odczytany znak jest usuwany z bufora wejściowego. Następny odczyt portu INP da więc kod kolejnego znaku.
Widok diod LED oraz przycisków portu IOP na symulatorze PMC
Adres | Port | Funkcja |
3 | IOP | Input Output Port - port prostego wejścia/wyjścia |
Port ma długość 16 bitów oraz posiada inną funkcję przy odczycie, a inną przy zapisie.
Gdy odczytujemy port IOP otrzymujemy bitowy stan przycisków podłączonych do tego portu. Każdy przycisk steruje stanem jednego bitu. Gdy przycisk jest wciśnięty, to odpowiadający mu bit ma stan 1, a gdy wyciśnięty, to bit ten przyjmuje wartość 0. Badając stan bitów program może dowiedzieć się, który z przycisków został naciśnięty przez użytkownika. Numery bitów podane są nad przyciskami. Jeśli więc po odczycie portu IOP otrzymamy wartość 17(10), to zamieniwszy ją na 16 bitową liczbę binarną:
17(10) = 0000000000010001(2)
stwierdzamy, iż naciśnięty jest przycisk 0 oraz 4.
Gdy zapisujemy wartość do portu, to powodujemy zaświecenie się diod LED, dla których odpowiednie bity zapisanej danej są ustawione na 1. Jeśli zapiszemy do tego portu wartość 17, to spowoduje to zaświecenie się diody LED numer 0 oraz numer 4. Kolor świecenia diod można regulować klikając myszką kolorowe przyciski umieszczone ponad diodami LED.
Wyświetlacze 7-segmentowe w symulatorze PMC
Wyświetlacz 7-segmentowy LED jest popularnym wskaźnikiem cyfrowym, który znajduje szerokie zastosowanie w różnych urządzeniach pomiarowych i licznikowych. Nawet starsze komputery IBM posiadały takie wskaźniki. Było to w czasach, gdy procesory pracowały z dwoma częstotliwościami taktowania - normalną oraz turbo. Aby użytkownik wiedział, w jakim trybie pracuje procesor, stosowano dwu lub trzycyfrowy wyświetlacz 7-segmentowy. Warto więc poznać sposób programowania takich wyświetlaczy. PMC posiada ich 16. Są one numerowane od strony prawej do lewej. Na powyższej ilustracji widzimy zapalone wszystkie segmenty na wyświetlaczu nr 0. Wyświetlacz sterowany jest przy pomocy dwóch portów (podobnie jak wyjście znakowe):
Adres | Port | Funkcja |
4 | DSP | DiSplay Port - port wyświetlacza 7-segmentowego |
5 | DSI | DiSplay Index - port indeksu wyświetlacza 7-segmentowego |
Port DSI ustawia aktywny wyświetlacz. Port ma długość 4 bitów. Wpisujemy do niego numer wyświetlacza cyfry, do którego chcemy uzyskać dostęp. Dostęp do segmentów wyświetlacza uzyskujemy poprzez port DSP. Port ten jest 8 bitowy. Każdy bit steruje świeceniem jednego segmentu wyświetlacza w sposób pokazany poniżej:
Przydział bitów poszczególnym segmentom w porcie DSP
Taki sposób sterowania pozwala na wyświetlanie oprócz cyfr 0..9 również niektórych liter alfabetu oraz symboli. Zawartość portu DSP można również odczytywać. Dostaniemy wtedy informację o zaświeconych segmentach na wyświetlaczu, którego numer ustawiony został w porcie DSI. Poniżej przedstawiamy tabelę wartości, które należy wprowadzać do portu DSP, aby uzyskać odpowiednią cyfrę na wyświetlaczu (jeśli cyfra ma być razem z przecinkiem, to bit b7 musi być ustawiony na 1, czyli do poniższych kodów należy dodać 128).
cyfra | bity portu DSP | kod | ||||||||
b7 | b6 | b5 | b4 | b3 | b2 | b1 | b0 | hex | dec | |
![]() |
0 | 0 | 1 | 1 | 1 | 1 | 1 | 1 | 3F | 63 |
![]() |
0 | 0 | 0 | 0 | 0 | 0 | 1 | 1 | 03 | 3 |
![]() |
0 | 1 | 1 | 0 | 1 | 1 | 0 | 1 | 6D | 109 |
![]() |
0 | 1 | 1 | 0 | 0 | 1 | 1 | 1 | 67 | 103 |
![]() |
0 | 1 | 0 | 1 | 0 | 0 | 1 | 1 | 53 | 83 |
![]() |
0 | 1 | 1 | 1 | 0 | 1 | 1 | 0 | 76 | 118 |
![]() |
0 | 1 | 1 | 1 | 1 | 1 | 1 | 0 | 7E | 126 |
![]() |
0 | 0 | 1 | 0 | 0 | 0 | 1 | 1 | 23 | 35 |
![]() |
0 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 7F | 127 |
![]() |
0 | 1 | 1 | 1 | 0 | 1 | 1 | 1 | 77 | 119 |
Zwróć uwagę, iż w tym przypadku posługiwanie się systemem binarnym do opisu zawartości portu DSP jest bardziej odpowiednie niż tajemnicze liczby dziesiętne, które nie oddają sensu zapisywanych w porcie informacji.
Zapamiętaj!Jeśli wprowadzisz liczbę do portu DSI, to ustawisz aktywną pozycję na wyświetlaczu cyfrowym. Pozycje numerowane są od strony prawej do lewej Teraz odczyt portu DSP zwróci ci stan segmentów na wskaźniku znajdującym się na tej pozycji, a zapis do portu DSP spowoduje zapalenie lub zgaszenie segmentów LED na ustawionej pozycji. |
Widok ekranu graficznego
16 × 16 punktów w symulatorze PMC
PMC została wyposażona w bardzo proste możliwości graficzne - nie chciałem zbytnio komplikować zasad programowania komputera. Ekranik graficzny składa się z matrycy 16 × 16 punktów graficznych (pikseli). Każdy punkt może przyjmować jeden z 4096 różnych kolorów (tutaj ukłon w stronę Amigi). Sterowanie ekranikiem (tak go będę nazywał) graficznym odbywa się poprzez dwa ostatnie rejestry wejścia/wyjścia:
Adres | Port | Funkcja |
6 | GRP | GRaphics Port - port graficzny koloru |
7 | GRI | GRaphics Index - port indeksowy grafiki |
Port GRP jest 12 bitowy i steruje kolorem punktu, a GRI jest 8 bitowy i określa pozycję punktu na ekraniku graficznym.
Kolor jest kodowany na 12 bitach w trzech polach 4-bitowych. Każde pole steruje intensywnością związanego z nim koloru podstawowego w systemie RGB (Red - czerwony, Green - zielony, Blue - niebieski). Cztery bity pozwalają na określenie 16 poziomów, od 0000(2) do 1111(2) - czyli od 0 do 15. Poziom 0 oznacza brak danego koloru podstawowego. Poziom 15 oznacza maksymalne natężenie koloru podstawowego. Kolor wynikowy powstaje z mieszanki kolorów podstawowych. Poniżej przedstawiamy sposób kodowania kolorów podstawowych w porcie GRP:
R - czerwony | G - zielony | B - niebieski | |||||||||
b11 | b10 | b09 | b08 | b07 | b06 | b05 | b04 | b03 | b02 | b01 | b00 |
Jeśli zawartość rejestru przedstawimy w postaci liczby szesnastkowej, to każda cyfra będzie określała natężenie jednego koloru podstawowego. W poniższej tabeli przedstawiamy kilka wybranych kolorów oraz ich kody w systemie szesnastkowym dla portu GRP.
0 | 0 | 0 | 000 | |
F | F | F | FFF | |
F | 0 | 0 | F00 | |
0 | F | 0 | 0F0 | |
0 | 0 | F | 00F | |
F | F | 0 | FF0 | |
0 | F | F | 0FF | |
F | 0 | F | F0F |
Gdy umiemy określać już kolor punktu na ekraniku graficznym, musimy się nauczyć wybierać punkt leżący na określonej współrzędnej. Do tego celu służy port GRI. Punkt graficzny ma dwie współrzędne - poziomą x od 0 do 15 oraz pionową y od 0 do 15. W poniższym przykładzie na ekraniku graficznym umieszczono kilka kolorowych punktów.
00 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 | 13 | 14 | 15 | |
00 | ||||||||||||||||
01 | ||||||||||||||||
02 | ||||||||||||||||
03 | ||||||||||||||||
04 | ||||||||||||||||
05 | ||||||||||||||||
06 | ||||||||||||||||
07 | ||||||||||||||||
08 | ||||||||||||||||
09 | ||||||||||||||||
10 | ||||||||||||||||
11 | ||||||||||||||||
12 | ||||||||||||||||
13 | ||||||||||||||||
14 | ||||||||||||||||
15 |
punkty te mają następujące współrzędne (x,y):
Jeśli współrzędną x i y zapiszemy w systemie dwójkowym, to każda z nich zajmie 4 bity. Bity te łączymy razem w daną 8 bitową i zapisujemy do portu GRI. Na przykład, aby umieścić na ekraniku graficznym punkt czerwony na współrzędnej (2,10) wykonujemy następujące operacje:
Zapamiętaj!Jeśli wprowadzisz do portu GRI współrzędne punktu na ekranie graficznym, to z portu GRP możesz odczytać 12 bitowy kolor punktu leżącego na tych współrzędnych. Zapis do portu GRP spowoduje pojawienie się na ekraniku graficznym punktu na bieżących współrzędnych o kolorze określonym wprowadzoną do portu GRP wartością. |
Procesor PMC pozwala na zaadresowanie 1024 komórek pamięci. Szyna adresowa ma długość 10 bitów. Część obszaru adresowego zajęta jest przez rejestry wejścia/wyjścia. Poniżej przedstawiamy logiczną mapę pamięci tego komputera z punktu widzenia procesora
adres hex |
adres dec |
Nazwa | Typ | Opis |
000 | 0 | CHP | port we/wy | sterowanie wyświetlaczem znakowym |
001 | 1 | CHI | port we/wy | |
002 | 2 | INP | port we | odczyt bufora znakowego |
003 | 3 | IOP | port we | odczyt stanu przycisków |
port wy | sterowanie świeceniem diod LED | |||
004 | 4 | DSP | port we/wy | sterowanie segmentami wyświetlaczy LED 7-segmentowymi |
005 | 5 | DSI | port we/wy | |
006 | 6 | GRP | port we/wy | sterowanie ekranikiem graficznym |
007 | 7 | GRI | port we/wy | |
008 | 8 | komórka | pierwsza komórka pamięci operacyjnej PMC | |
... | ... | komórka | ||
3FF | 1023 | komórka | ostatnia komórka pamięci operacyjnej PMC |
Procesor jest centralnym układem służącym do przetwarzania informacji w PMC. Posiada on całkowitą kontrolę nad magistralą adresową, danych oraz sterującą. Pozostałe elementy PMC, pamięć i porty wejścia/wyjścia muszą się całkowicie podporządkować procesorowi. Protokoły komunikacyjne pomiędzy procesorem a pamięcią opisaliśmy już wcześniej, a teraz nadszedł czas na zajrzenie do środka procesora.
Procesor PMC jest układem 16-bitowym, tzn. w jednej instrukcji potrafi przetworzyć porcję 16 bitów. Aby zachować prostotę PMC, co jest naszym głównym celem, zestaw rozkazów procesora składa się tylko z 16 różnych poleceń, które omówimy dokładnie w dalszej części tego rozdziału. Procesor posiada 10 bitową magistralę adresową. 10 bitów pozwala na zaadresowanie 210 komórek pamięci, czyli 1024. Pierwsze 8 adresów (od 0 do 7) zajęte jest jednak przez porty wejścia/wyjścia. Dlatego faktycznie komórek pamięci jest mniej o 8, czyli 1016. Magistrala danych jest 16 bitowa, co pozwala w jednym cyklu dostępu do pamięci lub portów we/wy przesłać 16 bitów informacji binarnej. Do sterowania pamięcią i portami procesor korzysta z magistrali sterującej, która zawiera cztery linie: MEM (wybór pamięci), IO (wybór portów), R (odczyt z pamięci lub portu w zależności od stanu linii MEM i IO) i W (Write - zapisz).
Widok rejestrów procesora na symulatorze PMC
Podstawową funkcją rejestrów jest przechowywanie informacji dla procesora. Rejestry czynnie uczestniczą w operacjach wykonywanych przez procesor. PMC posiada cztery rejestry:
ACR (ACcumulator Register) - 16 bitowy rejestr akumulatora. Wykorzystują go wszystkie operacje arytmetyczne i logiczne do przechowywania jednego z argumentów oraz wyniku. Używany jest również przy przesyłaniu danych pomiędzy różnymi obszarami pamięci oraz pomiędzy pamięcią a portami wejścia/wyjścia.
SPR (Stack Pointer Register) - 4 bitowy rejestr wskaźnika stosu. Stos jest grupą 16 wewnętrznych komórek pamięci o rozmiarze 10 bitów każda. Służy służy do przechowywania adresów powrotnych z podprogramów. Jego funkcję opiszemy dokładnie w dalszej części rozdziału. Wskaźnik stosu wskazuje wolne miejsce na stosie - takie, w którym można coś umieścić. Po wpisaniu danej na stos wskaźnik ten jest zwiększany o 1 i wskazuje następne wolne miejsce. Przy odczycie danych ze stosu wskaźnik najpierw jest zmniejszany o 1, a następnie odczytywana jest lokacja stosu o numerze zawartym we wskaźniku.
PCR (Program Counter Register) - 10 bitowy rejestr licznika rozkazów. Służy on do adresowania komórek pamięci PMC, w których zawarte są wykonywane przez procesor instrukcje. Instrukcja jest pobierana z komórki o adresie w liczniku rozkazów. Po wykonaniu instrukcji procesor zwiększa o 1 zawartość rejestru licznika rozkazów i używa jej do pobrania z pamięci kolejnej instrukcji.
INR (INstruction Register) - 16 bitowy rejestr licznika instrukcji. Procesor pobraną z komórki pamięci instrukcję umieszcza w rejestrze instrukcji. Następnie dekoduje ją i wykonuje.
Wskaźnik fazy wykonania polecenia na symulatorze PMC
Każdy procesor (również ten w komputerze IBM czy w Amidze) wykonuje polecenia w kilku cyklach, zwanych również fazami lub taktami. W PMC wszystkie polecenia są wykonywane w trzech fazach, które nazywać będziemy cyklem rozkazowym. Oto one:
![]() |
F1 - Pobranie rozkazu. Procesor wysyła na magistralę adresową zawartość rejestru licznika rozkazów - PCR. Powoduje to zaadresowanie komórki pamięci, w której przechowywany jest rozkaz do wykonania. Następnie procesor PMC odczytuje z pamięci instrukcję i umieszcza ją w rejestrze instrukcji INR. |
![]() |
F2 - Dekodowanie rozkazu. Procesor za pomocą swojej sieci logicznej dekoduje (rozpoznaje) pobraną instrukcję do rejestru INR. W ten sposób procesor przygotowuje się do wykonania polecenia. |
![]() |
F3 - Wykonanie rozkazu. Po zdekodowaniu instrukcji procesor wie, jakie polecenie zostało pobrane z pamięci. Przystępuje więc do jego wykonania. Najpierw zwiększa o 1 zawartość rejestru PCR, aby wskazywał następną instrukcję w pamięci, która zostanie pobrana w kolejnym cyklu rozkazowym. Jeśli rozkaz wymaga pobrania danych z pamięci, to są one pobierane. Procesor wykonuje operacje zdefiniowane przez kod instrukcji. Jeśli operacja wymaga umieszczenia wyników w pamięci, to zostają one tam umieszczone. Cykl rozkazowy kończy się i następuje przejście do następnego cyklu. |
Instrukcje dla procesora PMC przechowywane są w pamięci operacyjnej, więc mają taką długość w bitach jak komórki, czyli 16 bitów. Bity tworzące instrukcje podzielone są na trzy odrębne pola:
KOD | TAD | ARG | |||||||||||||
b15 | b14 | b13 | b12 | b11 | b10 | b9 | b8 | b7 | b6 | b5 | b4 | b3 | b2 | b1 | b0 |
INSTRUKCJA PMC |
KOD - 4 bitowe pole, które przechowuje kod operacji, którą należy wykonać. Ponieważ do dyspozycji mamy tylko 4 bity, to mogą one przyjąć 16 różnych kombinacji stanów. Stąd procesor PMC potrafi wykonywać jedynie 16 poleceń. Każde polecenie posiada swoją własną kombinację stanów tych bitów.
TAD - 2 bitowe pole, które określa tryb adresowania argumentu lub wyniku operacji, zdefiniowanej w polu KOD. Tryb adresowania jest sposobem dostępu do danej. Ponieważ pole to ma rozmiar dwóch bitów, to mamy do dyspozycji 4 różne tryby adresowania dla każdego polecenia PMC.
ARG - 10 bitowe pole, które przechowuje argument dla operacji. Znaczenie tych bitów zależy od użytego w instrukcji trybu adresowania.
Instrukcje PMC operują nad danymi. Dane te należy pobierać lub przesyłać do pamięci. Sposób dostępu do danych dla określonej instrukcji definiuje tryb adresowania. Informacja dla procesora PMC o użytym w instrukcji trybie adresowania przechowywana jest w polu TAD instrukcji. Pole to ma rozmiar dwóch bitów, mamy zatem cztery różne tryby adresowania. Pole TAD ściśle współpracuje z polem ARG, w którym przechowywane są dane istotne dla trybu adresowania.
KOD | TAD | ARG | |||||||||||||
x | x | x | x | 0 | 0 | b9 | b8 | b7 | b6 | b5 | b4 | b3 | b2 | b1 | b0 |
rozkaz | tryb | dana bezpośrednia od -512 do 511 |
Pole TAD zawiera bity 00. Jest to najprostszy tryb adresowania - dane zawarte są bezpośrednio w instrukcji w polu ARG i są traktowane jako liczba w kodzie U2 (z wyjątkiem rozkazów skoków, które traktują ARG jak liczbę bez znaku). Ponieważ pole ARG ma rozmiar 10 bitów, więc zakres liczb wynosi od -512 do 511. Jeśli w instrukcji musimy użyć liczb wykraczających poza zakres, to niestety należy zmienić tryb adresowania na adresowanie komórki pamięci, w której da się już umieszczać liczby 16 bitowe o zakresie -32768 do 32767.
KOD | TAD | ARG | |||||||||||||
x | x | x | x | 0 | 1 | b9 | b8 | b7 | b6 | b5 | b4 | b3 | b2 | b1 | b0 |
rozkaz | tryb | adres komórki lub portu od 0...1023 |
Pole TAD zawiera bity 01. W trybie tym pole ARG jest adresem komórki pamięci lub portu wejścia/wyjścia, w których znajdują się dane dla instrukcji PMC. 10 bitowe pole ARG traktowane jest jako liczba bez znaku. Zakres adresów obejmuje cały obszar adresowy PMC - od 0 do 1023. Tryb ten pozwala pobierać dane z pamięci PMC oraz umieszczać wyniki obliczeń we wskazanych komórkach lub portach. O tym, czy będzie to pobranie danych, czy umieszczenie ich w pamięci decyduje rodzaj instrukcji, której kod zdefiniowano w polu KOD.
KOD | TAD | ARG | |||||||||||||
x | x | x | x | 1 | 0 | b9 | b8 | b7 | b6 | b5 | b4 | b3 | b2 | b1 | b0 |
rozkaz | tryb | adres komórki od 0...1023 |
Pole TAD zawiera bity 10. Ten tryb adresowania jest początkowo trudny do zrozumienia. W polu ARG umieszczony jest adres komórki pamięci PMC. W adresowanej komórce znajduje się adres danych. Dlatego tryb ten nosi adresowania pośredniego - dane adresujemy za pośrednictwem komórki pamięci zawierającej właściwy adres. Komórkę zawierającą taki adres nazywamy wskazaniem (ang. pointer). Postinkrementacja oznacza zwiększenie o 1 adresu zawartego w komórce po wykonaniu instrukcji zawierającej ten tryb adresowania. Działanie trybu pośredniego z postinkrementacją jest zatem następujące:
Tryb pośredni umożliwia adresowanie kolejnych komórek pamięci PMC. Załóżmy, iż we fragmencie pamięci umieszczono następujące dane:
adres | zawartość | opis |
8 | 10 | tutaj rozpoczynają się dane |
9 | 20 | następne dane |
10 | 100 | następne dane |
11 | 8 | Tutaj umieszczono adres początku danych |
Załóżmy teraz, iż pewna instrukcja odczytuje pamięć za pomocą trybu pośredniego z postinkrementacją, w którym w polu ARG umieszczono adres komórki 11 przechowującej adres początku danych. Instrukcja ta może wyglądać tak:
KOD | TAD | ARG | |||||||||||||
x | x | x | x | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 1 | 1 |
Pewna instrukcja PMC stosująca adresowanie pośrednie z postinkrementacją |
Pierwsze wykonanie tej instrukcji da w wyniku daną o wartości 10. Zawartość komórki 11 zostanie zwiększona i będzie wynosić teraz 9 - wskazuje komórkę zawierającą liczbę 20. Drugie wykonanie takiej samej instrukcji spowoduje pobranie z pamięci liczby 20, a komórka 11 zwiększy swą zawartość na 10. Kolejne wykonanie instrukcji pobierze z pamięci liczbę 100, komórka 11 zwiększy zawartość na 11.
Tryb adresowania pośredniego z postinkrementacją jest szczególnie przydatny do adresowania kolejnych elementów tablic przechowywanych w ciągłych obszarach pamięci PMC oraz do tworzenia struktur stosowych.
KOD | TAD | ARG | |||||||||||||
x | x | x | x | 1 | 1 | b9 | b8 | b7 | b6 | b5 | b4 | b3 | b2 | b1 | b0 |
rozkaz | tryb | adres komórki od 0...1023 |
Pole TAD zawiera bity 11. Jest to ostatni tryb adresowania stosowany przez procesor PMC. W działaniu jest bardzo podobny do poprzedniego trybu. Pole ARG zawiera adres komórki ze wskazaniem. Wskazanie to zostanie użyte przy dostępie do właściwych danych w pamięci PMC. Predekrementacja oznacza zmniejszenie o 1 przed wykonaniem instrukcji. Działanie trybu z predekrementacją jest następujące:
Tryb adresowania pośredniego z predekrementacją nadaje się do adresowania tablic od ostatniego elementu - niektóre algorytmy wymagają takiego podejścia.
Kod operacji do wykonania przez procesor PMC zawarty jest w 4 bitowym polu KOD. Cztery bity mogą przyjmować 16 różnych kombinacji stanów. Każdy z tych stanów oznacza jedną instrukcję PMC. Instrukcje te są następujące:
|
LDA (LoaD Accumulator - ładuj akumulator) ACR ← ARG Instrukcja umieszcza argument pobrany zgodnie z zastosowanym trybem adresowania w rejestrze akumulatora. Po wykonaniu operacji rejestr licznika programu zwiększony zostaje o 1 i wskazuje kolejną instrukcję w pamięci. Ponieważ operacja zwiększenia licznika rozkazów występuje prawie w każdej instrukcji, nie będziemy już o niej wspominać. |
||||||
|
STA (STore Accumulator - prześlij akumulator) ARG ← ACR Instrukcja umieszcza zawartość rejestru akumulatora w komórce pamięci (lub porcie wejścia/wyjścia) zgodnie z zastosowanym trybem adresowania. W przypadku użycia trybu natychmiastowego (który nie ma w tym przypadku sensu) instrukcja STA nic nie wykonuje. |
||||||
|
JMP (JuMP - skocz) PCR ← ARG Polecenie JMP jest tzw. skokiem bezwarunkowym. Argument jest umieszczany w rejestrze licznika programu, który w tym wypadku nie jest już zwiększany o 1. Zmiana zawartości licznika programu spowoduje, iż kolejną wykonywaną instrukcją będzie polecenie umieszczone w komórce o adresie ARG. Program wykonuje więc skok do podanego adresu. Jako argument instrukcji skoku stosuje się najczęściej adres zawarty w instrukcji w polu ARG - tryb natychmiastowy. W przypadku skoków pole to jest traktowane jako liczba bez znaku w naturalnym kodzie dwójkowym. UWAGA! Instrukcje skoków mogą zatrzymać wykonanie programu PMC jeśli skok odbył się poza obszar komórek, które zdefiniowano w edytorze jako komórki programu. Również program zatrzyma się, jeśli wykona ostatnią instrukcję w programie. Typowo zatrzymujemy wykonywanie programu skokiem pod adres 0. |
||||||
|
JZR (Jump on ZeRo - skocz przy zerze) jeśli ACR = 0, to PCR ← ARG, inaczej PCR ← PCR + 1 Polecenie JZR jest tzw. skokiem warunkowym. Skok warunkowy jest wykonywany, gdy rejestr akumulatora zawiera wartość zero. W przeciwnym wypadku następuje przejście do następnej instrukcji za rozkazem skoku. Skoki warunkowe umożliwiają tworzenie rozgałęzień w programie. |
||||||
|
JMI (Jump on MInus - skocz przy wartości ujemnej) jeśli ACR < 0, to PCR ← ARG, inaczej PCR ← PCR + 1 Polecenie JMI powoduje skok programowy do instrukcji pod adresem określonym przez ARG, gdy zawartość akumulatora jest mniejsza niż zero. Ponieważ zawartość ta jest traktowana przez rozkaz skoku jako liczba w kodzie U2, to warunkiem wystarczającym wykonania skoku jest to, aby bit znaku (najstarszy bit) miał wartość 1. |
||||||
|
JSR (Jump to SubRoutine - skocz do podprogramu) PCR ←
PCR + 1 Polecenie to działa podobnie do rozkazu JMP w tym sensie, iż w obu wypadkach wykonywany jest skok bezwarunkowy pod wskazany przez ARG adres. Jednak w przypadku JSR przed wykonaniem skoku na wewnętrznym stosie procesora PMC zapamiętana zostaje zawartość zwiększonego o 1 licznika rozkazów. Jest to adres instrukcji bezpośrednio za poleceniem JSR. Adres ten będzie można pobrać później ze stosu za pomocą instrukcji RTS i umieścić z powrotem w liczniku rozkazów, co spowoduje powrót do adresu bezpośrednio za poleceniem JSR. Taka operacja nazywana jest wywołaniem podprogramu. Podprogramy są bardzo istotnym elementem każdego programu. Podprogram jest zwykle prostą procedurą (np. odczyt liczby, wypisanie zadanego tekstu). którą można wywoływać za pomocą polecenia JSR z wielu różnych miejsc w programie, a po wykonaniu nastąpi automatyczny powrót do polecenia za rozkazem JSR. UWAGA: Polecenie JSR może powodować awaryjne zatrzymanie pracy PMC. Każde użycie instrukcji skoku do podprogramu powoduje odłożenie na wewnętrznym stosie adresu powrotnego. Jeśli adresy te nie są pobierane ze stosu, to stos staje się coraz bardziej zapełniony. Gdy liczba przechowywanych na stosie adresów powrotnych osiągnie wartość 16, to stos staje się pełny i nie może już przyjąć żadnego nowego adresu. Wykonanie w takiej chwili kolejnego polecenia JSR spowoduje przepełnienie stosu i zatrzymanie programu z odpowiednim komunikatem o błędzie (komunikaty są wypisywane w pasku stanu symulatora). |
||||||
|
RTS (ReTurn from Subroutine - powróć z podprogramu) SPR ←
SPR - 1 Polecenie umożliwia powrót z podprogramu, do którego wcześniej nastąpił skok przy pomocy rozkazu JSR. Pobiera ono ze stosu procesora PMC adres powrotny i umieszcza go w rejestrze licznika rozkazów. Dzięki temu następne polecenie wykonane zostanie z komórki za instrukcją JSR. Rozkaz RTS nie potrzebuje argumentów, jednak ze względu na spójność składni poleceń PMC w asemblerze wymagany jest dowolny argument za poleceniem RTS. Jeśli zastosujemy tryb adresowania pośredniego z postinkrementacją lub predekrementacją, to pomimo ignorowania tych danych sam tryb spowoduje modyfikację komórki zawierającej wskazanie. Najbezpieczniej więc używać trybu natychmiastowego z wartością zero, o ile nie będzie naszym zamiarem modyfikowanie jakiejś komórki przy wychodzeniu z podprogramu. UWAGA: Polecenie RTS może powodować awaryjne zatrzymanie pracy PMC. Stanie się to w przypadku próby pobrania adresu powrotnego z pustego stosu (jeśli żadna instrukcja JSR nie umieściła na tym stosie danych powrotnych). Dzieje się tak wtedy, gdy program napotka instrukcję RTS bez wykonania wcześniej instrukcji JSR. |
||||||
|
ADD (ADD - dodaj) ACR ←
ACR + ARG Polecenie dodaje do zawartości rejestru akumulatora wskazany trybem adresowania argument. Wynik dodawania umieszczany jest w akumulatorze. Ponieważ akumulator jest rejestrem 16 bitowym, w przypadku, gdy wynik dodawania nie mieści się na 16 bitach w kodzie U2, zostaje on obcięty do 16 bitów. Może to prowadzić do błędnych wyników: Na przykład dodawanie 32767 + 32767 da w wyniku -2, a oto dlaczego: 0111111111111111 32767 Sytuacja, gdy działanie arytmetyczne prowadzi do wyniku wykraczającego poza dopuszczalny zakres liczb nazywa się przy dodawaniu i mnożeniu nadmiarem (ang. overflow) oraz przy odejmowaniu niedomiarem (ang. underflow). Nadmiar i niedomiar zdarzają się nawet w systemach takich jak IBM. Jest to zupełnie naturalne zjawisko, z którym muszą w swoich programach walczyć programiści (i niekiedy przegrywają). |
||||||
|
SUB (SUBstruct - odejmij) ACR ←
ACR - ARG Polecenie odejmuje od zawartości rejestru akumulatora wskazany trybem adresowania argument. Wynik odejmowania umieszczany jest w akumulatorze. Podobnie jak przy dodawaniu również tutaj może dojść do błędów, jeśli wynik nie mieści się na 16 bitach w kodzie U2. Sytuacja taka nazywana jest niedomiarem (ang. underflow). Na przykład odjęcie od liczby -32768 liczby 1 daje w wyniku 32767, a oto dlaczego: 1000000000000000 -32768 |
||||||
|
MUL (MULtiply - mnóż) ACR ←
ACR x ARG Polecenie mnoży zawartość rejestru akumulatora przez argument wskazany trybem adresowania. Wynik mnożenia umieszczany jest w akumulatorze. Do polecenia MUL również odnoszą się uwagi dotyczące nadmiaru i obcinania wyników do 16 bitów. |
||||||
|
DIV (DIVide - dziel) ACR ← ACR : ARG Polecenie dzieli zawartość rejestru akumulatora przez argument wskazany trybem adresowania. Wynik umieszczany jest w akumulatorze. Operacja dokonuje dzielenia całkowitoliczbowego. Część ułamkowa jest tracona. Na przykład 7 : 2 da w wyniku 3 (2 mieści się 3 razy w 7 i zostaje reszta 1). UWAGA: Polecenie DIV może spowodować awaryjne zatrzymanie programu PMC w przypadku próby dzielenia przez 0. |
||||||
|
INC (INCrement - zwiększ o jeden) ARG ← ARG + 1 Polecenie zwiększa argument wskazany trybem adresowania o 1. Najczęściej będzie to tryb bezpośredni, czyli zawartość komórki pamięci, której adres przechowuje pole ARG w instrukcji PMC. Jeśli zostanie zastosowany tryb natychmiastowy (ARG zawiera bezpośrednio dane), to zawartość pola ARG będzie dodana do zawartości rejestru akumulatora. Takie zastosowanie instrukcji INC dubluje rozkaz ADD i może być stosowane wymiennie z nim. Instrukcja INC nie jest niezbędna do tworzenia programów. Ten sam efekt można osiągnąć przy pomocy instrukcji LDA, ADD i STA, jednak zwiększenie zawartości komórki pamięci wymaga użycia aż trzech wymienionych poleceń. Dzięki INC zrobimy to szybko i bardziej przejrzyście. Większość mikroprocesorów w prawdziwych komputerach posiada odpowiednik takiej instrukcji, więc nasza PMC nie będzie gorsza. |
||||||
|
RLA (RoLl Accumulator - obracaj bity akumulatora) jeśli ARG > 0,
to OBRÓĆ BITY ACR
O
ARG POZYCJI W LEWO, Z definicji operacji RLA wynika, iż bity akumulatora zostaną obrócone o ARG pozycji w lewo, jeśli ARG będzie liczbą dodatnią lub o |ARG| pozycji w prawo, jeśli ARG będzie liczbą ujemną. Obrót bitów oznacza przesunięcie wszystkich bitów na sąsiednie pozycje w prawo lub w lewo. Bity skrajne, które wychodzą z akumulatora trafiają na początek po drugiej stronie (wyobraź sobie, iż akumulator został sklejony końcami i bity przesuwają się wokoło jak grupa osób chodząca w kółko). Poniżej przedstawiamy zasadę działania tej instrukcji. ACR = 1011111111000000(2) - przed
wykonaniem polecenia RLA ACR = 1011111111000000(2) - przed
wykonaniem polecenia RLA Instrukcja RLA jest bardzo przydatna przy różnych operacjach na bitach akumulatora (np. przy łączeniu pól bitowych). Odpowiednie przykłady zastosowania znajdziesz w rozdziale poświęconym programowaniu PMC. |
||||||
|
AND (logical AND - iloczyn logiczny bitów) ACR ← ACR
AND ARG Instrukcja wykonuje iloczyn logiczny nad poszczególnymi bitami rejestru akumulatora i argumentu. Wynik umieszczany jest w akumulatorze. Operacja ta umożliwia badanie lub zerowanie określonych bitów akumulatora. Przykłady wykorzystania znajdziesz w rozdziale poświęconym programowaniu PMC. |
||||||
|
ORA (logical OR with Accumulator - suma logiczna bitów) ACR ← ACR
OR ARG Instrukcja wykonuje sumę logiczną nad poszczególnymi bitami rejestru akumulatora i argumentu. Wynik umieszczany jest w akumulatorze. Operacja ta umożliwia ustawianie lub łączenie określonych bitów akumulatora z bitami argumentu. Przykłady wykorzystania znajdziesz w rozdziale poświęconym programowaniu PMC. |
||||||
|
XOR (logical eX-OR - suma modulo 2 bitów) ACR ← ACR
EX-OR ARG Instrukcja wykonuje sumę modulo 2 nad poszczególnymi bitami rejestru akumulatora i argumentu. Wynik umieszczany jest w akumulatorze. Operacja ta umożliwia negowanie określonych bitów akumulatora. Przykłady wykorzystania znajdziesz w rozdziale poświęconym programowaniu PMC. Procesor jest centralnym układem służącym do przetwarzania informacji w PMC. Posiada on całkowitą kontrolę nad magistralą adresową, danych oraz sterującą. Pozostałe elementy PMC, pamięć i porty wejścia/wyjścia muszą się całkowicie podporządkować procesorowi. Protokoły komunikacyjne pomiędzy procesorem a pamięcią opisaliśmy już wcześniej, a teraz nadszedł czas na zajrzenie do środka procesora. Procesor PMC jest układem 16-bitowym, tzn. w jednej instrukcji potrafi przetworzyć porcję 16 bitów. Aby zachować prostotę PMC, co jest naszym głównym celem, zestaw rozkazów procesora składa się tylko z 16 różnych poleceń, które omówimy dokładnie w dalszej części tego rozdziału. Procesor posiada 10 bitową magistralę adresową. 10 bitów pozwala na zaadresowanie 210 komórek pamięci, czyli 1024. Pierwsze 8 adresów (od 0 do 7) zajęte jest jednak przez porty wejścia/wyjścia. Dlatego faktycznie komórek pamięci jest mniej o 8, czyli 1016. Magistrala danych jest 16 bitowa, co pozwala w jednym cyklu dostępu do pamięci lub portów we/wy przesłać 16 bitów informacji binarnej. Do sterowania pamięcią i portami procesor korzysta z magistrali sterującej, która zawiera cztery linie: MEM (wybór pamięci), IO (wybór portów), R (odczyt z pamięci lub portu w zależności od stanu linii MEM i IO) i W (Write - zapisz). |
![]() |
Zespół Przedmiotowy |
Materiały tylko do użytku dydaktycznego. Ich kopiowanie i powielanie jest dozwolone
pod warunkiem podania źródła oraz niepobierania za to pieniędzy.
Pytania proszę przesyłać na adres email: i-lo@eduinf.waw.pl
Serwis wykorzystuje pliki cookies. Jeśli nie chcesz ich otrzymywać, zablokuj je w swojej przeglądarce.
Informacje dodatkowe.