Przykładowe pytania egzaminacyjne i zadania z „Architektury komputerów”
maj 2008
Pytania mają charakter przykładowy i nie obejmują całego materiału wymaganego do egzaminu.
A. Podstawowe zasady działania komputera
Pobranie rozkazu z pamięci -> dekododowanie kodu rozkazowego -> obliczenie adresu efektywnego argumentu -> obliczenie adresu fizycznego argumentu -> pobranie argumentu z pamięci -> wykonanie rozkazu -> zapisanie wyniku do pamięci -> wyznaczenie położenia następnego rozkazu -> pobranie rozkazu z pamięci...
Nie bardzo wiem, o który podział chodzi. Jeśli o podział na RAM i ROM to:
ROM- Read-Only Memory, pamięć wyłącznie do odczytu.
RAM- Random Access Memory, pamięć swobodnym.
Istnieją następujące tryby: rzeczywisty, chroniony, V86.
Tryb rzeczywisty jest to tryb wprowadzony w celu utrzymania kompatybilności wstecznej po procesorach 8086/8088, można było w nim używać pamięci o rozmiarze do 1MB. Tryb chroniony to tryb, w którym procesor stosuje inne techniki adresowania co pozwala zainstalować aż 4GB pamięci (w nowszych procesorach do 64GB). Tryb V86 jest to tryb wprowadzony w architekturze Ia32, stanowi odmianę trybu chronionego, ale programy są wykonywane tak jak w trybie rzeczywistym.
W przypadku rozkazów niesterujących zawartość rejestru EIP jest zwiększana o ilość bajtów zajmowanych przez kolejny rozkaz, jeśli mamy do czynienia z instrukcjami sterującymi to oprócz ilości bajtów kolejnego rozkazu dodawane jest przesunięcie określone przez skok.
B. Kodowanie danych i instrukcji
NKB – zwykły kod binarny, zakres liczbowy w jego przypadku wynosi <0;2^n), gdzie n to ilość zapisanych bitów.
Znak-moduł – możliwość kodowania liczba ujemnych, o znaku liczby mówi pierwszy jej bit, trudności w wykonywaniu działań na liczbach ujemnych w tym systemie.
U2- kod uzupełnień do dwóch. Zakres liczbowy (-2^n/1;+2^n/2). Można na nich wykonywać dowolne działania arytmetyczne i wynik będzie prawidłowy, podstawowy system kodowania liczb ze znakiem w komputerach.
BCD – kod, w którym kodowane są cyfry dziesiętne cyfry, np 255 = 001001010101 (wersja upakowana). Istnieją dwie wersje tego kodu- upakowana i nieupakowania.
Do znacznika CF (liczby bez znaku) lub OF (liczby ze znakiem) wpisywana jest wartość 1.
Little endian- młodsze bajty zajmują niższe adresy w pamięci.
Big endian- młodsze bajty zajmują wyższe adresy w pamięci.
Porównania dokonuje się rozkazem CMP. Dokonuje on odejmowania operandów, ustawia znaczniki, ale nigdzie nie wpisuje wyniku tego odejmowania.
0100 0000 1111 1000 0000 0000 0000 0000
Bit znaku = 0
Wykładnik = 10000001 = 129
Mantysa= 11110000000000000000000
Liczba = mantysa ^127-wykładnik =
111.1 1= 7,75
Wartości specjalnie są to wartości , które nie są liczbami, ale zachowują się jak liczby w obliczeniach. Występują one, gdy wykładnik zawiera same zera bądź jedynki, przykładem wartości spacjalnej jest nieskończoność.
Zaokrąglenie do zera (bajty nie mieszczące się w mantysie są pomijane), zaokrąglenie w kierunku liczby najbliższej (jako zaokrąglenie przyjmowana jest wartość najbliższa nieskończenie dokładnemu wynikowi), zaokrąglenie w górę (każde obliczenie wykonywane dwa razy, za jednym razem zaokrąglenie w górę, za drugim w dół- w rezultacie otrzymujemy górną i dolną granicę dokładności).
Liczby bliskie zera są traktowane jako wartości specjalne , rezygnuje się z warunku normalizacji, zmniejsza się dokładność mantysy, a wykładnik można rozszerzyć w kierunku liczb ujemnych. W technice niedomiaru stopniowanego przyjęte są dwa założenia:
- wykładnik zawierający same zera będzie traktowany jak gdyby zawierał liczbę 1;
-niejawny bit mantysy może zawierać 0 zamiast 1.
Fld- załadowanie liczby zmiennoprzecinkowej na wierzchołek stosu koprocesora
Fst- załadowanie liczby zmiennoprzecinkowej z wierzchołku stosu koprocesora do pamięci.
Są to liczby, które powstają jeśli niemożliwe jest żadne inne działanie, wynikiem każdego wyrażenia z wartością NaN jest również NaN. Występują gdy zamaskowany jest bit IE w rejestrze stanu koprocesora (IM =1 ).
Najmłodsze bity są dodawane/odejmowane w zwykły sposób (operacje ADD i SUB), natomiast w starszych należy uwzględnić wystąpienie nadmiaru w młodszych (rozkazy ADC i SBB). Mnożenie i dzielenie zawsze wykonywane są na liczbach podwójnej długości (w przypadku dzielenia wartośc początkowa, w przypadku mnożenia wynik) i są przechowywane w formacie EDX:EAX. Dzielenie wpisuje wynik do EAX i resztą do EDX, w przypadku mnożenia starsza część wyniku jest po prostu wpisywana do EDX.
Bajty rozkazu:
-pierwszy: kod operacji, bity: d (mówi, gdzie ma się znaleźć wynik), w (tryb 16/32 bitowy lub 8 bitowy);
-drugi: pole mod (przesunięcia, modyfikacje adresowe), pole reg (rejestr występujący w działaniu), pole r/m (rejestr drugi, który może wskazywać miejsce w pamięci);
-trzeci (opcjonalny, SIB): współczynnik skali, rejestr indeksowy, rejestr bazowy
- kolejne bity: argumenty liczbowe/przesunięcia.
W celu zmiany trybu na 32 bitowy (w trybie 16 bitowym) i na 16 bitowy (w trybie 32 bitowym).
C. Mechanizmy adresowania
-modyfikatorami mogą być dowolne rejestry ogólnego przeznaczenia (EAX, EBX, ECX, EDX, ESI, EDI, EBP, ESP);
-może wystąpić drugi rejestr modyfikacji, ale nie może nim być rejestr ESP;
- może wystąpić współczynnik skali;
Rozkaz LEA wyznaczna adres efektywny w trakcie wykonywania programu, podczas gdy wartośc operatora OFFSET obliczana jest w trakcie translacji (asemblacji), LEA nigdy nie odczytuje zawartości lokacji pamięci.
Można go wykorzystać do przeskakiwania komórek pamięci o rozmiary liczb w konkretnym formacie. Przykładowo jeśli rejestr EBX zawiera komórkę pamięci, w której jest int (format 4-bajtowy) to żeby przejśc na kolejną liczbę w pamięci trzeba przeskoczyć 4 bajty. Można jest poprostu dodać rozkazem add, ale jeśli modyfikacje adresową zapiszemy tak(przykładowo): mov eax,[ecx+ebx*4]
to wystarczy zinkrementować liczbę w EBX by uzyskać kolejną liczbę.
5. W celu zmiany trybu na 32 bitowy (w trybie 16 bitowym) i na 16 bitowy (w trybie 32 bitowym).
D. Programowanie w asemblerze
II część wykładów, strona 76, nie chce mi się tego rozpisywać :P
Mówią jaki rozmiar pamięci należy zarezerwować dla zmiennej/stałek (np bajt, słowo itp).
Jest to rejestr programowy, który określa adres komórki pamięci operacyjnej, do której zostanie przesłany aktualnie tłumaczony rozkaz lub dana.
E. Operacje stosu i podprogramy
Push- zmniejsza zawartośc esp o 4
Pop- zwiększa zawartośc esp o 4.
add esp,12
Rozkazy CALL i INT są to rozkazy wywołania podprogramu. W przypadku rozkazu CALL należy podać nazwe podprogramu, w przypadku rozkazu int należy podać do odpowiedniego rejestru nr katalogowy podprogramu (programy są tutaj wywoływane za pośrednictwem tzw. ‘tablicy wektorów’).
Rozkazy RET i IRET służą do powrotów do programu głównego, ten pierwszy jeśli wywołanie nastąpiło za pomocą CALL, ten drugi INT (albo gdy podprogram został wywołany na skutek przyjścia przerwania bądź wystąpienia wyjątku procesora).
Dostęp do nich uzyskuje się przez odjęcie od adresu (umieszczonego w ebp) odpowiedniej ilości bajtów, np
mov [ebp-4],eax
Przez:
-rejestry
-stos
-ślad
-bufory
F. Lista rozkazów (instrukcji) procesora
Wszystkie poniższe operacje są wykonywane na pojedyńczych (odpowiadających sobie pod względem ‘młodości’) bitach.
XOR – dodawanie modulo 2
AND – iloczyn logiczny
TEST – iloczyn logiczny, ale bez wpisywania wyniku
OR – suma logiczna
NOT – negacja bitowa
Poza tym występuje sporo rozkazów przesunięć bitowych, np. SHL, SHR, ROL, SHLD, SHRD, SAL, SAR itp.
Rozkazy MOVSB, MOVSW i MOVSD (różnią się tylko rozmiarami przesyłanych wartości) powodują przesłanie bajtu w rejestrze ESI do lokacji pamięci wskazanej przez rejestr EDI.
Przedrostek REP przed tymi rozkazami powoduje ich wykonywanie (z inkrementacją edi, esi i dekrementacją ecx) aż w rejestrze ecx nie znajdzie się wartość 0.
Rozkazy te służą przede wszystkim do zastosowań multimedialnych. Mozna za ich pomocą wykonac jedno działanie jednocześnie na kilku liczbach. W przypadku MMX służą do tego rejestry 64-bitowe, a w przypadku SSE rejestry 128 bitowe.
Arytmetyka nasycenia- sposób przeprowadzania obliczeń na całkowitych liczbach binarnych, w której reakcją na przekroczenie zakresu liczb jest przypisanie wynikowi górnej bądź dolnej granicy zakresu.
Przywraca rejestr znaczników, który został zachowany przed wywołaniem podprogramu.
G. Sterowanie pracą urządzeń zewnętrznych
Sterowanie pracą urządzeń jest realizowane za pomocą podzespołów tworzących układy wejścia/wyjścia; podzespoły te umożliwiają testowanie stanu (gotowości) urządzenia, wysyłanie poleceń do urządzenia oraz wysyłanie i przymowanie danych; od strony procesora komunikacja ta odbywa się zazwyczaj przez zapis, odczyt rejestrów zainstalowanych w układach wejścia/wyjścia.
-tablica deskryptorów przerwań (rozbudowana wersja tablicy wektorów przerwań), zawiera 256 deskryptorów (0-255). Dostęp do niej ma wyłącznie system operacyjny;
-linie IRQ (Interrupt ReQuest)
Istotne w systemie przerwań jest to, że przed wywołaniem programu obsługi przerwania (w architekturze IA32) zapamiętywane są na stosie rejestry CS, EFLAGS i EIP.
Zawiera adres procedury obsługi przerwania sprzętowego związanego z konkretnym urządzeniem.
Jest to przestrzeń adresowa, w której dostępne są rejestry urządzenia.
Priorytet przerwania jest jego ‘ważnością’. Jeśli w momencie obsługi przerwania przyjdzie przerwanie o wyższym priorytecie, bieżąca akcja zostanie wstrzymana i komputer przejdzie do obsługi tego przerwania o wyższym priorytecie.
Jest to sytuacja odwrotna niz gdy występuje przestrzeń adresowa portów. Tutaj rejestry urządzenia są dostępne jako część przestrzeni adresowej pamięci.
Przerwania niemaskowalne to takie, których nie da się zamaskować (wyzerowanie znacznika IF nic nie daje). Przykładem takich przerwań jest przerwanie generowane w momencie wystąpienia błędu pamięci RAM.
Są dwie metody:
-metoda przeglądania(polega na wielokrotnym odczytywaniu stanu urządzenia, aż do chwili gdy odczytany stan będzie wskazywać zakończenie operacji);
-metoda przerwaniowa (III część wykładu, strony 48-50, ciężko stwierdzić co tam jest najbardziej istotne).
Trzeba to wykonywać w trybie V86 (tryb chroniony nie zezwoli na taką operację). W trybie 13H (prosty tryb graficzny) pamięć ekranu umieszczona jest od adresu ficzycznego A0000H; kolejne bajty w tym obszarze opisują kolory pikseli wg standardowej palety VGA (którą można zmienić).
H. Architektury CISC i RISC
CISC:
-duża liczba rozkazów
-duża liczba trybów adresowania
...
bartek0419