82
5. Rozkazy mikroprocesorów 8086/8088
kod rozkazu (ang. opcode ) - definiuje operacjÄ™ wykonywanÄ… przez rozkaz; J
d - (ang. direction ) bit kierunku określa, czy wynik działania rozkazu będzie przesłany do rejestru czy też do pamięci: d = 0 - kierunek do rejestru, d = 1 - kierunek z rejestru;
w (ang. word/byte ) - bit określający, czy działanie jest na bajtach czy słowach: w = 0 -działanie na bajtach, w = 1 - działanie na słowach;
s bit określający, czy wartość bezpośrednia jest bajtem czy słowem;
mod (ang. register/niemoty modę ) - dwa bity określające czy oba argumenty są rejestrami (mod = 11), czy też jeden z nich jest w pamięci operacyjnej;
reg (ang. register ) - trzy bity definiujące określony rejestr jako argument rozkazu lub stanowiące rozszerzenie kodu operacji; r/m (ang. registerhnemory ) - trzy bity wskazujące rejestr będący argumentem lub rejestr wykorzystywany do obliczenia adresu względem początku segmentu.
Tablica 5.2. Znaczenie kodów pól mod. reg. r/m
reg |
w=l |
o II * |
reg |
W=1 |
w = 0 ] |
000 |
AX |
AL |
100 |
SP |
AH 1 |
001 |
CX |
CL |
101 |
BP |
CH 1 |
010 |
DX |
DL |
110 |
SI |
DH 1 |
011 |
BX |
BL |
111 |
Dl |
BH m |
mod = 00 - jeden z argumentów jest w pamici, przemieszczenie (dodatkowe bajty w rozkazie) występuje jedynie wówczas. gdy r/m = 110: w tym przypadku adres efektywny stanowią wprost dwa kolejne bajty roz-kazu (addrhigh. addrjow); w przeciwnym razie tzn., gdy r/m 110, przemieszczenie nie występuje; mod = 01 - jeden z argumentów jest w pamięci, występuje jedynie mniej znaczący bajt przemieszczeni* przemieszczenie to jest rozszerzene do liczby 16-bitowej ze znakiem;
mod = 10 - jeden z argumentów jest w pamięci, przemieszczenie jest określone dwoma kolejnymi bajtai
w rozkazie;
mod = 11 - oba argumenty to rejestry.
Tablica 5.3. Adres efektywny jako funkcja mod i r/m
r/m |
00 |
mod 01 |
10 |
11 w = 0 |
w= 1 |
Standardowy rejestr segmentowy |
000 |
[BX] + [SI] |
[BX] + [SI) + + liczba 8 |
[BX] + [SI] + + liczba 16 |
AL |
AX |
DS |
001 |
(BXJ + [DI| |
[BX] + (DI] + + liczba 8 |
[BX] + (DI] + -Å‚- liczba 16 |
CL |
CX |
DS |
010 |
[BP] + [SI] |
[BP] + [SI] + + liczba 8 |
[BP] + [SI] + -f liczba 16 |
DL |
DX |
SS |
011 |
[BP] + [DI] |
[BP] + [DI| + +liczba 8 |
[BP] + [DI] + -Hiczba 16 |
BL |
BX |
SS ! |
100 |
[SI] |
[SI] + liczba_8 |
[SI] + liczba_16 |
AH |
SP |
DS |
101 |
[DI] |
[DI] -f liczba 8 |
[DI] + Iiczba_16 |
CH |
BP |
DS |
110 |
liczba 16 |
[BP] + liczba 8 |
[BP] + liczba_16 |
DH |
SI |
SS |
111 |
[BX] |
[BX] + liczba_8 |
[BX] + iiczba_16 |
BH |
DI |
DS |
liczba_8b - przemieszczenie wyrażone liczbą 8-bitową. liczba__16b - przemieszczenie wyrażone liczbą 16-bitową.
5.1. Informacje ogólne
Znaczenie kodów poszczególnych pól mody reg i r/m pokaJ Adres efektywny argumentu w pamięci operacyjnej jest funkcją mod i r/m i jest obliczany w sposób podany w tabl. 5.3. Do obliczenia adresu fizycznego w pamięci operacyjnej, układ BI U wykorzystuje obliczony adres efektyw ny (offset ) oraz zawartość odpowiedniego rejestru segmentowego. Standardowe przyporządkowanie rejestrów segmentowych jest takie, jak pokazano w tabl. 5.3. Można zauważyć, że jest uwzględniany prawie zawsze rejestr DS, z wyjątkiem sytuacji, gdy w obliczaniu adresu efektywnego uczestniczy rejestr BP. W tym przypadku standardowym rejestrem segmentowym jest SS. Jeżeli do obliczenia adresu efektywnego chcemy użyć innego niż standardowego rejestru segmentowego, deklarujemy to w postaci odpowiedniego przedrostka umieszczonego przed argumentem.
Tablica 5.4. Kody rejestrów segmentowych
Sreg |
Rejestr segmentowy |
00 |
ES |
01 |
CS |
10 |
SS |
11 |
DS |
Przykład
ES:ZMIENNA[BP] DS:[BP] + [SI] CS:lBX + SI+6] 4
Przedrostek ten określa rejestr segmentowy i wytwarza dodatkowy bajt w kodzie rozkazu (ang. segment override prefbc) o następującym formacie
OOlSrcgllO , r'' W*®**
przy czym Sreg oznacza 2-bitowy kod rejestru segmentowego (tabl. 5.4).
5.1.2. Czas wykonywania rozkazów
Czas wykonania rozkazu zależy nie tylko od częstotliwości zegara, ale także od liczby taktów potrzebnych na wykonanie danego rozkazu oraz liczby taktów dodatkowych, potrzebnych na obliczenie (jeżeli potrzeba) efektywnego adresu argumentu. Liczba dodatkowych taktów zależy od sposobu obliczania adresu efektywnego (tabl. 5.5). Dla .zegara 5 (4.77) MHz czas realizacji jednego taktu maszynowego wynosi około 200 ns (210 ns), natomiast dla zegara 8 MHz - ok. 125 ns.
Tablica S.5 Takty dodatkowe przy
tresowanie argumentu |
Przykład |
Liczba dodatkowych taktów | |
bezpośredniego 16-bitowego offsetu P A |
MOV AL ZMIENNA MOV TABLICA. BX |
6 | |
ośredmo przez rejestr azowy lub indeksowy brednio przez rcjest bazowy lub '/'deksowy z przemieszczeniem °średnio przez rejestr az°wy i indeksowy |
MOV DX, MOV CH. |
[DI] [BX| |
5 |
MOV DX. MOV CH, |
ZMIENNA[DI) TABLICA[ BX] |
9 | |
MOV DX, MOV CII. |
[BP SI] [BX + DI| |
7 lub 8 |