Alokacja pamięci struct Test { char c; int n; double x; } st1;

22
Alokacja pamięci struct Test { char c; int n; double x; } st1; st1 c n x 1 4 8

description

st1. 1 4 8. c n x. Alokacja pamięci struct Test { char c; int n; double x; } st1;. st1. 1 4 8. c n x. Alokacja pamięci struct Test { char c; int n; double x; } st1;. st1. 8 8. c n x. PAMIĘĆ OPERACYJNA. PROCESOR. URZĄDZENIA - PowerPoint PPT Presentation

Transcript of Alokacja pamięci struct Test { char c; int n; double x; } st1;

Page 1: Alokacja pamięci struct  Test { char  c;   int  n;   double  x;  } st1;

Alokacja pamięci

struct Test

{ char c; int n; double x; } st1;

st1

c

n

x

1

4

8

Page 2: Alokacja pamięci struct  Test { char  c;   int  n;   double  x;  } st1;

Alokacja pamięci

struct Test

{ char c; int n; double x; } st1;

st1

c

n

x

1

4

8

st1

c

n

x

8

8

Page 3: Alokacja pamięci struct  Test { char  c;   int  n;   double  x;  } st1;

PROSTY PROCESOR

       budowa komputera

PROCESOR

PAMIĘĆ OPERACYJNA

URZĄDZENIA ZEWNĘTRZNE

Page 4: Alokacja pamięci struct  Test { char  c;   int  n;   double  x;  } st1;

PAMIĘĆ OPERACYJNA (PAO)

    bezpośrednio dostępna dla procesora

   zestaw ponumerowanych komórek do przechowywania ciągów binarnych

01

n

m 0

.

.

.

.

. . . .

. . . .

Page 5: Alokacja pamięci struct  Test { char  c;   int  n;   double  x;  } st1;

PROCESOR

 

       procesor : układ, który samoczynnie

realizuje program

       program : ciąg poleceń,

które może wykonywać procesor

       polecenie → rozkaz, zapisany jako ciąg binarny

  program → sekwencja (ciąg) rozkazów

       lista rozkazów ( charakteryzuje procesor )

       lokalizacja programu : PAO ( von Neumann 1946 )

Page 6: Alokacja pamięci struct  Test { char  c;   int  n;   double  x;  } st1;

       podstawowy cykl pracy procesora

POBIERZ ROZKAZ Z PAMIĘCI OPERACYJNEJ

WYKONAJ ROZKAZ

Page 7: Alokacja pamięci struct  Test { char  c;   int  n;   double  x;  } st1;

POBIERZ ROZKAZZ PAMIĘCI OPERACYJNEJ

WSKAZANY PRZEZ LICZNIK ROZKAZÓW

WYKONAJ ROZKAZ

ZMIEŃ ZAWARTOŚĆ LICZNIKA ROZKAZÓW

       wskazanie rozkazu do wykonania :

licznik rozkazów, wskaźnik rozkazu ( rejestr )

LR ← LR + 1 LR ← LR + N

Page 8: Alokacja pamięci struct  Test { char  c;   int  n;   double  x;  } st1;

budowa rozkazu

bezargumentowy

1 - argumentowy

2 - argumentowy

       Arg : liczba, adres PAO, ozn. rejestru procesora

KodOp

KodOp

KodOp

Arg

Arg1 Arg2

Page 9: Alokacja pamięci struct  Test { char  c;   int  n;   double  x;  } st1;

architektura prostego procesora

KodOp R Arg

Rejestr Rozkazu

Rejestr A

Rejestr B

Licznik Rozkazów

RR

RA

RB

LR

ARYTMOMETR

+ -

STEROWANIE

Page 10: Alokacja pamięci struct  Test { char  c;   int  n;   double  x;  } st1;

• pole R : wskazuje RA ( 0 ) albo RB ( 1 )

• pole Arg : liczba NN albo

adres komórki pamięci AP

Lista rozkazów, mnemoniczne kody rozkazów

rozkazy przesyłania danych

SET R, NN

MOV R, AP

MOV AP, R

Page 11: Alokacja pamięci struct  Test { char  c;   int  n;   double  x;  } st1;

rozkazy arytmetyczne

ADD R, AP

SUB R, AP

INC R

DEC R

rozkazy skoków

JMP AP

JLE R, AP

rozkazy wprowadzania - wyprowadzania danych

IN R, NN

OUT NN, R

Page 12: Alokacja pamięci struct  Test { char  c;   int  n;   double  x;  } st1;

    rozkaz SET RA, 45H

1 0 0 1 0 0 0 0 0 1 0 0 0 1 0 1 RR

SET R NN

1.  RR ← PAO ( LR )

2.  LR ← LR + 1

3.  dekodowanie KodOP

4.  RA ← RR.Arg

Page 13: Alokacja pamięci struct  Test { char  c;   int  n;   double  x;  } st1;

    rozkaz ADD RB, 5AEH

1 1 0 0 1 1 0 1 1 0 1 0 1 1 1 0 RR

ADD R AP

1.  RR ← PAO ( LR )

2.  LR ← LR + 1

3.  dekodowanie KodOP

4.  RT ← PAO ( RR.Arg )

5.  Arytmometr ← RB, RT, PLUS

6.  RB ← Arytmometr

Page 14: Alokacja pamięci struct  Test { char  c;   int  n;   double  x;  } st1;

zmiana sekwencji rozkazów

       skok bezwarunkowy JMP

LR

JMP 370

+1+1

JMP 85+1

+1

.

.

.

85 86

250251252

370371

Page 15: Alokacja pamięci struct  Test { char  c;   int  n;   double  x;  } st1;

       rozkaz skoku bezwarunkowego JMP 370

1.  RR ← PAO ( LR )

2.  LR ← LR + 1

3.  dekodowanie KodOP

4.  LR ← RR.Arg

       skok warunkowy JLE RA, 3223

1.  RR ← PAO ( LR )

2.  LR ← LR + 1

3.  dekodowanie KodOP

4.  jeżeli RA < 0 to LR ← RR.Arg

Page 16: Alokacja pamięci struct  Test { char  c;   int  n;   double  x;  } st1;

  prosty program

  S = Σ ai 1 ≤ i ≤ n n, a1, a2, ... , an

  100 : SET RA, 0 ; zeruj sumę S

101 : MOV 200, RA ; zapamiętaj S

102 : IN RB, 1 ; czytaj n

103 : DEC RB ; n - 1

104 : IN RA, 1 ; czytaj a

105 : ADD RA, 200 ; a + S

106 : MOV 200, RA ; zapamiętaj S

107 : DEC RB ; n – 1

108 : JLE RB, 110 ; skocz gdy n < 0

109 : JMP 104 ; skocz gdy n 0

110 : OUT 2, RA ; wyprowadź wynik

Page 17: Alokacja pamięci struct  Test { char  c;   int  n;   double  x;  } st1;

       zerowanie obszaru pamięci o długości 2038 bajtów począwszy od adresu 1033

5000 : SET RA, 0 ; zeruj RA

5001 : MOV 1033, RA

5002 : MOV 1034, RA

5003 : MOV 1035, RA

...................

7038 : MOV 3070, RA

2038 rozkazów

Page 18: Alokacja pamięci struct  Test { char  c;   int  n;   double  x;  } st1;

modyfikacja argumentu rozkazu

– adresowanie bezwzględne :

adres PAO = argument

– adresowanie względne :

adres PAO = argument + zawartość rejestru

– dodatkowe pole w rozkazie

KodOP R M Arg

0

1

0

1

RA

RB

bez modyfikacji

modyfikacja przez RA

Page 19: Alokacja pamięci struct  Test { char  c;   int  n;   double  x;  } st1;

MOV RB, 500[RA]

RA Adres

efektywny

0 500

1 501

2 502

150 650

151 651

3265 3765

Page 20: Alokacja pamięci struct  Test { char  c;   int  n;   double  x;  } st1;

300 : SET RB, 2037 ;długość

301 : MOV 150, RB ;pamiętaj

302 : MOV RA, 0 ;modyfikator

303 : MOV RB, 0 ;wartość 0

304 : MOV 1033[RA], RB ;zeruj

305 : INC RA ;modyfikator + 1

306 : MOV RB, 150 ;odczytaj długość

307 : DEC RB ;długość - 1

308 : MOV 150, RB ;pamiętaj

309 : JLE RB, 311 ;gdy koniec

310 : JMP 303 ;powrót

311 : ;koniec

Page 21: Alokacja pamięci struct  Test { char  c;   int  n;   double  x;  } st1;

stos – zapis / odczyt

NDD

wzrost stosu

skracaniestosu

szczyt stosu

szczyt stosuWS

WS

0

1

PUSH R POP R

↓ ↓

PAO ( WS ) ← R WS ← WS + 1

WS ← WS – 1 R ← PAO ( WS )

• istnieją inne realizacje

Page 22: Alokacja pamięci struct  Test { char  c;   int  n;   double  x;  } st1;

stos – wywoływanie podprogramów

X + 1

CALL YXX+1

Y

RET

.

.

.

WS

WS

CALL Y RET

↓ ↓

PAO ( WS ) ← LR WS ← WS + 1

WS ← WS – 1 LR ← PAO ( WS )

LR ← Y

X + 1