ask egzamin rozwiazny


Rozwiązanie przykładowych zadań
egzaminacyjnych z ASK
Dr inż. Ignacy Pardyka
15 września 2010
Zadanie 1 (10p.)
W programie zadeklarowane sÄ… dwie zmiennex,ytypu ASK, gdzie ASK
została zdefiniowana jako typunion. Zgodnie z deklaracją tablicax.Ajest
składową unii, więc jej adres pokrywa się z adresem zmiennej x. Kolejnym
elementom tablicy x.A przypisano wartości (zgodnie z tabelą kodów znaków
ASCII):x.A[0] = 0x39, x.A[1] = 0x2B, x.A[2] = 0x33, x.A[3] = 0x3E.
Elementy tablicy są jednobajtowe, więc A[0] jest w pamięci pod adresem
zmiennej x, a pod kolejnymi adresami odpowiednio elementy A[1], A[2],
A[3]. W celu obliczenia wartości prawej strony instrukcji przypisania:
y.c = (x.a & 0xFF 00 00 00) | 0x80 00 00 00;
zauważamy najpierw, że składowa x.a jest pod tym samym adresem, co
zmienna x, a pod tym adresem jest też element x.A[0]. Zmienna x.a jest
typuint, więc jest reprezentowana na 4 bajtach, dlatego trzeba przyjąć
założenie odnośnie do konwencji reprezentacji danych wielobajtowych. Jeśli
stosowana jest konwencja little-endian, to pod adresem składowej x.A[0] jest
najmłodszy bajt zmiennej x.a. Zmienna x.a jest więc reprezentowana przez
wzorzec:0x3E 33 2B 39. Po operacji koniunkcji bitowej mamy:
x.a & 0xFF 00 00 00 = 0x3E 00 00 00
a po operacji alternatywy bitowej:
0x3E 00 00 00 | 0x80 00 00 00 = 0xBE 00 00 00.
Zatemy.c = 0xBE 00 00 00. Zmienna y.c jest składową unii y. Cztery
bajty zmiennej y.c są umieszczone w pamięci (zgodnie z konwencją little-
endian). Pod tym samym adresem jest zmienna y.a typu całkowitego ze
znakiem (int) zakodowana w kodzieU2. Dlatego 32-bitowy wzorzec dla
y.a to0xBE 00 00 00 = 1011 1110 0...0B. Wartość dziesiętną tej liczby
odczytujemy wprost jako
y.a = -1 × 231 + 1 × 229 + 1 × 228 + 1 × 227 + 1 × 226 + 1 × 225. (1)
1
Wartość wyrażenia 1 jest ujemna, a jej postać dziesiętna (po przeprowadze-
niu rachunków) to -33 × 225.
Składowa unii y.b jest typufloat, więc reprezentowana jest zgodnie
ze standardemIEEE-754na 4 bajtach. Adres zmiennej y.b pokrywa siÄ™ z
adresem y.c, więc jej 32-bitowy wzorzec to
y.b = 0xBE 00 00 00 = 1011 1110 0...0B.
Obliczamy wartość dziesiętną liczby zmiennoprzecinkowej:
" liczba jest ujemna, bo najstarszy bit ma wartość 1
" cecha ma wzorzec bitowy:0111 1100B, czyli wartość: 124
Ostatecznie, wartość liczby y.b, to
y.b = -1.0 × 2124-127 = -2-3 = -0.125. (2)
Zmienna y.c jest typuunsigned, a więc jest reprezentowana w natural-
nym kodzie dwójkowym na 4 bajtach. Jej wzorzec bitowy0xBE 00 00 00
odpowiada wartości dziesiętnej:
B × 167 + E × 166 = 166(11 × 16 + 14) = 190 × 166 = ... (3)
Zmienna y.f.s to pole bitowe struktury f, która jest składową unii y.
Struktura y.f jest pod adresem zmiennej y.c, więc jej wzorzec bitowy to
y.f = 0xBE 00 00 00. Zgodnie z konwencjÄ… little-endian bajty zmiennej y.f
są umieszczone w pamięci począwszy od najmłodszego. Zgodnie z definicją
tej struktury kolejne pola bitowe mają wartości: y.f.m = 00...0= 0 (na
23 bitach),y.f.c = 0111 1100B = 124,y.f.s =1(1 bit).
Zadanie 2 (5p.)
Praca procesora sprowadza siÄ™ do realizacji cykli rozkazowych. Kolejne fazy
cyklu to:
1. Faza pobrania rozkazu. W liczniku rozkazów EIP jest adres rozkazu,
który ma być pobrany z pamięci. Procesor wystawia zawartość EIP
na magistralę adresową, a pamięć zwraca zaadresowane bajty poprzez
magistralÄ™ danych. Procesor umieszcza pobranÄ… instrukcjÄ™ w rejestrze
rozkazów i zwiększa zawartość EIP, aby wskazywał na kolejną instruk-
cję (domyślnie jest to instrukcja pod kolejnym adresem w pamięci).
2. Faza dekodowania instrukcji. Procesor dekoduje instrukcjÄ™ i, w tym
przypadku, okazuje się, że jest to instrukcjacall adr. Rozpoznawany
jest też tryb adresowania operandów.
2
3. Faza pobierania operandów. W przypadku instrukcjicalloperandem
jest adres pierwszej instrukcji podprogramu. Operand zostaje pobrany
zgodnie z występującym, aktualnym trybem adresowania.
4. Faza wykonania rozkazu. W przypadku instrukcjicallprocesor zapa-
miętuje na stosie (adres wierzchołka stosu jest w rejestrze ESP) bieżącą
zawartość licznika rozkazów EIP, a następnie do EIP zapisuje wartość
operandu ustalonego w poprzedniej fazie. Od tej chwili w EIP jest ak-
tualna wartość adresu instrukcji, która ma być pobrana w następnym
cyklu rozkazowym.
5. Jeśli nie wystąpiło przerwanie, to bieżący cykl rozkazowy został za-
kończony.
Zadanie 3 (5p.)
Zmienne lokalne podprogramów są standardowo przechowywane na stosie
w pamięci. Wykonanie podprogramu rozpoczyna się od realizacji rozkazów
zapamiętujących na stosie zawartości rejestru EBP (bieżącego wskaznika
ramki stosu) i wpisania do EBP adresu wierzchołka stosu (czyli adresu, pod
którym w pamięci została przed chwilą zapamiętana stara wartość EBP).
Kolejne instrukcje podprogramu służą do rezerwowania miejsca na stosie
dla zadeklarowanych zmiennych lokalnych. Zmienne lokalne sÄ… adresowane
względem EBP, dzięki czemu są dostępne jedynie z wnętrza podprogramu
(do zapisu lub odczytu), bez potrzeby ich zdejmowania ze stosu. Przed
zakończeniem procedury, powinny w niej występować instrukcje służące do
wpisania do rejestru ESP zawartości rejestru EBP, a następnie odtworzenia
ze stosu poprzedniej wartości rejestru EBP. Po tej operacji zmienne lokalne
są niedostępne w standardowy sposób (czyli są zniszczone).
Zmienne globalne przechowywane są w pamięci w segmencie danych za-
inicjalizowanych.datalub niezainicjalizowanych.bss. Dostęp do nich jest
realizowany za pomocą adresów ustalanych przed wykonaniem programu,
tj. na etapach kompilacji i konsolidacji.
3


Wyszukiwarka

Podobne podstrony:
20091217 Egzamin RozwiÄ…zanie zadania
ASK egzamin
Egzamin z rozwiÄ…zaniami 2
ask egzamin Grupa A
ask egzamin grupa B
ask egzamin pytania
2012 Egzamin 2 rozwiazania
ASK EGZAMIN

więcej podobnych podstron