W02 AK2 Biernat


Architektura komputerów 2
Prof. PWr dr hab. inż. Janusz Biernat
Wykład 02
ARCHITEKTURA IA-32  charakterystyka instrukcji procesora.
ARCHITEKTURA LISTY ROZKAZÓW:
" 3 główne kategorie;
ć% działania (arytmetyczne, logiczne, ...)
ć% kopiowanie
ć% sterowanie
W architekturze CISC (IA-32 i Pentium) kategorie są wymieszane, wynikają z tego pewne kłopoty
(np. ze sposobem wykonywani działań), zmienny rozmiar kodu (1 bajt,..., 17 bajtów (IA-32),...), w
architekturze RISC działania są rozdzielone, wykonywane są jedynie na rejestrach, w sterowaniu
nie ma argumentów obliczanych, wszystko musi być podane  na tacy (warunek, adres docelowy),
jest stały rozmiar kodu (słowo maszynowe  4 bajty = 32bity), argumenty wyłącznie w rejestrach,
kopiowanie: pamięć -> rejestr W RISC dostęp do pamięci jest prosty, w CISC trudny.
Dodatkowymi problememi w CISC są duże nieregularności w wykonywaniu działań.
DZIAAANIA:
" arytmetyczne
" logiczne
" inne
ć% zmiana kodu
ć% zmiana formatu
Arytmetyczne: (dod/odej/mnoż/dziel)
modyfikacja kodów warunkowych (flagi)
Kody warunkowe (flagi)
Ä…
dodaj/odejmij sygnał  od tego zależy czy dodawane jest Y czy Y
CF  flaga przeniesienia, nadmiaru w NB, powiązana z wyższymi bitami, jeżeli występuje nadmiar
to jest 1
OF  nadmiar w U2, jeęeli występuje nadmiar to jest 1
SF  kopia najwyższego bitu, oznacza znak tylko jeżeli wynik jest poprawny
AF  przeniesienie połówkowe w systemie dziesiętnym, tylko szaleńcy realizują to bezpośrednio
ZF  flaga zera (jeżeli jest ustawiona na 1 to wynik jest zerem)
!!! pułapka: uzupełnienie NEG, należy zapomnieć o tej instrukcji ponieważ stan flagi CF nie ma
wpływu na działanie i wynik, nie da się obliczyć negacji liczby 64-bitowej.
realizacja:
poprawna realizacja to:
-X=0-X (można uwzględnić powiązanie)
Mnożenie:
MNOŻNA w rejestrze a (długość n=8/16/32/(64)), MNOŻNIK w dowolnym innym rejestrze
lub słowie w pamięci, bardzo rzadko mnoży się przez stałą i lepiej to zrobić innymi sposobami.
ILOCZYN PEANY znajduje się w rejestrach d i a, całość ma długość 2n, wyjątkiem jest mnożenia
al*inny rejestr 8-bitowy, bo w wynik jest długości ax. W rejestrze d znajduje się iloczyn górny, w a
dolny. Nie ustawiane są flagi C, ZF (sprawdzane jest to przed mnożeniem, żeby uniknąć go
ewentualnie) i SF bo nie wiadomo z której części ma być brana. Ustawiane jest CF i OF=1 jeżeli
iloczyn górny jest istotny, tzn. zawiera inne bity niż bity rozszerzenia nieskończonego.
mul (argumenty naturalne, jeżeli w d będzie jakakolwiek jedynka to są ustawiane flagi)
imul (argumenty całkowite /U2, jeżeli w d nie ma kopi najwyższego bitu w a to się ustawia flagi)
Dzielenie: (całkowiete)
DZIELNA w rejestrach d i a, DZIELNIK w innym rejestrze lub słowie w pamięci. Wynik:
iloraz w a, reszta w d. Sprawdzenie: iloraz*dzielnik+reszta. Dzielenie nie ustawia żadnych flag.
Jeżeli dzielnik jest zerem to sygnalizowany jest błąd nadmiaru w działaniu.
W RISC nie jest wykorzystywane ze względu na złożoność całego działania  jest rozbite na
dzielenie  proste i obliczanie reszty. W algorytmach powinno się unikać operacji dzielenia, bo jest
czasochłonne. Jeśli chcemy liczyć modulo  wykorzystujemy odejmowanie.
Operacje logiczne:
" AND/OR/XOR - normalnie, równolegle na wszystkich bitach, ustawiają flagi:
ć% SF  stan najwyższego bitu
ć% ZF  czy wszystkie bity są zerami
ć% CF=0 dla zachowania jednolitości
ć% OF bez zmian
" negacja logiczna NOT  nie ustawia żadnych flag,
ć% XOR $-1,arg  negacja wszystkich bitów z ustawieniem flag
ć% SUB $-1,arg
ć% SUB $0,arg  dwa ostatnie nie mają zastosowania (chyba, że dla zaciemnienia kodu)
STEROWANIE:
" skok (bezwarunkowy) ze śladem (wywołanie procedury/funkcji)
ć% CALL adres_docelowy
" skok warunkowy ze śladem
skocz_warunek hop
CALL adres_docelowy
hop:
" skok bezwarunkowy bez śladu (używać wyłącznie w warunkach najwyższej
konieczności!!!, np. jeżeli chcemy przedłużyć pętlę powyżej przewidzianej w architekturze).
Według guru programowania Donalda Knutha,  skoki bezwarunkowe są przestępstwem
przeciwko sztuce programowania .
" skok wyznaczony (IA-32)
jmp [ebx]  wskaznik do tablicy adresów
ć% wspomaganie ochrony danych
ć% uproszczenie realizacji wielokrotnego wyboru (instrukcji typu case)
ć% nie zaleca się używać bo skok jest nieprzewidywalny
ć% w architekturze RISC z założenia nie występują.
Rozgałęzienia (skoki warunkowe)
j war adres_docelowy (FALSE: następna instrukcja, TRUE: adres_docelowy:kolejna
instrukcja)
" warunki (wynik porównania):
ć% porównanie liczb całkowitych (U2)  argumenty liczbowe
ª% GT  grater than
ª% GE  grater or equal
ª% LT  less than
ª% LE  less or equal
ª% EQ  equal
ć% porównanie liczb naturalnych (NB)  adresy
ª% A  above
ª% AE  above or equal
ª% BE  below ora equal
ª% B  below
ª% EQ  equal
ć% stan flag (kodów warunkowych)
ª% jc, jnc  CF
ª% jo, jno  OF
ª% js, jns  SP
ª% jz, jnz  ZF
" rozkaz podstawienia warunkowego
ć% c war move arg_zródłowy, arg_docelowy  pozwala uniknąć rozkazów rozgałęzienia
Inne rozkazy:
" przesunięcia (shift) shr, shl, sar, sal
" przesunięcia cykliczne (rotate) rcl, rcr, rol, ror (zwykła i rozszerzona  z uwzględnieniem
przesunięcia CF)
ć% przesunięcia działają na łańcuchach bitów
" arytmetyczne (ustawiajÄ… flagi)
ć% inc arg (++arg)
ć% dec arg (--arg)
STOS:
" tymczasowy bufor rejestrów
ć% push arg (na szczyt stosu)
ć% pop arg (ze szczytu stosu)
" używany w tworzeniu bloku aktywacji (środowiska, kontekstu) funkcji (procedury)
" wskaznik stosu (%esp) wskazuje na początek obszaru wolnego (stos rośnie w dół), jeżeli
chcemy tam coś włożyć, to umieszczamy to pod adresem wskazywanym przez %esp, a
wskaznik zostaje zmniejszony o rozmiar włożonego elementu.
" jak wywołujemy funkcję czy procedurę to muszą wiedzieć gdzie zwrócić sterowanie po jej
wykonaniu, na stos jest umieszczany w takim przypadku adres powrotu (pierwsza instrukcja
po wywołaniu), argumenty i aktualny licznik rozkazów, dzieje się tak niezależnie od
zagnieżdżenia funkcji.


Wyszukiwarka

Podobne podstrony:
W02 AK1 Biernat
W08 AK2 Biernat
W06 AK2 Biernat
W05 AK2 Biernat
W01 AK2 Biernat
W09 AK2 Biernat
W07 AK2 Biernat
W03 AK2 Biernat
PodstawyProgramowania W02
Strona bierna
Aire W02
W02 manual ES v 1
Instrukcja GECO G 203 P01P S v03 w02 POL
469 W02 SKiTI wprowadzenie podstawowe pojecia
TO2 ETK W02 MetodaKlasyczna cz1

więcej podobnych podstron