Wykład 3:
description
Transcript of Wykład 3:
Wykład 3:• Jak działa typowy mikroprocesor?
Budowa procesora rodziny Intel80x86Architektury CISC i RISC
Instrukcje skoków warunkowychStosInstrukcje operujące na ciągach danychPętle
Język „wysokiego poziomu”: x:=1;
for i:=1 to 10 do
x:=x*2;
Assembler:Mov [edx],$3f800000
Mov [eax],$00000001
...
Fragment kodu programu:
„kod maszynowy”:C7 02 00 00 80 3F
C7 00 01 00 00 00
...
Kodowanie instrukcji za pomocą bajtów:
Rys. Umiejscowienie logiczne mikroprocesora w systemie mikroprocesorowym
text
CPUCentral Processor Unit
ADRES(20/21, 32)
DANE(32)
PAMIEĆRAM( W TYMPAMIĘĆKARTY
GRAFICZNEJoraz
PAMIĘĆFLASH (BIOS))
AD
RE
S8
/16
DA
NE
8/1
6
URZĄDZENIA
Input/OutputKLAWIATURA, MYSZ, DYSKI, KARTA DŹWIĘKOWA,
INNE KARTY ROZSZERZEŃ
ALUArithmetic Logic Unit
KOPROCESOR
REJESTRY
Sygnały na „pinach” procesora.
Instrukcje wejścia/wyjścia (Input/Output):
Budowa mikroprocesora typu CISC Complete Instruction Set Computer
ALUArithmetic Logic
Unit
KOPROCESOR
REJESTRY:
UNIWERSALNEEAX,EBX,... ESI, EDI
SEGMENTOWECS, DS, ES, SS
SPECJALNEEIP, SR
ADRES (20/21,32)
DANE (32)
MA
GIS
TR
AL
AA
DR
ES
OW
A
MA
GIS
TR
AL
AD
AN
YC
H
WE
WN
ĘT
RZ
NA
MA
GIS
TR
AL
A D
AN
YC
H
Budowa mikroprocesora typu RISCReduced Instruction Set Computer
ALUArithmetic Logic
Unit
KOPROCESOR
REJESTRY:
UNIWERSALNEEAX,EBX,... ESI, EDI
SEGMENTOWECS, DS, ES, SS
SPECJALNEEIP, SR
ADRES (20/21,32)
DANE (32)
MA
GIS
TR
AL
AA
DR
ES
OW
A
MA
GIS
TR
AL
AD
AN
YC
H
WE
WN
ĘT
RZ
NA
MA
GIS
TR
AL
A D
AN
YC
H
Podstawowe różnice pomiędzy CISC a RISC (Load Execution Store):
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
RISC 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
Adresowanie pamięci w trybie rzeczywistym:rejestry segmentowe
Przestrzeń adresowa wynosi 1MB ale w obrębie segmentu tylko 64kB
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
20 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
REJESTRSEGMENTOWYCS, DS, ES, SS
REJESTRUNIWERSALNY: AX,BX, ... SI, DI, IP, SP
ADRES FIZYCZNY20/21 bitów (linii)
Adresowanie pamięci:tryby adresowania
mov AX,1234h - natychmiastowymov AX,[1234h] - bezpośredni
mov EAX,DS:{CS,ES}[ESI] - pośredniDS – Data Segment (ES)CS – Code Segment
mov EAX,[ECX+EBX*2{4,8}+stała]- pośredni skalowany
z przemieszczeniemmovs EAX,[ESI] - operacja łańcuchowa (ESI,EDI – wskaźnik źródła (Source) i przeznaczenia (Destination)
Przykłady:
vartablica: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]
Wskaźnik rozkazów:IP (Instruction Pointer)PC (Program Counter):
Rejestr statusowy SR ( Status Register )
i instrukcje skoków warunkowych
OF - Przepełnienie (Overflov )DF - Kierunek operacji łańcuchowych (String Direction)SF - Znak (Sign)ZF - Zero (Zero)CF - Przeniesienie (Carry)
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
IF TF AF PFOF DF SF ZF CF
Instrukcje zmianiające stan znaczników (flag) CLC, CLD ,CLI – kasująceSTC, STD, STI - ustawiające
Instrukcje skoków warunkowych
Dotyczące operacji arytmetycznych na liczbach bez znakuJB/JNAE (Below) CF=1JNB/AE (Not Below) CF=0JBE/JNA (Below Equal) CF=1 lub ZF=1JNBE/JA (Not Below Not Equal) CF=0 i ZF=0Dotyczące operacji arytmetycznych na liczbach ze znakiem U2JL/NGE (Less) SF<>OFJGE/NL (Greater Equal) SF=OFJLE/NG (Less Equal) ZF=1 lub SF<>OFJG/NLE (Greater) ZF=0 i SF=OF
PozostałeJE/JZ (Equal) ZF=1JNE/JNZ (Not Equal) ZF=0JS (Sign) SF=1JNS (Not Sign) SF=0
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 assemblerzeCMP dword ptr [i],$0aJGE +$0cmov EAX,[i]mov [a],EAXJMP +$0a
+$0c: mov [a],$0000000a+$0a:
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 2 (nowy) fld afld stalafcomi ST,ST(1)jbe ominmov [ar],$41200000
+$0a: ...
Sposób 1 fld afcomp stałafstsw axsahfjbe +$0amov [ar],$41200000a
+$0a: ...
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
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
SP=100
CALL 1000SP=SP-4
IP>>STOSIP<=1000
88
92
96
100 88
92
96 516
100
CALL 2000SP=SP-4
IP>>STOSIP<=2000(SP=92)
88
92 1006
96 512
100
RETIP<<STOSSP=SP+4(SP=96)
88
92 1006
96 512
100
RETIP<<STOSSP=SP+4(SP=100)KONIEC !,
IP=516
88
92 1006
96 512
100
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
Ramki stosu: -przykładFunction 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);...
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);
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) ADD/SUB ESI, 1/2/4 ADD/SUB EDI, 1/2/4
CLD, STD - zmiana kierunku w górę/ w dół
Instrukcje dotyczące pętli:(LOOP)
Sekwencja instrukcji w Pascal-u:
var i:integer;for i:=10 downto 0 doBeginEnd;
Przykład zapisu w assemblerze:
mov ecx,10
petla:
loop petla
Sekwencja instrukcji w Pascal-u:
var i:integer;for i:=0 to 10 doBeginEnd;
Przykład zapisu w assemblerze:
mov ecx,10
petla:
loop petla
Instrukcje dotyczące pętli:(REP)
var tablica_źródłowa, tablica_przeznaczenia :array(1..1000) of integer;
Przykład:
MOV ECX,1000
LEA ESI,tablica_źródłowa
LEA EDI,tablica_przeznaczenia
CLD
REP MOVSW
Instrukcje dotyczące pętli:(REP)
var tablica_przeznaczenia :array(1..1000) of integer;
Przykład:
MOV ECX,1000
MOV EAX,0
LEA EDI,tablica_przeznaczenia
CLD
REP STOSW