Pobierz prezentację
Pobieranie prezentacji. Proszę czekać
1
Wykład 3: Jak działa typowy mikroprocesor?
Budowa procesora rodziny Intel80x86 Architektury CISC i RISC Instrukcje skoków warunkowych Stos Instrukcje operujące na ciągach danych Pętle
2
Fragment kodu programu:
Język „wysokiego poziomu”: x:=1; for i:=1 to 10 do x:=x*2; Assembler: Mov [edx],$3f800000 Mov [eax],$ ... „kod maszynowy”: C F C ...
3
Kodowanie instrukcji za pomocą bajtów:
4
Rys. Umiejscowienie logiczne mikroprocesora
w systemie mikroprocesorowym
5
Sygnały na „pinach” procesora.
6
Instrukcje wejścia/wyjścia (Input/Output):
7
Budowa mikroprocesora typu CISC Complete Instruction Set Computer
8
Budowa mikroprocesora typu RISC Reduced Instruction Set Computer
9
Podstawowe różnice pomiędzy CISC a RISC (Load Execution Store):
znacznie ograniczony zestaw instrukcji operacje ALU tylko na rejestrach prosty tryb adresowania - uproszczone odwołania do pamięci wszystkie instrukcje identycznej długości (32 bity) znacznie prostsza konstrukcja procesora CISC rozbudowane instrukcje operacje arytmetyczne bezpośrednio na lokalizacjach w pamięci możliwość zawansowanego programowania w języku maszynowym różna długość instrukcji często występujące instrukcje - 8 bitów rzadsze, rozbudowane instrukcje o większej długości znaczne różnice czasu wykonania poszczególnych instrukcji
10
w trybie rzeczywistym: rejestry segmentowe
Adresowanie pamięci w trybie rzeczywistym: rejestry segmentowe Przestrzeń adresowa wynosi 1MB ale w obrębie segmentu tylko 64kB
11
Adresowanie pamięci: tryby adresowania
mov AX,1234h - natychmiastowy mov AX,[1234h] - bezpośredni mov EAX,DS:{CS,ES}[ESI] - pośredni DS – Data Segment (ES) CS – Code Segment mov EAX,[ECX+EBX*2{4,8}+stała] - pośredni skalowany z przemieszczeniem movs EAX,[ESI] - operacja łańcuchowa (ESI,EDI – wskaźnik źródła (Source) i przeznaczenia (Destination)
12
Przykłady: var tablica:array[0..100] of single; i:integer; y:single
a) y:=tablica[10h] mov EAX,[tablica+40h] b) y:=tablica[i+10h] mov ebx,i lea ecx,tablica mov eax,[ecx+$10+ebx*4]
13
IP (Instruction Pointer)
Wskaźnik rozkazów: IP (Instruction Pointer) PC (Program Counter):
14
i instrukcje skoków warunkowych
Rejestr statusowy SR ( Status Register ) i instrukcje skoków warunkowych Instrukcje zmianiające stan znaczników (flag) CLC, CLD ,CLI – kasujące STC, STD, STI - ustawiające
15
Instrukcje skoków warunkowych
Dotyczące operacji arytmetycznych na liczbach bez znaku JB/JNAE (Below) CF=1 JNB/AE (Not Below) CF=0 JBE/JNA (Below Equal) CF=1 lub ZF=1 JNBE/JA (Not Below Not Equal) CF=0 i ZF=0 Dotyczące operacji arytmetycznych na liczbach ze znakiem U2 JL/NGE (Less) SF<>OF JGE/NL (Greater Equal) SF=OF JLE/NG (Less Equal) ZF=1 lub SF<>OF JG/NLE (Greater) ZF=0 i SF=OF Pozostałe JE/JZ (Equal) ZF=1 JNE/JNZ (Not Equal) ZF=0 JS (Sign) SF=1 JNS (Not Sign) SF=0
16
Instrukcje skoków warunkowych
- przykład Sekwencja instrukcji w Pascal-u: var a,i:integer; (32 bity) if i<10 then a:=i else a:=10; Przykład zapisu w assemblerze CMP dword ptr [i],$0a JGE +$0c mov EAX,[i] mov [a],EAX JMP +$0a +$0c: mov [a],$ a +$0a:
17
Instrukcje skoków warunkowych
- przykład Sekwencja instrukcji w Pascal-u: var a:single; (32 bity) if a>10 then a:=10; Przykład zapisu w assemblerze: Sposób 1 fld a fcomp stała fstsw ax sahf jbe +$0a mov [ar],$ a +$0a: ... Sposób 2 (nowy) fld a fld stala fcomi ST,ST(1) jbe omin mov [ar],$ +$0a: ...
18
(adres wierzchołka stosu = SS:SP)
Stos i podprogramy: (adres wierzchołka stosu = SS:SP) Adres wierzchołka stosu = SS:ESP Stos „rośnie w dół” Przy operacjach odkładania na stos (PUSH) modyfikowany jest wskaźnik stosu a następnie zapisywana odpowiednia wartość Zdejmowanie ze stosu (POP) w kolejności: pobranie wartości z pamięci wskazywanej SS:ESP do odpowiedniego rejestru a następnie zwiększenie wartości wskaźnika ESP
19
(adres wierzchołka stosu = SS:SP)
Stos i podprogramy: (adres wierzchołka stosu = SS:SP) 500:(Start) ... 510: call procedura1 516: ... koniec: .... (Procedura1) 1000: call procedura2 1006: ret (Procedura2) 2000: nop ret
20
Ramki stosu Wierzchołek stosu (SS:ESP) przesuwany jest w dół w celu zarezerwowania jego fragmentu do innych celów Przed przesunięciem zawartość ESP zapamiętywana jest w specjalnym rejestrze EBP. Powstaje w ten sposób tzw. „ramka stosu” (ang. Stack Frame) czyli obszar pamięci od SS:EBP do SS:ESP Powrót do sytuacji początkowej następuje poprzez przywrócenie początkowej wartości rejestru ESP (skopiowanie jej z rejestru EBP) Zastosowania: zmienne lokalne procedur i funkcji przekazywanie parametrów do procedur i funkcji
21
Ramki stosu: -przykład Function f3(d1,d2:integer) :integer; stdcall;
var d3:integer; begin d1:=1; result:=d1+d2+d3; end; ... var a,b,c:integer; .... b:=1; c:=2; a:=f3(b,c);
22
Ramki stosu: przykład cd.: Function f3(d1,d2:integer)
:integer; stdcall; var d3:integer; begin d1:=10; result:=d1+d2+d3; end; ... var a,b,c:integer; b:=1; c:=2; a:=f3(b,c);
23
Instrukcje operacji na ciągach:
(MOVS, LODS, STOS) LODSB/W/D = MOV AL,DS:(ESI) ADD/SUB ESI, 1/2/4 STOSB/W/D = MOV ES:(EDI),AL. ADD/SUB EDI, 1/2/4 MOVSB/W/D = MOV ES:(EDI),DS:(ESI) CLD, STD - zmiana kierunku w górę/ w dół
24
Instrukcje dotyczące pętli:
(LOOP) Sekwencja instrukcji w Pascal-u: var i:integer; for i:=10 downto 0 do Begin End; Przykład zapisu w assemblerze: mov ecx,10 petla: loop petla Sekwencja instrukcji w Pascal-u: var i:integer; for i:=0 to 10 do Begin End; Przykład zapisu w assemblerze: mov ecx,10 petla: loop petla
25
Instrukcje dotyczące pętli:
(REP) var tablica_źródłowa, tablica_przeznaczenia : array( ) of integer; Przykład: MOV ECX,1000 LEA ESI,tablica_źródłowa LEA EDI,tablica_przeznaczenia CLD REP MOVSW
26
Instrukcje dotyczące pętli:
(REP) var tablica_przeznaczenia : array( ) of integer; Przykład: MOV ECX,1000 MOV EAX,0 LEA EDI,tablica_przeznaczenia CLD REP STOSW
Podobne prezentacje
© 2024 SlidePlayer.pl Inc.
All rights reserved.