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 BiernatW08 AK2 BiernatW06 AK2 BiernatW05 AK2 BiernatW01 AK2 BiernatW09 AK2 BiernatW07 AK2 BiernatW03 AK2 BiernatPodstawyProgramowania W02Strona biernaAire W02W02 manual ES v 1Instrukcja GECO G 203 P01P S v03 w02 POL469 W02 SKiTI wprowadzenie podstawowe pojeciaTO2 ETK W02 MetodaKlasyczna cz1więcej podobnych podstron