AK wykład 28.11.2014
Poprzedni: budowa procesora+tworzenie zestawu rozkazów ; cisc, mlo rejestrów, 8,6,16
Alternatywa: pozbycie się instrukcji rzadko używanych(arytmetyka skoków, dzielenia, wprowadzenie większej licz rejestrow)
RISK
Architektura x86 rozszerzenie zestawu rozkazu
REJESTRY
Do ogólnego przeznaczenia
EAX, ECX, EDX, EBX, ESP,EBP,ESI,EDI -PODST!!1
Mnożenie: arg w akumulatorze, wynik w b i d ;
eSP, ebp- rejestry wskaźnikowe; esi-indeks zrodła; edi-indeks celu
8 rejetro og.przeznaczenia
Jest również zestaw rejestrów segmentowych, jawnie nieuzywany; pozostałoś cpo pracy w tr. Rzeczywistym,
Mamy licznik rozkazów-EIP
EFLAGS- flagi
Rejestry w EM64T
Rejestry ogólnego przezn-64 bitowe rax,rcx,rdx,rb.,rsp,rbp,rsi,rdi
DODAtkowe: r8,r9,r10,r11,r12,r13,r14,r15,
32bt: eax,ecx,edx,ebx,esp,ebp,esi,edi
Dodatkowe: r8d,r9d….
16bit: ax,cx,dx,bx,sp,bp,si,di
R8W,R9W….
8bit: al,cl,dl,bl,spl,bpl,sil,dil,
Dod: r8b,r9w…
Jedn zmiennoprzecisnkwa posiada stos ośmiu rejestrów 80bitowyc st0-st7
Ogolnie mamy do dyspozycji 16 rejestrów ogólnego przeznaczenia
Rejestry w em64t
Operacje 8i16 bit np. mov nie modyfikuja starszych, niewykorzystanych części rejestrów
Mov,rax,0; rax=64 zera
Not rax; rax=64jedynki
Mov al.,0; w wyniku starsze 56 bitow=1, młodsze 8 wyzerowane
Operacje 32bit zeruja starsza czesc rejestru
Mov,rax,0; rax=64 zera
Not rax; rax=64jedynki
Mov eax,0; rax=0
FLAGI
Nie trzeba wszystkiego znac,
Flagi stanu(S)+flaga sterujaca©
Flagi s ustawiane w wyniku wykonania operacji rytm./logicznej oraz test i cmp
„ręcznie” znaczniki można ustawić instrukcjami stf i kasować cl/stf f-pierwsza litera flagi no sti,clc;
Typy inst.: xor,Sup, mul. Mov
Operacje na rejetrach sa najszybsze! Kilkukrotnie krócej niż operacje na pamieci-> PO TO JEST CASCH!
Ski warunkowe jxx
Skoki bezwarunkowe jmp
Wywolanie podprogramu call i powrot ret
Skoki krótkir:
-prszesuniecie względem bieżącej pozycji(8bit,max_127 lub 128 najt_
-wykorzystywanie najczęsceij lokalnie (zoskaz zajmuje 2 bajty; wykonuje ie najrcej)
Szansa, ze instrukcje znajdują się w pamieci podręcznej cache
Inne sposoby adresowania: względne i absolutne (adresy dłuższe np. 16,32 bir zajmuja wiecej miejsca w pamieci, wykonuja się dłużej-CIEKAWOSTKA!
-skoki bliskie (near) w ramach segmentu
=odległe(far):do innego segmentu
If(ax=bx)then cx=cx+1 else cx=cx+3 enD_if
Cmp ax,bx;porownaj ax=bx
Inz/jne else; jesli nie wyszlo zero/nie SA rowne,skocz do etykiety else
Inc cx;akcha dla warunku spełnionego
Jmp end_if
Else
Add cx,3; akcja alternatywna
Enf_if;
Dla warunku spelnionego czas est krirszy
Tryby adresowania:
Bez dostępu do pamięci:
Natychmiastowy mov rejestr, stala,
Rejestrowy mov rejestr,rejestr2 mov eax,ebx
Wymagające dostępu do pamięci
Bespośredni(direct)
Mov reestr,[adres_komorki]
Mov eax,[100] eczytuje do eax wartość z komorki pamieci o adresie 100
Pośredni
Mov rejestr,[rejestr], np. mov eax,[ebx]wczytuje do eax wartość z kom pamieci o adresie umieszcznym w wbx
Indeksowy
Ogólnie: [baza + indeks *stała+/- przesuniecie]
Mov eax,[ebx+esi*4+8] baza: np. adres początku tab, indeks-nr elementu tab(licząc od zera)_ skala-liczba bajtów przypadająca na 1 element tab(np. 4-double Word)(nie wszystkie składniki musza występować, np.[ebx-8])
Bezpośredni i pośredni ->ADRES TRZYMANY W REJESTRZE!!
Tryby pracy procesora : (waznee!!!!)
Chroniony-dla wielozadaniowych systemow operacyjnych, system jak i każdy proces ma przydzielony poziom uprzywilejowania(kontrolowany dostęp do zasobów i wykonywania pewnych operacji) i osobna przestrzeń adresowa(2^32-4gb z pae 64gb), zabezpieczoną przed niepowołana ingerencją. Pamięć wirtualna, stronicowanie pamięci. Możliwy płaski model pamięciowy p w Linusie-udoskonalony w em64t; Systemy Linux, Windows
Rzeczywisty po włączeniu zasilania; zgodny z 8086; BIOS działal w trybie rzeczywistym, przestrzeń adresowa 1mb(2^20) podział na segmenty po 64kb(2^14) adresowanie typu: segment +przesuniecie(offset)
Cs wskazuje segment kodu, ds0-segment danych, SS- segment stosu
Systemy: Dos, tryb domyślny procesora-po włączeniu zasilania/resecie
Wirtualny 8086-umozliwia uruchamianie programów dla 8086 i DOS podczas pracy w trybie chronionym, np. okno DOSa w systemie Windows
Technical elegance!=market success
-maniakalne utrzymywanie zgodności z dziadowskim 8086
-chaotyczne dodawanie nowych instrukcji
-brak konsekwencji w składni argumentów(np. mul,imul)
-brak konsekwencji w nazwach dodanych rejestrów/ich części
-32 bitowe działania na rejestrach przebiegają w odmienny sposób niż 8/16 bit
-odmienna implementacja działań na liczbach zmiennoprzecinkowych(osobny stos)
-obecnie: wyrafinowane, skomplikowane techniki zrównoleglania na poziomie instrukcji, wielopotokowość, przetwarzanie poza kolejnością, przewidywanie skoków, przemianowanie rejestrów itp.(pomijając wielordzeniowość/wielowątkowość)
Skąd ta popularność:
Niestety, Intel zaoferował dostępny 16 bitowy procesor wcześniej niż konkurencja (np. motorola mc68000)
Z punktu widzenia programisty x86 jest architektura CISC ale rdzenie obecnie produkowanych procesorów pracują jako RISC!!!!
Instrukcje złożone SA rozkładane na sekwencje mikrooperacji prostych
C program->kompiler->assembly language program->assembler->object: machine language model Object: libr ary Routie-> Linker->executable
Jak program jest umieszczany w pamięci??
Mamy przestrzeń adresowa liniowa płaską-tablica jednowymiarowa złożona z komórek pamięci. Każdy proces ma swoją przestrzeń adresowa (watki współdzielą przestrzeń adresowa); program nie jest ładowany od adresu 0; (tam są jakieś sprawy systemowe) potem, wczytywany jest kod programu(sekcja text) następnie alokowana jest pamięć na dane statyczne (section data!) (static data), dale: zmienne dynamiczne(pamięć alokowana); sterta i stos, który jest alokowany w górnym obszarze pamięci
Stack
Dynamic data
Static data
Text
Reserved
Stos:
Struktura danych w pamięci operacyjnej komputera zorganizowana jako lifo
Adresowana wskaźnikiem stosu- wskazującym na ostanio odlozony na stos element
Zachowywanie wartości rejestrów przed ponownym uzyciem i pozniejsze ich przywracanie
Push eax ; push- umieszcza element na stosie
Pusc ebx
Push ecx
Call funkcja; wywołanie podprogramu, który może używać, nadpisać rejestry a, b c,
Pop ecx ;pop-ściąganie ze stosu-w odwrotnej kolejności niż umieszczenie
Pop ebx
Pop eax
Przekazywanie argumentów do wywołanej funkcji/podprogramu
Alokacja zmiennych lokalnych/automatycznych funkcji =/podprogramu
Zachowywanie/ściąganie adresu powrotnego(śladu) podczas wywoływania i kończenia funkcji/podprogramu
STOS_
Wskaźnik stosu-sp(esp_ wskazuje ostani odlozony na stos element
Push argument
Przesuwa wskaznik stosu o liczbe bajtow odpowiadajaca domyślnej długości słowa procesora w dół
Umieszcza wartośc argumentu na stosie, w nowym miejscu
Pop argument
Odczytuje wartośc komorki adresowej
Przesuwa wskaźnik stosu o liczbe bajtow w górę
W x86 mips wierzcholek stosu jest na dole, dno na górze
Ale w niektórych procestwac stos jest zorganizowany na odwrót (i8051”)