CHAPT3 DOC


3.Lista rozkazów, rozkaz przesyłania, metody adresowania pamięci

Lista rozkazów

Program dla wszystkich standardowych mikrokomputerów jest w pełni uporządkowanym zbiorem rozkazów, które będą wykonane w porządku sekwencyjnym (z wyjątkiem tych rozkazów, które celowo zmieniają tę kolejność wykonania). Adres komórki pamięci obecnie wykonywanego rozkazu jest zawarty w liczniku rozkazów (PC) - jednym z rejestrów adresowych (często jedynym).

Rozkaz typowych mikrokomputerów składa się z dwóch części: kodu operacji, określającego jego działanie, i adresu (lub adresów) argumentów, przy czym każdy adres określa położenie w pamięci argumentów, na których mają być wykonywane operacje.

Na ogół w mikrokomputerach są realizowane trzy typy rozkazów:

1) manipulacji danymi;

2) wejścia/wyjścia;

3) sterowania wykonaniem programu.

l. Rozkazy manipulacji danymi:

MOV X, Y [Rejestr (X)] ← Rejestr (Y)]

MOV X, AdrPam [Rejestr (X)] ← [Pamięć (Z)]

MOV AdrPam, X [Pamięć (Z)] ← [Rejestr (X)]

MOV X,='17' [Rejestr (X)] ← Dana

MOV AdrPam,= ' 17' [Pamięć (Z)] ← Dana

ADD X, Y [Rejestr (X)] ←[Rejestr (X)] + [Rejestr (Y)]

ADD X, AdrPam [Rejestr (X)] ← [Rejestr (X)] + [Pamięć (Z)]

ADD X,= ' 17' [Rejestr (X)] ← [Rejestr (X)] + Dana

2. Rozkazy wejścia/wyjścia

IN X, Urządzenie nr 3 [Rejestr (X)] ← [Urządzenie (3)]

3. Rozkazy sterujące wykonywaniem programu

JMP TAM [PC] ← AdrPam TAM

JMPZ TUTAJ Jeśli (ostatni wynik = 0),

to [PC] ← AdrPam TUTAJ

Jeśli nie, [PC] ←[PC] + 1

Dla dyskusji postaci rozkazów procesora Intel 8086 bedziemy używać ogólnej postaci rozkazu przesunięcia MOV.

Rozkaz przesyłania

Rozważmy rozkaz

MOV CX, DX

który umieszcza 16-bitową zawartość rejestru DX w rejestrze CX, i rozkaz

MOV CH,DL

który umieszcza 8-bitową zawartość rejestru DL w rejestrze CH. Format tych rozkazów operujących na rejestrach pokazano na rys poniżej

Bajt 1

Bajt 2

7

6

5

4

3

2

1

0

7

6

5

4

3

2

1

0

Kod operacji

D

W

MOD

Rejestr

R/M

Możliwe są różne formaty rozkazu przesunięcia MOV układu I8086 z użvciem wariantów wprowadzonych do rozkazu przez projektanta układu.Należą do nich:

W: Argumenty o długości słowa lub bajtu (W=0 - bajt, W=1 - słowo)

D: Wyniki w pamieci lub w rejestrze (Kierunek: D=0 - z rejestru do pamięci, R/M←Rej,

D=1 - z pamięci do rejestru, Rej→R/M).

MOD: Argument w rejestrach lub w pamięci bez przesunięcia lub z przesunieciem ze znakiem o długości bajtu lub z przesunieciem bez znaku o długości słowa.

Adresowanie pamięć rejestr: 11 - adresowanie rejestr do rejestru

10 - adresowanie pamięci, przesunięcie bez znaku o długości slowa

01 - adresowanie pamięci, przesunięcie ze znakiem o długości słowa

00 - adresowanie pamięci, bez przesunięcia

REJ: Argument : identyfikator rejestru.

R/M: Jeśli R, to argument w jednym z rejestrów. Jeśli M, to oblicza się efektywny adres argumentu, używając jednego z ośmiu trybów adresowania.

Istnieje więc przynajmniej 2 (bajt/słowo) x 3 (przesunięcie) x 8 (trybów adresowania) x 3 (pam _ rej/rej _- pam/rej _ rej) =144 różnych formatów zawartych w jednej ogólnej postaci rozkazu dodawania ADD.

Należy tu podkreślić, że wszystkie rozkazy z dwoma wskazanymi argumentami, takie jak rozkaz przesunięcia MOV układu I8086, mogą być jedynie trzech typów:

[rejestr 1] ← [rejestr 2]

[rejestr] ← [komórka pamięci]

[komórka pamięci] ← [rejestr]

Zauważmy, że rozkazy typu "pamięć do pamięci" nie są przewidziane dla układu I8086. Korzystając z rys. poniżej można określić 72 odmiany rozkazu przesunięcia MOV słów i 72 odmiany rozkazu przesunięcia bajtów.

Format różnych wariantów rozkazu przesunięcia:

Wskazanie rejestru

Operacje na słowie (W=1)

000 AX

001 CX

010 DX

011 BX

100 SP

101 BP

110 SI

111 DI

Operacje na bajcie (W=0)

000 AL

001 CL

010 DL

011 BL

100 AH

101 CH

110 DH

111 BH

Bez przesunięcia

Przesunięcie ze znakiem o długości bajtu

Przesunięcie bez znaku o długości bajtu

Nie dotyczy pamięci

R/M=

Tryb = 00

Tryb=01

Tryb=10

Tryb=11

000

Indeksowy względem rejestru bazowego

BX+SI

Indeksowy względem rejestru bazowego

BX+SI+DISP

Indeksowy bezpośredni względem rejestru bazowego

BX+SI+DISP

Wskazuje rejestr przy operacjach między rejestrami

001

Indeksowy względem rejestru bazowego

BX+DI

Indeksowy względem rejestru bazowego

BX+DI+DISP

Indeksowy bezpośredni względem rejestru bazowego

BX+DI+DISP

010

Indeksowy względem rejestru bazowego

Dotyczy stosu

BP+SI

Indeksowy bezpośredni względem rejestru bazowego

Dotyczy stosu

BP+SI+DISP

Indeksowy bezpośredni względem rejestru bazowego

Dotyczy stosu

BX+SI+DISP

011

Indeksowy względem rejestru bazowego

Dotyczy stosu

BP+DI

Indeksowy bezpośredni względem rejestru bazowego

Dotyczy stosu

BP+DI+DISP

Indeksowy bezpośredni względem rejestru bazowego

Dotyczy stosu

BX+DI+DISP

100

Domniemany

SI

Indeksowy bezpośredni

SI+DISP

Indeksowy bezpośredni

SI+DISP

101

Domniemany

DI

Indeksowy bezpośredni

DI+DISP

Indeksowy bezpośredni

DI+DISP

110

Bezpośredni

adres

Bezpośredni względem rejestru bazowego

Dotyczy stosu

BP+DISP

Bezpośredni względem rejestru bazowego

Dotyczy stosu

BP+DISP

111

Względem rejestru bazowego

BX

Bezpośredni względem rejestru bazowego

BX+DISP

Bezpośredni względem rejestru bazowego

BX+DISP

Formaty rozkazu przesunięcia MOV z argumentem natychmiastowym do pamięci lub do rejestru pokazano na rys. poniżej.

Formaty rozkazu przesunięcia z argumentem natychamiastowym

Bajt 1

Bajt 2

Bajt 3

Bajt 4

Bajt 5

Bajt 6

7

2

1

0

7

0

7

0

7

0

7

0

7

0

Kod operacji

D

W

MOD

Rej

R/M

Przesunięcie

Przesunięcie

Dane

Dane dla DW=01

Przesunięcie natychmiastowe do rejestru

MOV CH,20H Przesuń w trybie natychmiastowym bajt do rejestru bajtowego

Użyto bajtów 1,2 i 5 rozkazu

D=0, W=0, MOD=11, R/M i Rej=przeznaczenie

MOV CX,2A39H Przesuń w trybie natychmiastowym słowo do rejestru

Użyto bajtów 1,2,5 i 6 rozkazu

D=0, W=1, MOD=11, R/M i Rej przeznaczenie

Przesunięcie natychmiastowe do pamięci Pam←Dana

Przesunięcie natychmiastowe do akumulatora

AX←Dana(16b)

AL←Dana(8b)

7

4

3

2

1

0

7

0

7

0

Kod operacji

W

Rej

Dane

Dane dla W=1

MOV AL,20H Przesuń natychmiastowo bajt do akumulatora bajtowego

MOV AX,2A39H Przesuń natychmiastowo słowo do akumulatora

Z tego rysunku można określić 51 odmian rozkazu MOV przy operacji na bajtach i 26 odmian przy operacji na słowach. W sumie otrzymujemy więc 221 odmian rozkazu przesunięcia MOV.

Metody adresowania pamięci

Klasyfikacja trybów adresowania

W języku asemblerowym przewidziano co najmniej 19 różnych metod obliczania adresu efektywnego argumentów źródła i przeznaczenia. Dla wygody i ułatwienia zrozumienia podzielono te 19 trybów adresowania na 5 grup. Rysunki mają ułatwić zrozumienie tych trybów adresowania. Ich skrótowe wyjaśnienie podajemy poniżej.

Adresowanie bezpośrednie

- Adresowanie bezpośrednie rejestru: zawartość rejestru AX.

Przykład: AX

0x01 graphic

- Adresowanie bezpośrednie pamięci: zawartość komórki pamięci głównej wskazanej przez identyfikator TAM, z przesunięciem lub bez. Może być indeksowane.

Przykłady:

TAM

TAM + 17

0x01 graphic

Adresowanie pośrednie

- Adresowanie pośrednie z rejestru: zawartość komórki pamięci głównej, której adres jest zawarty w rejestrze SI (w przypadku I8086 ograniczone do rejestru indeksowego lub bazowego; może mieć przesunięcie).

0x01 graphic

- Adresowanie pośrednie z pamięci (układ I8086 nie ma tego trybu adresowania:zawartość komórki pamięci głównej, której adres jegt zawarty w innej komórce pamięci głównej wskazanej przez identyfkator argumentu.

Często jest dopuszczalne także przesunięcie.

0x01 graphic

Adresowanie względne

- Adresowanie względem rejestru bazowego: zawartość komórki pamięci głównej, której adres jest obliczany jako suma adresu w rejestrze bazowym i przesunięcia podanego jako argument w rozkazie. Przesunięcie może być bezwzględne lub strukturalne.

Przykłady:

$BX IEEE

(BX) I8086

(BP + 3) I8086

(BP)-coś I8086

0x01 graphic

- Adresowanie względem licznika adresów (układ I8086 nie ma tego trybu adresowania): zawartość kómórki pamięci głównej, której adres jest obliczany jako suma adresu w liczniku rozkazów PC (adresu wykonywanego rozkazu) i przesunięcia podanego jako argument w rozkazie. Bardzo podobne do omówionego powyżej trybu adresowania względem rejestru bazowego.

- Adresowanie natychmiastowe: wartość pola argumentu w rozkazie jest używana jako dane. Adres danej jest więc wskazywany przez licznik rozkaz6w PC przy przesunięciu równym zeru. Zauważmy, że wartość nie może zaczynać się cyframi szesnastkowymi od A do F.

Przykłady:

123H I8086

OAlH I8086

# 123H IEEE

#AlH IEEE

0x01 graphic

- Adresowanie względem rozkazu bieżącego: stosowane w rozkazach skoku JUMP dla wskazania, że następny wykonywany rozkaz znajduje się o pewną liczbę rozkazów w przód lub wstecz od obecnego. Ten sposób adresowania nie jest zalecany, gdyż późniejsze dodanie lub usunięcie rozkazów w czasie uruchamiania lub konserwacji programu spowodują potrzebę zmiany wartości przesunięcia w rozkazie skoku JUMP, a jeśli o tym się zapomni, to wyniki będą katastrofalne.

Przykłady:

*+7

*-7

Adresowanie bezwzględne

Ten tryb adresowania niejest stosowany w układzie I8086, a normalnie oznacza, że wartość argumentu jest użyta jako adres w pamięci dla otrzymania żądanych danych. Adresowanie ,bezwzględne może być uważane za adresowanie od początku pamięci głównej z przesunięciem. Adresowanie segmentowe układu I8086 (opisane w rozdz. 2) czyni ten tryb adresowania zbędnym.

Adresowanie indeksowane

- Adresowanie bezpośrednie indeksowane z pamigci: zawartość komórki pamięci wskazanej przez sumę adresu identyfkatora TAM i zawartość rejestru indeksowego SI, z przesunięciem lub bez niego.

Przykłady:

TAM(SI)

TAM(SI + 3)

TAM(SI) + 3

0x01 graphic

- Adresowanie indeksowane pośrednie

l. Adresowanie indeksowane pośrednie z rejestru bazowego: zawartość komórki pamięci wskazanej przez rejestr bazowy BX modyfikowanv zawartością rejestru indeksowego SI. Ostatni przykład pokazuje użycie przesunięcia o pewną liczbę bajtów w zdefiniowanej strukturze wskazane identyfkatorem TEN.

Przykłady:

(BX) (SI) I8086

$BX (SI) IEEE

(BP). TEN (SI) I8086

0x01 graphic

2. Adresowanie indeksowane pośrednio z pamięci:

a. Postindeksowane (w układzie I8086 nie ma tego trybu adresowania):

zawartość komórki pamięci głównej wskazywanej przez zawartość komórki TAM modyfkowanej zawartością rejestru indeksowego SI.

b. Preindeksowane (w układzie I8086 nie ma tego trybu adresowania):

modyfkuje się adres identyfkatora TAM zawartością rejestru indeksowego SI i używa zawartości tak wskazanej komórki pamięci jako adresu danej.

Adresowanie pośrednie z rejestru z automatyczną inkrementacją/dekrementacją

Żaden z omówionych poniżej trybów nie jest dostępny w układzie I8086.

- Adresowanie pośrednie z rejestru z automatyczną postinkrementacją:

zawartość komórki pamięci głównej, której adres jest zawarty w rejestrze;

zawartość tego rejestru jest zwiększana o tyle, ile bajtów mają dane po każdym ich pobraniu.

- Adresowanie pośrednie z rejestru z automatyczną postdekrementacją:

zawartość komórki pamięci głównej, której adres jest zawarty w rejestrze;

zawartość tego rejestru jest zmniejszana o tyle, ile bajtów mają dane po każdym ich pobraniu.

- Adresowanie pośrednie z rejestru z automatyczną preinkrementacją:

zawartość komórki pamięci głównej, której adres jest zawarty w rejestrze;

zawartość tego rejestru została zwiększona przed pobraniem danych.

- Adresowanie pośrednie z rejestru z automatyczncł predekrementacją:

zawartość komórki pamięci głównej, której adres jest zawarty w rejestrze;

zawartość tego rejestru została zmniejszona przed pobraniem danych.

Obliczanie efektywnego adresu argumentu

Można powiedzieć, że efektywny adres argumentu jest adresem danej. W układzie I8086/8088 występuje pięć klas efektywnych adresów argumentu (i wiele podklas).

Adresowanie rejestru

Dana (wartość argumentu) znajduje się we wskazanym rejestrze. Jeśli argument ma długość 16 bitów, to dana znajduje się w rejestrach AX, BX, CX lub DX; jeśli argument ma długość 8 bitów, to dana znajduje się w rejestrach AL, AH, BL, BH, CL, CH, DL lub DH.

Adresowanie natychmiastowe

Dana (wartość drugiego argumentu źródłowego) jest częścią rozkazu, tzn. znajduje się w komórce pamięci tuż za rozkazem. Adres argumentu przeznaczenia może dotyczyć jednego z rejestrów lub dowolnego miejsca w pamięci.

Adresowanie pamięci

Dana (wartość argumentu) znajduje się w komórce pamięci, której adres można wyliczyć na wiele sposobów.

Bezpośrednie adresowanie pamięci. Efektywny adres argumentu (EAA) w pamięci jest przesunięty od początku segmentu o wartość określoną w rozkazie

AF = [RejSegm] * 16+Przesunięcie

gdzie AF oznacza adres fizyczny argumentu w przestrzeni adresowej o pojemności 1 MB, a [RejSegm] oznacza zawartość odpowiedniego rejestru segrńentu, którą należy pomnożyć przez 16, aby otrzymać adres początkowy

segmentu.

Indeksowane adresowanie bezpośrednie. Efektywny adres argumentu w pamięci jest przesunięty w stosunku do początku segmentu o przesunięcie i o zawartość podanego rejestru indeksowego

AF = [Rej Segm] * 16 + Przesunięcie + [Rej Indeksowy]

Adresowanie bezpośrednie poprzez rejestr bazowy. Efektywny adres argumentu w pamięci jest przesunięty w stosunku do początku segmentu o przesunięcie i o zawartość podanego rejestru bazowego

AF = [Rej Segm] * 16 + Przesunięcie + [Rej Bazowy]

Zauważmy, że ten tryb adresowania jest zbliżony do poprzedniego.

Indeksowane adresowanie bezpośrednie poprzez rejestr bazowy. Efektywny adres argumentu w pamięci jest przesunięty w stosunku do początku segmentu o przesunięcie, zawartość podanego rejestru indeksowego i zawartość podanego rejestru bazowego..

AF = [Rej Segm] * 16 + Przesunięcie + [Rej Indeksowy) + [Rej Bazowy]

Zauważmy, że ten tryb jest zbliżony do trybu adresowania z podwójnym indeksowaniem, stosowanego w niektórych komputerach.

Adresowanie pośrednie poprzez rejestr. Efektywny adres argumentu w pamięci jest przesunięty w stosunku do początku segmentu o zawartość wskazanego rejestru

AF = [Rej Segm] * 16 + [Rej]

Przy tym trybie adresowania można wskazać tylko jeden z rejestrów bazowych lub indeksowych. Dostęp do różnych elementów tablicy odbywa się z pomocą rozkazów, które zwiększają lub zmniejszają zawartość rejestru adresu pośredniego przed lub po pobraniu danej.

Zauważmy, że adresowanie pośrednie z rejestrem bazowym i adresowanie pośrednie indeksowane nie są dostępne w układzie Intel 8086/8088. Ten brak jest nieco złagodzony przez specjalną możliwość tworzenia pętli i zwykle nieprzedstawia specjalnych trudności w programowaniu.

SYSTEMY KOMPUTEROWE ROZDZIAŁ 3

10



Wyszukiwarka

Podobne podstrony:
europejski system energetyczny doc
KLASA 1 POZIOM ROZSZERZONY doc Nieznany
5 M1 OsowskiM BalaR ZAD5 doc
Opis zawodu Hostessa, Opis-stanowiska-pracy-DOC
Messerschmitt Me-262, DOC
Opis zawodu Robotnik gospodarczy, Opis-stanowiska-pracy-DOC
Opis zawodu Położna, Opis-stanowiska-pracy-DOC
Opis zawodu Przetwórca ryb, Opis-stanowiska-pracy-DOC
Blessing in disguise(1), Fanfiction, Blessing in disguise zawieszony na czas nie określony, Doc
Opis zawodu Politolog, Opis-stanowiska-pracy-DOC
Protokół wprowadzenia na roboty, Pliki DOC PPT
Połączenie komputerów w sieć, DOC
Opis zawodu Technik informatyk, Opis-stanowiska-pracy-DOC
ŁACINECZKA ZBIOREK DOC, ►Filozofia
Bronie V, DOC

więcej podobnych podstron