POLITECHNIKA KOSZALIŃSKA - WYDZIAŁ ELEKTRONIKI I INFORMATYKI
Architektura komputerów
Zadanie laboratoryjne N 8
Zadanie laboratoryjne N 8
TEMAT:
R
OZKAZY
PRZESUNIĘĆ
II
Celem niniejszego ćwiczenia jest rozszerzenie wiedzy studentów z zakresu jedno argumentowych
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
15
8 7
5
3 2
0
6
4
1
13
11 10
14
12
9
DISP8
DISP8
R/M
Kod op.
POLITECHNIKA KOSZALIŃSKA - WYDZIAŁ ELEKTRONIKI I INFORMATYKI
Architektura komputerów
Zadanie laboratoryjne N 8
Tabela 2:
Pole
R/M
00
Pole
01
MOD
10
1
W=0
1
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 D16
BP+D8
BP+D16
DH
SI
111 BX
BX+D8
BX+D16
BH
DI
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,
-
ROR.
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. Rozbuduj program podstawowy z 2 zajęć laboratoryjnych o rozkazy zawarte w Tabeli 3.
2 z 3
POLITECHNIKA KOSZALIŃSKA - WYDZIAŁ ELEKTRONIKI I INFORMATYKI
Architektura komputerów
Zadanie laboratoryjne N 8
Zadania dodatkowe wykonywania w czasie trwania zajęć laboratoryjnych:
D_1. Weź program z poprzednich zajęć i ustaw jako komentarz dekodowanie wszystkich
rozkazów poza NOP, następnie usuń (lub ustaw jako komentarz) fragment (lub fragmenty)
programu z obszaru w którym są wykonywane te rozkazy.
P_3. Utwórz w pamięci RAM zmienne Arg1 i Arg2, podając je w big endian.
D_2. Rozbuduj tak powstały program, tak aby wykonywały się następujące rozkazy:
•
SAR R/M,1;
•
SAL R/M,1;
•
SHL R/M,1;
•
SHR 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.
D_3. W czasie dekodowania rozkazu sprawdź tylko kod operacji.
D_4. Zadbaj o to by napisany program zajmował jak najmniej komórek pamięci mikro
rozkazów.
3 z 3