Pamięć w operacjach


Realizacja operacji przez procesor

Operacje jednoargumentowe

Przykład

Procesor 6100 (DEC PDP-8)

Słowa pamięci są 12-bitowe, procesor stosuje instrukcje jednoadresowe, które mają format:

Kod operacji

Adres pamięci

bity 11 ... 9

Bity 8 ... 0

Przykładowe instrukcje:

TAD (kod 001) - dodać zawartość wskazanej komórki pamięci do akumulatora i wynik umieścić w akumulatorze zakładając, że argumenty operacji są wyrażone w kodzie dopeł­nieniowym (2s complement add);

DCA (kod 011) - Przenieść zawartość akumulatora do wskazanej komórki pamięci i wyze­rować akumulator (deposit and clear accumulator);

JMP (kod 101) - wykonać skok do komórki o wskazanym adresie (jump).

Przykładowe instrukcje:

1) Słowo pamięci 001 000 100 110 oznacza, że zawartość komórki pamięci pod adresem 0001001102=0468=38 ma być dodana do akumulatora i wynik umieszczony w akumulatorze.

2) Słowo pamięci 011 000 001 101 oznacza wykonanie operacji DCA wykorzystując adres 0000011012=0158=13.

3) Załóżmy, że w momencie wczytywania instrukcji o adresie 418 zawartością akumulatora było 01028. Rozważmy następujący fragment programu:

Adres (ósemkowy)

Zawartość pamięci (ósemkowo)

Zawartość pamięci (binarnie)

...

...

...

418

30508

011 000 101 000

428

10518

001 000 101 001

...

...

...

508

02228

000 010 010 010

518

02438

000 010 100 011

Instrukcja o adresie 418 spowoduje wyzerowanie akumulatora i umieszczenie wartości 01028 w komórce o adresie 508. Następna instrukcja pod adresem 428 wykona dodawanie 00008+02438=02438 tzn. wczyta do akumulatora zawartość komórki o adresie 518.

4) Przeanalizujmy fragment programu:

Adres (ósemkowy)

Zawartość pamięci (ósemkowo)

Zawartość pamięci (binarnie)

Nazwa operacji

...

...

...

418

30518

011 000 101 001

DCA

428

10528

001 000 101 010

TAD

438

10538

001 000 101 011

TAD

448

30548

011 000 101 100

DCA

458

50718

101 000 111 001

JMP

...

...

518

06008

000 110 000 000

528

02008

000 010 000 000

538

02128

000 010 001 010

548

03108

000 011 001 000

...

...

...

718

...

...

Skutki wykonania operacji o danym adresie:

418: załadowanie aktualne zawartości akumulatora do komórki o adresie 518 i wyzerowanie akumulatora;

428: załadowanie do akumulatora wartości 2008 (zawartość komórki o adresie 528);

438: wykonanie dodawania 2008+2128=4128 i umieszczenie wyniku w akumulatorze;

448: przetransferowanie wartości 4128 do komórki o adresie 548 i wyzerowanie akumulatora;

458: skok do komórki o adresie 718 i kontynuowanie programu.

Operacje z wykorzystaniem stosu

Na stosie wykonuje się operacje PUSH i POP, a adres wierzchołka stosu przechowywany jest w rejestrze o nazwie Stack Pointer. Wykonanie każdej z wymienionych operacji powoduje stosowne uaktualnienie zawartości tego rejestru i dlatego operacji wykorzystujące stos nie wymagają adresu. Istnieje procesory, które wykorzystują stos wykonując takie operacje jak np. dodawanie czy mnożenie.

Operacje dwuadresowe

Struktura operacji jednoadresowej:

Kod operacji

Adres argumentu

Struktura operacji dwuadresowej:

Kod operacji

Adres argumentu nr 1

Adres argumentu nr 2

Przykład

Operacja ADD dla procesora z dwoma akumulatorami GRA i GRB może mieć jedną z nastę­pujących postaci:

a)

ADD

GRA

MEM

b)

ADD

MEM

GRB

c)

ADD

GRA

GRB

d)

ADD

MEM1

MEM2

Zasady reprezentacji instrukcji i danych w pamięci operacyjnej

Dominuje stosowanie słów pamięci o stałej długości, często jest to 8 bitów (1 bajt). Instrukcje mają długość, która jest wielokrotnością długości słowa pamięci.

Techniki adresowania pamięci

Przyczyny stosowania są następujące:

Adresowanie bezpośrednie (Direct Addressing)

Jest najprostszy sposób polegający na podaniu pełnego adresu jako operanda operacji.

Przykład

Procesor 8080

Pamięć zorganizowana jest w słowa 8-bitowe, adresy są 16-bitowe, procesor ma 1 akumulator 8-bitowy. Instrukcje mogą zajmować 3 bajty, przy czym najpierw wczytywany jest kod operacji, potem adresy operandów.

Przykładowa instrukcja:

LAD (kod 0011 10102=3A16): załadować do akumulatora zawartość pamięci z komórki o podanym adresie (load accumulator).

Rozważmy następującą sesję:

Adres (szesnastkowy)

Zawartość pamięci (szesnastkowo)

024516

3A16

024616

4916

024716

0316

...

...

034916

2316

Realizacja tej części programu spowoduje załaduje wartości 2316 do akumulatora.

Przykład

Procesory serii 6800 (należą do niej procesory 6802, 6805, 6809, 68HC11 firmy Motorola)

Pamięć zorganizowana jest w słowa 8-bitowe, adresy są 16-bitowe, procesor ma 2 akumulatory 8-bitowe oznaczane przez litery A i B.

Przykładowe instrukcje:

ADDA (kod 101110112=BB16): dodać zawartość wskazanej komórki pamięci do akumulatora A i wynik umieścić w A;

ADDB (kod 111110112=FB16): dodać zawartość wskazanej komórki pamięci do akumulatora B i wynik umieścić w B.

Oto fragment programu:

Adres (dziesiętny)

Zawartość pamięci binarnie

Zawartość pamięci szesnastkowo i dziesiętnie

...

...

...

11

1011 1011

BB16

12

0001 0110

1616=22

13

0000 1111

0716=7

14

1111 1011

FB16

15

0010 0011

2316=35

16

1010 0010

A216=162

...

...

...

227

1001 0011

9316=147

...

...

...

35162

0000 1111

0F16=15

...

...

...

Jego wykonanie spowoduje dodanie do aktualnych wartości akumulatorów A i B odpowiednio wartości 147 i 15 (zawartości komórek pamięci o adresach 227 i 35162).

Uwaga. Istnieją instrukcje, które mają adres 8-bitowy, a również „bezadresowe” takie jak HALT.

Przykład

Procesor PDP-11 ( komputery firmy DEC różnych rozmiarów)

Procesor ma 8 rejestrów generalnych 16-bitowych R0 , R1 , ... , R7 , słowa pamięci 8-bitowe.

Przykładowe operacje:

ADD (kod 01102): dodać zawartość rejestru źródłowego do zawartości rejestru docelowego i wynik umieścić w rejestrze docelowym. Kod operacji jest 4-bitowy, każdy adres 6-bitowy (3 bardziej znaczące bity na określenie typu adresowania, 3 mniej znaczące na numer rejestru generalnego).

INC (kod 00001010102): dodać 1 do zawartości wskazanego rejestru.

Przykładowa instrukcja 0110 000011 000101 doda zawartość rejestrów R3 oraz R5 i wynik umieści w rejestrze R5. Natomiast instrukcja 0000 101010 000101 powiększy o 1 zawartość rejestru R5.

Adresowanie natychmiastowe (Immediate Addressing)

W tym przypadku argument operacji (operand) jest częścią składową rozkazu.

Przykład

Procesor 8080

Przykładowa operacja:

ADI (kod 1100 01102=C616): dodać bajt zawarty w drugiej części rozkazu do akumulatora.

Oto fragment programu:

Adres (szesnastkowy)

Zawartość pamięci (binarnie)

Zawartość pamięci (szesnastkowo)

...

...

...

1616

110001102

C616

1716

000011002

0C16

...

...

Jego wykonanie spowoduje dodanie do akumulatora wartości C16=12.

Przykład

Procesory serii 6800

Przykładowe operacje:

ANDA (kod 1000 01002=8416): wykonać operację AND na bajcie drugiej części instrukcji i zawartości akumulatora A, wynik umieścić w A;

ANDB (kod 1100 01002=C416): wykonać operację AND na bajcie drugiej części instrukcji i zawartości akumulatora B, wynik umieścić w B.

Załóżmy, że akumulatory A, B zawierają odpowiednio 0110 0111 oraz 1001 1101 i przeanalizujmy fragment programu:

Adres (szesnastkowy)

Zawartość pamięci binarnie

Zawartość pamięci szesnastkowo

...

...

...

1016

1000 0100

8416

1116

1101 0101

1216

1100 0100

C416

1316

1010 0101

1416

...

...

...

...

...

Wykonanie instrukcji pod adresem 1016 spowoduje załadowanie do akumulatora A wartości

1101 0101 AND 0110 0111=0100 0101, a instrukcji pod adresem 1216 załadowanie do akumulatora B wartości 1010 0101 AND 1001 1101=1000 0101.

Przykład

Procesor PDP-11

Przykładowa operacja:

Operacja ADD o kodzie 0110 w trybie adresowania natychmiastowego ma postać:

0110

010 111

000 011

Kod ADD

Źródło

Adres docelowy

W tym przypadku wartość 010 111 w części źródłowej stanowi uzupełnienie kodu instrukcji sygnalizując tryb adresowania natychmiastowego.

Załóżmy, że rejestr R4 zawiera 0000618 w momencie rozpoczęcia realizacji fragmentu programu:

Adresy (dziesiętnie)

Zawartość pamięci (ósemkowo)

Zawartość pamięci (binarnie)

...

...

...

1020 - 1021

0627048

0110 010111 000100

1022 - 1023

0000128

1024

...

...

Rezultatem wykonania instrukcji umieszczonej pod adresami 1020 - 1021 spowoduje dodanie do rejestru R4 wartości 0000128, co spowoduje, że jego nową zawartością stanie się 0000738.

Adresowanie względne (Relative Addressing)

Sposób ten charakteryzuje się tym, że część adresowa instrukcji podaje liczbę (w kodzie dopełnieniowym), która ma być dodana do adresu następnej instrukcji i ta wartość staje się faktycznym adresem wykonywanej następnie instrukcji.

Przykład

Procesory serii 6800

Przykładowa operacja:

BRA (kod 0010 00002=2016): wykonać skok pod wskazany adres.

Oto fragment programu:

Adres (dziesiętnie)

Zawartość pamięci binarnie

Komentarz

...

...

...

10

0010 0000

BRA

11

0000 0101

+5

12

...

...

...

...

...

17

0010 0000

BRA

18

1111 1001

-7

...

...

...

Po odczytaniu zawartości komórek pamięci pod adresami 10-11 następna instrukcja zostanie odczytana z komórek o adresach 17-18, po czym program będzie kontynuowany począwszy od adresu 12.

Przykład

Procesor PDP-11

Przykładowa operacja

Adresowanie względne wykorzystuje instrukcja INC (increment) działająca tak samo, jak poprzednio opisana instrukcja BRA. Jej kodem jest 0052278=0000 101010 0101112.

Niech fragment programu ma postać

Adresy (ósemkowe)

Zawartość pamięci (ósemkowo)

Komentarz

...

...

...

10208 - 10218

0052278

INC

10228 - 10238

0000128

+128

10248

...

...

...

...

...

10368

...

...

...

...

...

Po odczytaniu zawartości komórek pamięci pod adresami 10208 - 10238 program będzie kontynuowany począwszy od adresu 10368.

Adresowanie pośrednie (Indirect Addressing)

Część adresowa instrukcji wskazuje komórkę pamięci, z której należy pobrać potrzebny adres operacji.

Przykład

Przypuśćmy, że hipotetyczny procesor dysponuje instrukcją IAD, która działa tak jak ADD, ale stosuje adresowanie pośrednie. Rozważmy następujący fragment programu:

Adres

(dziesiętny)

Zawartość pamięci

...

...

5

IAD 302

...

...

302

495

...

...

495

164

...

...

W momencie odczytania instrukcji pod adresem 5 liczba 164 (zawartość komórki o adresie 495) zostanie dodana do aktualnej zawartości akumulatora i ta wartość stanie się nową zawartością akumulatora. Gdyby zamiast polecenia IAD zostało użyte „zwykłe” ADD działające w trybie adresowania bezpośredniego, to liczbą dodaną do pierwotnej zawartości akumulatora byłoby 495.

Przykład

Procesor 8080

Oprócz akumulatora procesor wykorzystuje 8-bitowe rejestry o nazwach B, C, D, E, H, L, przy czym czasami łączone są one w pary tworzące rejestry 16-bitowe. Rejestry B, ... , L są kodowane trójkami bitów 000, ... , 101; akumulator trójką 111, a połączony rejestr H+L trójką 110.

Przykładowa operacja

Operacja MOV ładuje zawartość komórki o adresie umieszczonym w rejestrze H+L do rejestru docelowego. Instrukcja realizująca tę operację jest 8-bitowa i ma postać:

01

xxx

110

Kod operacji

Rejestr docelowy

Rejestr źródłowy H+L

xxx - kod akumulatora lub jednego z rejestrów B, ... , L.

Jeżeli przykładowo słowem instrukcji jest 01 111 110 oraz zawartościami rejestrów H oraz L są odpowiednio 3716 oraz 4216, to słowo 8-bitowe znajdujące się pod adresem 374216 zostanie załadowane do akumulatora. Podobnie instrukcja 01 001 110 w przypadku, gdy H oraz L zawierają odpowiednio 2316 oraz 7916 spowoduje skopiowanie zawartości komórki pod adresem 237916 do rejestru C.

Adresowanie indeksowane (Indexed Addresing)

Ten system adresowania wykorzystuje jeden lub więcej tzw. rejestrów indeksowych (index registers). W momencie odczytania polecenia posługującego się omawianym typem adresowania do zawartość jego części adresowej dodawana jest zawartość wskazanego rejestru indeksowego i to staje się faktycznym adresem wykonywanej operacji. Konieczność zasygnalizowania faktu użycia adresowania indeksowego i wskazania odpowiedniego rejestru indeksowego powoduje, że instrukcje jednoargumentowe mają postać:

Identyfikator rejestru indeksowego

Kod operacji

Adres pamięci

Przykład

Przypuśćmy, że rejestr indeksowy o identyfikatorze 01 zawiera wartość 350 oraz CAD oznacza polecenie Clear And Add powodujące wyzerowanie akumulatora i załadowanie do niego zawartości wskazanej komórki pamięci. Wtedy instrukcja 01 CAD 200 spowoduje wgranie do akumulatora zawartości komórki pamięci o adresie 200+350=550.

Adresowanie indeksowane znacząco upraszcza realizację iteracji i przetwarzanie danych typu tablicowego. Do obsługi opisywanej techniki adresowanie potrzebna jest instrukcja ładująca potrzebny adres do rejestru indeksowego oraz instrukcja modyfikująca zawartość tego rejestru i re­alizująca następnie operację skoku. Aby lepiej wyjaśnić te problemy, wprowadźmy komendę SIR (Set Index Register) transferującą swoją część adresową do wskazanego rejestru indeksowego. Jeżeli przykładowo instrukcja ma postać 01 SIR 300, to wartość 300 zostanie załadowana do rejestru adresowego o identyfikatorze 01. Drugą potrzebną nam instrukcją jest BRI (Branch On Index). Powoduje ona zmniejszenie zawartości rejestru indeksowego o 1 w przypadku, gdy jego zawartość jest dodatnia i następnie wykonanie skoku pod wskazany adres. Natomiast w przypadku, gdy zawartość rejestru indeksowego jest zerowa, odczytywana jest zawartość następnej komórki pamięci zgodnie ze zwykłym trybem realizacji programu.

Przykład

Prześledźmy fragment programu realizowanego przez hipotetyczny procesor, który sumuje iteracyjnie zawartość komórek pamięci o adresach 201 - 300 i umieszcza rezultat sumowania w komórce o adresie 301:

Adres pamięci

Identyfikator rejestru indeksowego

Kod operacji

Adres operacji

0

01

SIR

99

1

01

CAD

201

2

00

ADD

301

3

00

STO

301

4

01

BRI

1

5

00

HLT

0

...

...

...

...

201 - 300

301

Skutki wykonania operacji o danym adresie:

0: załadowanie wartości 99 do rejestru indeksowego;

1: wyzerowanie akumulatora i załadowanie do niego zawartości komórki o adresie

201+zawartość rejestru indeksowego (w pierwszym kroku 300);

2: powiększenie zawartości akumulatora o zawartość komórki o adresie 301;

3: wyzerowanie komórki o adresie 301 i załadowanie do niej zawartości akumulatora;

4: zredukowanie o 1 wartości rejestru indeksowego, gdy nie jest on zerowy i kontynuowanie programu od adresu 1; gdy rejestr indeksowy jest wyzerowany przejście do adresu 5.

Przykład

Procesory serii 6800

Wykorzystuje się jeden lub dwa rejestry indeksowe 16-bitowe. Adresowanie indeksowane stosuje instrukcja ADDA, która ma w tym przypadku kod AB16=101010112. Załóżmy, że zawartością rejestru indeksowego jest 010216 i rozważmy fragment programu:

Adres

(szesnastkowy)

Zawartość pamięci (binarna)

Zawartość pamięci (szesnastowo)

...

...

...

6816

10101011

AB16

6916

00010100

1416

...

...

Po odczytaniu zawartości komórek o adresach 6816 oraz 6916 zostanie dodana do akumulatora A zawartość komórki o adresie 010216+001416=011616 (nie uwidoczniona).

8



Wyszukiwarka

Podobne podstrony:
Przenoszenie plików systemowych do pamięci operacyjnej
8 Systemy Operacyjne 21 12 2010 Zarządzanie Pamięcią Operacyjną
PAMIECI OPERACYJNE QULCAZM6ZU7S Nieznany
9 Systemy Operacyjne 04 01 2011 Zarządzanie Pamięcią Operacyjną2
Pamięć operacyjna
Katechizm WINDOWS, 11 Pamięć operacyjna
Pamiec operacyjna
Błędy w pamięciach operacyjnych
pamiec operacyjna worddoc(1)
pamiec operacyjna bns
Zarządzanie pamięcią operacyjną
05 Model pamięci operacyjnej Pamięć dłu gotrwała wprowadzenieid 5541 ppt
3 Pamięć operacyjna
Wrocław Sedek10 rola pamieci operacyjnej (OSPAN)
Pamięć operacyjna
USB niekompatybilne z ReadyBoost Możliwość wykorzystania tanich przenośnych pamięci USB jako rozs
Maruszewski Świadomość, pamięć operacyjna i emocje str 83 97

więcej podobnych podstron