POLITECHNIKA KOSZALIŃSKA - WYDZIAŁ ELEKTRONIKI I INFORMATYKI
Architektura komputerów
Zajęcia laboratoryjne N 8
Zajęcia laboratoryjne N 8
TEMAT:
R
OZKAZY
PRZESUNIĘĆ
II
Celem niniejszego ćwiczenia jest rozszerzenie wiedzy studentów z zakresu jednoargumento-
wych rozkazów przesunięć arytmetycznych, logicznych i cyklicznych. Rozkazy te posiadają format
rozkazu, który został przedstawiony na Rys. 1.
W czasie wykonywania obecnego zadania zajmiemy się informacjami zawartymi w drugim
bajcie kodu rozkazu tj. przesunięciem DISP, dzięki któremu możemy zaadresować komórkę
pamięci RAM (adresacja pośrednia). Przesunięcie to interpretuje się jako liczbę ze znakiem,
wykorzystując ją do obliczania adresu efektywnego.
Z powodu segmentowej organizacji pamięci wszystkie adresy efektywne, EA są przesunięciem
(offsetem) względem bazowego adresu segmentu i rozpatrywane są jako liczba bez znaku przy
obliczaniu adresu fizycznego. W przyszłości, aby uniknąć pomyłek przez przesunięcie będziemy
rozumieli offset – przesunięcie w segmencie.
Pole MOD wskazuje w jaki sposób należy interpretować pole R/M aby zidentyfikować
argument: jeżeli MOD=11, to argument znajduje się w rejestrze, w pozostałych przypadkach w
pamięci. W przypadku adresowania komórek pamięci, pole MOD określa wielkość przesunięcia
DISP:
MOD = 00,
DISP=0 – brak przesunięcia;
01,
DISP=DISP L – rozkaz zawiera 8 bitowe przesunięcie, które rozszerza się
ze znakiem do 16 bitów;
10,
DISP=DISP H, DISP L – rozkaz zawiera 16 bitowe przesunięcie.
Przy MOD=11 realizowana jest pośrednia adresacja komórek pamięci i pole R/M
wykorzystywane jest do formułowania adresu efektywnego EA do argumentu. W Tabeli 2
przedstawiono sposób tworzenia EA, gdzie D8 lub D16 oznacza przesunięcie, zadane w kodzie
rozkazu (w postaci liczby w kodzie uzupełnień do 2, zapisane przy użyciu formy litle endian).
Od przedstawionych w Tabeli 2 zasad istnieje wyjątek, pozwalający realizować bezpośrednią
(absolutną) adresację: jeśli MOD=00 i R/M=110, to EA=DISP H, DISP L.
Tabela 1:
Operacja
Kod
operacji
Uzupełnienie
kodu operacji
ROL R/M,1 1101 000W
000
ROR R/M,1 1101 000W
001
RCL R/M,1 1101 000W
010
RCR R/M,1 1101 000W
011
1 z 3
Rysunek 1.: Format rozkazu jednoargumentowego dla zadania 8.
15
8 7
5
3 2
0
6
4
1
13
11 10
14
12
9
Kod operacji
MOD
W
R/M
Kod op.
15
8 7
5
3 2
0
6
4
1
13
11 10
14
12
9
DATA8
DATA8
POLITECHNIKA KOSZALIŃSKA - WYDZIAŁ ELEKTRONIKI I INFORMATYKI
Architektura komputerów
Zajęcia laboratoryjne N 8
Tabela 2:
Pole
Pole
MOD
R/M
00
01
10
1 1
W=0 W=1
000 BX+SI BX+SI+D8 BX+SI+D16 AL
AX
001 BX+DI BX+DI+D8 BX+DI+D16 CL
CX
010
BP+SI
BP+SI+D8 BP+SI+D16
DL
DX
011 BP+DI BP+DI+D8 BP+DI+D16 BL
BX
100
SI
SI+D8
SI+D16
AH
SP
101
DI
DI+D8
DI+D16
CH
BP
110
DATA
BP+D8
BP+D16
DH
SI
111
BX
BX+D8
BX+D16
BH
DI
D8 i D16 oznaczają odpowiednio – przesunięcie wielkości 8 bitów i
przesunięcie wielkości 16 bitów.
Kod rozkazu i pomocniczy kod rozkazu znajdują się w Tabeli 2, poprzedniego zadania
laboratoryjnego i Tabeli 1 niniejszego przygotowania, natomiast oznaczenia pól MOD i R/M można
znaleźć w Tabeli 2 niniejszego przygotowania.
Tabela 3:
Nr st.
Operacje
1 i 6
SAL byte ptr [SI], 1; RCR Arg1, 1
2 i 7 ROL word ptr [BX+DISP8], 1; SAR Arg2, 1
3 i 8
ROR Arg2; SHL word ptr [BX+DISP8], 1
4 i 9
RCL byte ptr [SI+DISP8], 1; SHR Arg1, 1
5 i 10
SAR Arg1,1; ROL byte ptr [DI], 1
byte ptr – określa wielkość operandu jako bajt; word ptr –
określa wielkość operandu jako słowo; DISP8 –
przesuniecie wielkości 8 bitów; Arg1 – 16 bitowe zmienne
zapisane w pamięci RAM; Arg2 – 8 bitowe zmienne
zapisane w pamięci RAM
W przypadku gdy w rozkazie pojawia się Arg1 lub Arg2, mamy do czynienia z adresacją
bezpośrednią czyli MOD=00 i R/M=110, gdzie DISP (16 bitów drugiego słowa rozkazu) wskazuje
bezpośrednio wartość przesunięcia w segmencie danych, wskazującą na argument.
Zagadnienia do opracowania przed przystąpieniem do wykonywania zadania:
1. Jaka jest zasada tworzenia adresu efektywnego w przypadku odwołań do danych?
2. Na czym polega adresacja pośrednia?
3. Zapisz dla swojego wariantu kody rozkazów zawartych w Tabeli 1 w postaci binarnej
oraz w postaci szesnastkowej (z zaznaczeniem poszczególnych pól).
4. Zapoznać się z zasadą działania następujących rozkazów procesora 8086:
-
RCL,
-
RCR,
-
ROL,
2 z 3
POLITECHNIKA KOSZALIŃSKA - WYDZIAŁ ELEKTRONIKI I INFORMATYKI
Architektura komputerów
Zajęcia laboratoryjne N 8
-
ROR.
5. Sprawdź zależności pomiędzy rejestrami BP, SI i DI, a odpowiadającymi im rejestrami
segmentowymi.
Zadania podstawowe do wykonywania w czasie trwania zajęć laboratoryjnych:
P_1. Utwórz w pamięci RAM zmienne Arg1 i Arg2, podając je w big endian.
P_2. Zakładamy, że SI i DI odnoszą się tylko do rejestru DS.
P_3. Rozbuduj program podstawowy z 2 zajęć laboratoryjnych o rozkazy zawarte w
Tabeli 3.Uwzględnij Tabelę 4.
Tabela 4:
Operacja
Rozkazy
OF
CF
SF
ZF
Przesunięcia
SHL SHR
1)
+
+
+
+
SHL SHR
2)
?
+
+
+
SAR
0
+
+
+
ROL ROR RCL RCR
1)
+
+
-
-
ROL ROR RCL RCR
2)
?
+
-
-
Oznaczenia: '+' – wynik operacji wpływa na flagę; '-' – nie wpływa; 1 – ustawia w stan
'1'; 0 – ustawia w stan '0'; X – inwersja; ? – nieustalone
1)
jednokrotnie
2)
wielokrotnie
Zadania dodatkowe wykonywania w czasie trwania zajęć laboratoryjnych:
D_1. Rozbuduj tak powstały program, tak aby wykonywały się następujące rozkazy:
•
ROR R/M,1;
•
ROL R/M,1;
•
RCL R/M,1;
•
RCR R/M,1;
dla dowolnej wartości R/M dla MOD = 00, zarówno dla argumentu wielości słowa jak i
wielkości bajtu. Uwzględnij Tabelę 4.
D_2. W czasie dekodowania rozkazu sprawdź tylko kod operacji.
D_3. Zadbaj o to by napisany program zajmował jak najmniej komórek pamięci mikro
rozkazów.
3 z 3