REJESTRY
Rejestry ogólnego przeznaczenia – jest to 8 rejestrów (AX, BX, CX, DX, SI, DI, SP, BP) są używane do najczęściej stosowanych rozkazów jako miejsce skąd pobieramy dane, miejsce przeznaczenia, wskaźniki do pamięci i jako liczniki.. Każdy z tych rejestrów może być załadowany zarówno z pamięci jak również można z nich przesyłać dane do pamięci. Używane SA również w operacjach arytmetyczno-logicznych.
Rejestry wskaźnikowe i indeksowe – mikroprocesor posiada 2 rejestry wskaźnikowe (SP, BP) i 2 indeksowe (SI, DI). Wszystkie SA rejestrami 16-bitowymi. Przechowywane w nich dane mogą być uzyte jako argumenty większości operacji arytmetycznych i logicznych. Jednak ich nazwy związane są z rolą jakie rejestry pełnią podczas adresowania pamięci operacyjnej
Rejestry segmentowe – służą do zapamiętywania adresów początków obszarów dzięki czemu procesor może rozróżnić który obszar w pamięci zawiera instrukcje do wykonania a który dane na których te instrukcje powinny zostać wykonane. Składa się z 4 rejestrów CS, DC, SS, ES
Rejestr znaczników (flagowy) - FLAGS rejestr ten jest zbiorem poszczególnych bitów kontrolnych zwanych znacznikami które wskazują wystąpienie określonego stanu. Znaczniki mogą być wykorzystywane przez procesor jak i programistę i określają one w jakim stanie znajduje się procesor.
Rejestr AX – rejestr 16 bitowy, nazywany rejestrem akumulatora. Używany zawsze przy wykonywaniu mnożenia i dzielenia. Jest najbardziej efektywnym rejestrem w operacjach arytmetycznych, logicznych, przesyłania danych. Podzielony jest na 2 8 bitowe części z czego górna nosi nazwę AH a dolna AL. Taki podział jest wygodny przy operacjach na danych 1 bjtowych.
BX- zwany rejestrem bazowym, gdyz wykorzystywany jest w niektórych trybach adresowania do przechowywania częście adresu nazywanej przesunięciem (offsetem). Adres ten wskazuje komórkę w obszarze pamięci nazywanym segmentem danych. Rejestr BX może być traktowany jako 2 8-bitowe rejestry BH i BL.
CX – używany głównie jako licznik odliczający powtarzające się fragmenty programów bądź pojedynczych rozkazów. Rejestr CX może być traktowany jako 2 8-bitowe rejestry CH i CL.
DX- jego głównym przeznaczeniem jest użycie go jako wskaźnika adresów w rozkazach we/wy. Poza tym może być również użyty w operacjach mnożenia i dzielenia jako rozszerzenie akumulatora. Rejestr DX można traktować jako 2 rejestry 8-bitowe DH i DL.
SI – pełni rolę rejestru indeksowego w instrukcjach łańcuchowych. Rejestr SI zawiera offset źródła. SI razem z rejestrem DI współpracuje z rejestrem DS. w instrukcjach związanych z adresowaniem łańcuchów znakowych.
DI - pełni rolę rejestru indeksowego w instrukcjach łańcuchowych. Jest bardzo podobnym rejestrem do rejestru SI. Zawiera on offset przeznaczenia. DI razem z rejestrem SI współpracuje z rejestrem DS. w instrukcjach związanych z adresowaniem łańcuchów znakowych.
BP – podobnie jak rejestry BX, SI, DI może być użyty jako wskaźnik pamięci z tym że rejestry BX, SI, DI wskazując na adres w pamięci odnoszą się do rejestru segmentowego DS. natomiast BP służąc za wskaźnik pamięci odnosi się do rejestru SS (segmentowego stosu).
SP – znany jest jako wskaźnik stosu. Rejestr ten daje położenie bieżącego wierzchołka stosu i jest analogiczny do rejestru IP. Zmieniając rejestr SP zmieniamy położenie wierzchołka stosu.
CS - wskazuje na 64KB bloku pamięci lub na segment kodu w którym znajduje się następny do wykonania rozkaz. Dokładne położenie tego rozkazu w segmencie kodu wskazywane jest przez offset którego wartość zawiera rejestr IP. Procesor 8086 nigdy nie pobiera rozkazów z segmentu innego niż CS. Rejestr CS może być zmieniony przez niektóre rozkazy np. rozkaz skoków, wywołań, powrotów. Rejestru tego nie można ładować bezpośrednio.
DS – wskazuje segment w którym SA zapamiętane zmienne używane w programie. Rejestrami stowarzyszonymi z DS określającymi offset w tym egmencie są rejestry BX, Si lub DI
ES – wskazuje położenie dodatkowego segmentu danych. Stosowany jest nie tylko do z góry określonych zastosowań a mianowicie stosuje się go gdy zachodzi potrzeba. Na przykład do utworzenia dodatkowego 64KB bloku pamięci potrzebnego do przechowywania danych jednak z nieco mniejsza dostępnością. Rejestr ES używany jest w rozkazach łańcuchowych a także wszędzie tam gdzie dokonywane są operacje na blokach pamięci, kopiowanie, porównywanie, przeszukiwanie, czyszczenie.
SS – rejestr segmentowy stosu wskazuje segment pamięci w którym pamięć może być adresowana za pośrednictwem wskaźnika stosu SP
IP – nazywany wskaźnikiem rozkazów i zawiera zawsze offset pamięci w którym zawarty jest następny rozkaz do wykonania. Bazowy adres segmentu kodu zawarty jest w rejestrze CS zatem pełny adres logiczny wykonywanego rozkazu jest w parze rejestrów CS:IP. Jedynym sposobem na zmianę jego zawartości jest wykonanie dowolnej instrukcji skoku
POJĘCIA DODATKOWE:
Adres – jednoznaczny identyfikator komórki pamięci. Programista piszacy programy w asemblerze operuje na adresach logicznych (segment:offset). Na podstawie adresu logicznego oblicza się adres fizyczny rozkazu w pamięci,
CMOS – 64-bajtowy obszar pamięci zawierający dane konfiguracyjne komputera. Dostep do obszaru CMOS możliwy jest poprzez funkcje systemu lub bezpośrednio poprzez porty o adresie 71h – dwukierunkowy rejestr danych pamięci CMOS i 70h – rejestr adresowy pamięci CMOS
Port – miejsce w wyróżnionej przestrzeni adresów we/wy identyfikowany przez swój adres będący liczbą od 0 do 65535. Każdy port pozwala wysłać/pobrać 1 bajt lub słowo do lub z rejestru. W języku asembler operacje na portach wykonuje się za pomocą rozkazów IN i OUT. Adres portu podaje się jako liczbę gdy jego wartość nie przekracza 255 bądź w rejestrze DX
Segment – w języku asembler wielkość zawarta w rejestrze segmentowym CS, określająca wraz z zawartością rejestru IP adres logiczny rozkazu zapisywany w programie jako para Segment:Offset
Stos- rodzaj pamięci tak zorganizowanej iż dostęp do niej możliwy jest tylko z jednej strony. Informację można zapisywać tylko na wierzchołku stosu, odczytywać również tylko z wierzchołka. Każdy zapis na stosie powoduje zwiększenie jego zawartości natomiast odczyt zmniejszenie. Informacje ze stosu SA odczytywane w odwrotnej kolejności niż były na nim zapisane.
DMA – ma za zadanie odciążyć główny procesor od wielu czynności związanych z przesyłaniem danych np. z dysku na dysk w sposób bezpośredni bez angażowania przy tym procesora głównego dzięki czemu dane urządzenie chcące pobrać dane nie musi czekać na obsłużenie go przez procesor który w danej chwili może być zajęty wykonywaniem innej czynności. Urządzenie DMA posiada własne rejestry 16-bitowe za pomocą których adresuje się obszary pamięci RAM
Kod ASCII – jest specjalnym kodem lub systemem który zamienia duże, małe litery, liczby znaki interpunkcyjne na liczby i na odwrót od 1 do 127, a także symbole matematyczne, poste znaki graficzne, znaki specjalne reprezentowane liczbami od 128 do 255.
PSP – 256 bajtowy blok wstępny programu, początek tego obszaru określony jest jako początek segmentu programu. Blok wstępny programu, PSP, stanowi obszar komunikacyjny między programem a systemem.
Jednostka wykonawcza EU – jej głównym zadaniem jest dekodowanie oraz wykonywanie kolejnych rozkazów opuszczających, zapełnioną przez układ sprzężenia z magistralą tzw. kolejkę rozkazów. Wykonanie rozkazów odbywa się przy udziale ALU, związanego z nią rejestru znaczników, rejestrów arytmetycznych ogólnego przeznaczenia oraz programowo niedostępnych rejestrów roboczych
ALU – jest ona ta częścią procesora która wykonuje operacje arytmetyczne takie jak dodawanie i odejmowanie, a także elementarne operacje logiczne jak sumowanie, mnożenie i sumowanie modulo 2. Argumentami mogą być bajty lub słowa. Źródłem argumentów operacji jakie wykonuje ALU może być: dostępny programowo rejestr procesora, komórka pamięci, operand bezpośredni zapisany w wykonywanej instrukcji programu. W fazie wykonania dane wejściowe dla ALU znajdują się w rejestrach a wyniki kierowane są do rejestrów i znaczników arytmetycznych.
Rejestry – rejestr jest częścią pamięci wewnętrznej procesora o niewielkiej liczonej w bitach pojemności. Jest to zwykle układ bistabilnych obwodów elektrycznych służący do przechowywania informacji. Pewne rejestry procesora są związane określonymi operacjami. Rejestry są na ogół szybsze niż układy pamięci operacyjnej. Rejestry mogą być używane do modyfikacji adresów, pamiętania adresów powrotu z podprogramu, jako liczniki rozkazów, akumulatory pomocnicze lub pamięci podręczne
Znaczniki – każdy znacznik jest bitem w rejestrze znaczników który wskazuje czy wystąpił określony stan. Jedne instrukcje ustawiają znaczniki inne pozwalają badać ich stan. Procesor 8086 wykorzytuje 8 znaczników które przechowywane są w rejestrze znaczników na określonych pozycjach.
Tryb adresowania – określanie miejsca gdzie jest umieszczony adres argumentu rozkazu lub sposób w jaki jest on obliczany. Wyróżniamy 4 podstawowe tryby adresowania: poprzez rejestr, bezpośrednie, natychmiastowe, pośrednie poprzez rejestr.
Adres logiczny – to adres zbudowany z dwóch składowych z których jedna odnosi się do początku segmentu danych a druga część do jakiegoś miejsca w tym segmencie liczonego od początku tegoż segmentu i nazwya się offsetem.
Urządzenia we/wy – obsługa ich odybywa się w dwojaki sposób – za pomocą rozkazów wejścia/wyjścia i za pomocą adresowania pamięci. Niektóre wejścia i wyjścia urządzeń kontrolowane SA przez porty które określone są SA adresami I/O w 64KB przestrzeni adresowej oddzielonej od 1MB przestrzeni adresowej pamięci. Ze względu na jej niewielką wielkość służy do zapewnienia właściwego sterowania urządzeniami we/wy
Magistrala – grupuje ona wspólne dla kilku urządzeń połączenia wykorzystywane do przesyłania sygnałów, nadawanych z jednego z kilku możliwych źródeł do jednego lub kilku miejsc przeznaczenia. Jeśli wysyłane sygnały mają być poprawnie odebrane to w danej chwili liniami magistrali powinno sterować jedno urządzenie. Natomiast Dan transmitowane magistralą mogą być odbierane przez wszystkie urządzenia dołączone do niej. Procesor 8086 posiada magistrale 20-bitową.
Architektura von Neumanna:
Posiada standardowy podział na pamięć, procesor i urządzenia we/wy
Są w niej wykorzystywane trzy kluczowe koncepcje:
-dane i rozkazy ą przechowywane w tej samej pamięci umożliwiającej zapis i odczyt
-zawartość tej pamięci może być adresowana przez wskazanie miejsca, bez względu na rodzaj zawartych tam danych
-wykonywanie rozkazów następuje w sposób szeregowy (z wyjątkiem określonych przypadków np. skoków) rozkaz po rozkazie
W oparciu o nią budowane są praktycznie wszystkie komputery
Architektura harwardzka – opiera się na użyciu dwóch oddzielnych szyn dla danych i rozkazów dzięki czemu w trakcie pobierania argumentów wykonywanej właśnie instrukcji można równocześnie zacząć pobieranie następnego słowa rozkazowego. Skraca to cykl rozkazowy i zwiększa szybkość pracy. Obszary adresowe pamięci danych i programu są rozdzielone. W architekturze tej stosuje się inne rozkazy dla pamięci programu i inne dla pamięci danych. Wada tego rozwiązania jest utrudniony przepływ danych z pamięci programu do obszaru pamięci operacyjnej.
Akumulator – Nazwa rejestru procesora w jednoadresowym formacie rozkazu. Akumulator zawiera jeden z argumentów i jest używany do przechowywania wyniku.
Pamięć podręczna – specjalna pamięć buforowa, mniejsza i szybsza niż pamięć główna, używana do przechowywania kopii rozkazów i danych z pamięci głównej, które najprawdopodobniej będą potrzebne procesorowi jako następne i które zostały automatycznie uzyskane z pamięci głównej.
Pamięć ROM – to pamięć stała zawierająca stały wzór danych który nie może być zmieniony. Możliwe jest jedynie jej odczytywanie. Jej zaletą jest nieulotność. Pamięć ROM stosuje się w mikroprogramowaniu np. programów systemowych, biblioteczne dla często używanych funkcji.
Pamięć RAM – jej cechą charakterystyczna jest to że można w niej zarówno zapisać i odczytać informacje. Zarówno odczyt jak i zapis jest dokonywany za pomocą sygnałów elektrycznych. Inną własnością pamięci RAM jest jej ulotność tzn musi mieć ciągłe źródło zasilania aby jej wartość nie znikła. Zatem jest używana to przechowywania danych tymczasowych. Pamięci RAM można podzielić na statyczne i dynamiczne. W pamięciach dynamicznych dane są przechowywane za pomocą kondensatorów natomiast w statycznych za pomocą przerzutników.
Pamięć wirtualna – przestrzeń pamięci która może być traktowana przez użytkownika systemu komputerowego jako adresowalna pamięć główna i w której adresy wirtualne są odwzorowane w zbiorze adresów rzeczywistych. Rozmiar pamięci wirtualnej jest ograniczony przez schemat adresowania systemu komputerowego oraz przez wielkość dostępnej pamięci pomocniczej.
RDTSC – specjalna instrukcja która odczytuje rejestr mikroprocesora któ®ego zawartośc zwieksza się z każdym taktem zegara systemowego procesora. Po wykonaniu instrukcji w rejestrach EDX i EAX zostanie umieszczona aktualna wartość licznika cykli
Architektura systemu komputerowego - model RTL
Mikroprocesor jest układem sekwencyjnym składającym się z bloków funkcyjnych. Typowy układ mikroprocesora zawiera następujące elementy:
układ pobierający instrukcje,
układ sterujący (wykonujący instrukcję),
układ arytmetyczno-logiczny,
blok uniwersalnych rejestrów,
blok akumulatora,
układy sterujące przepływem danych na magistralach.
ADRESOWANIE
Adresowanie poprzez rejestr / adresowanie natychmiastowe– jest najszybszym i najprostszym sposobem wskazywania argumentów w którym stała 8,16 czy 32 bitowa jako argument źródłowy zawarta jest w rozkazie a nie w rejestrze czy w komórce pamięci
Adresowanie bezpośrednie – to tryb adresowania podobny do adresowania natychmiastowego z tym że w rozkazie zawarty jest adres efektywny a nie dane natychmiastowe. Adres efektywny wyznacza położenie argumentu od początku segmentu. Argumentem adresowania bezpośredniego jest najczęściej etykieta
Adresowanie pośrednie poprzez rejestr – w trybie tym adres efektywny argumentu znajduje się w rejestrze bazowym BX lub we wskaźniku bazy BP, bądź w rejestrze indeksowym SI lub DI. Rejestry które są argumentami pośrednimi zapisujemy w nawiasach kwadratowych.
Adresowanie pośrednie poprzez rejestr bazowy – w trybie tym asembler oblicza adres efektywny przez dodanie zawartości offsetu (przesunięcia) do zawartości rejestru BX lub BP. Tryb ten jest wygodny w przypadku uzyskiwania dostępów do struktur danych umieszczonych w różnych miejscach pamięci.
Adresowanie indeksowane bezpośrednie – adres efektywny jest sumą dwóch składników mianowicie przesunięcia i rejestru indeksowego DI lub SI. Taki rodzaj indeksowania jest wygodny do operowania na tablicach. Przesunięcie wskazuje początek tablicy natomiast rejestr indeksowy jej element.
Adresowanie indeksowane bezpośrednie poprzez rejestr bazowy – w trybie tym adres efektywny jest sumą rejestru bazowego, indeksowego oraz ewentualnie przesunięcia. Tryb ten nadaje się na operowaniu na tablicach dwuwymiarowych. W rejestrze przechowywany jest adres początkowy tablicy, natomiast przesunięcie i rejestr indeksowy dotyczyć będą wierszy i kolumny.
ZNACZNIKI:
Znaczniki dzielimy na:
Znaczniki Arytmetyczne – informują o pewnych cechach otrzymanego wyniku po wykonaniu operacji arytmetycznej bądź logicznej. Można je badać za pomocą specjalnego zestawu instrukcji skoków warunkowych. Dzięki temu w zależności od stanu badanych flag można zmieniać działanie programu.
Do znaczników arytmetycznych zaliczamy:
C – znacznik przeniesienia (po wykonaniu operacji arytmetycznej nastąpiło przeniesienie jedynki na najstarszej pozycji jej wyniku)
P – znacznik parzystości (wynik ostatniej operacji logicznej lub arytmetycznej zawiera parzystą ilość jedynek)
A – przeniesienie pomocnicze (podobnie jak flaga c z tym że przeniesienie było z 3 na 4 bit bądź pożyczką z 4 na 3)
Z – znacznik zera (wynik ostatniej operacji arytmetycznej lub logicznej byłz erem)
S – znacznik znaku (określa wynik ostatniej operacji arytmetycznej (dodatni bądź ujemny))
O (bądź V) – znacznik przepełnienia (wynik ostatnij operacji arytmetycznej nie mieści się w akumulatorze))
Znaczniki kontrolne - ustawiane lub zerowane programowo celem wymuszenie odpowiedniego sposobu pracy procesorze)
Zaliczamy do nich:
T – znacznik pułapki (ustawiony w stan 1 powoduje wprowadzenie procesora w tryb pracy krokowej umożliwiający po każdym wykonanym rozkazie wygenerowanie przerwania i przejście do specjalnych procedur obsługi (np. programów uruchomieniowych), jego wyzerowanie powoduje powrót procesora do normalnej pracy)
I - Znacznik przerwań (ustawiony na 1 powoduje odblokowanie systemu przerwań procesora. Zewnętrzne przerwania maskowe mogą przerwać realizację wykonywalnego aktualnie programu i uruchomienie procedury obsługi przerwania, jego wyzerowanie oznacza że tego typu przerwania są ignorowane przez procesor)
D – znacznik kierunku (jest uwzględniany przy wykonywaniu działań na łańcuchach. Jeżeli ma wartość 1 to przetwarzanie łańcuchów odbywa się w kierunku rosnących adresów a jeśli 0 to w kierunku malejących adresów)
Mikrokod-
Mikroinstrukcje-
Pamięć ROM
Magistrala