Wykład 3:

26
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

description

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. Fragment kodu programu:. Język „wysokiego poziomu”: x:=1; for i:=1 to 10 do x:=x*2;. - PowerPoint PPT Presentation

Transcript of Wykład 3:

Page 1: 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

Page 2: Wykład 3:

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

...

Page 3: Wykład 3:

Kodowanie instrukcji za pomocą bajtów:

Page 4: Wykład 3:

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

Page 5: Wykład 3:

Sygnały na „pinach” procesora.

Page 6: Wykład 3:

Instrukcje wejścia/wyjścia (Input/Output):

Page 7: Wykład 3:

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

Page 8: Wykład 3:

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

Page 9: Wykład 3:

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

Page 10: Wykład 3:

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)

Page 11: Wykład 3:

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)

Page 12: Wykład 3:

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]

Page 13: Wykład 3:

Wskaźnik rozkazów:IP (Instruction Pointer)PC (Program Counter):

Page 14: Wykład 3:

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

Page 15: Wykład 3:

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

Page 16: Wykład 3:

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:

Page 17: Wykład 3:

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: ...

Page 18: Wykład 3:

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

Page 19: Wykład 3:

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

Page 20: Wykład 3:

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

Page 21: Wykład 3:

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);...

Page 22: Wykład 3:

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);

Page 23: Wykład 3:

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ół

Page 24: Wykład 3:

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

Page 25: Wykład 3:

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

Page 26: Wykład 3:

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