LISTA ROZKAZÓW I
LISTA ROZKAZÓW I
SPOSÓB PREZENTOWANIA
SPOSÓB PREZENTOWANIA
ROZKAZÓW
ROZKAZÓW
Sposób prezentowania rozkazu
Sposób prezentowania rozkazu
Przykładowe rozkazy
Przykładowe rozkazy
Rozkazem
(instrukcją
maszynową)
nazywamy
najprostszą
operację, której wykonania programista może zażądać od
procesora
Rozkazem
(instrukcją
maszynową)
nazywamy
najprostszą
operację, której wykonania programista może zażądać od
procesora
Listą rozkazów nazywamy zestaw wszystkich instrukcji maszynowych
(rozkazów), jakie potrafi wykonać dany procesor
Listą rozkazów nazywamy zestaw wszystkich instrukcji maszynowych
(rozkazów), jakie potrafi wykonać dany procesor
•
rozkazy przesłań
rozkazy przesłań
•
rozkazy arytmetyczne i logiczne
rozkazy arytmetyczne i logiczne
•
rozkazy sterujące (skoki, wywołania podprogramów, pętle, itp.)
rozkazy sterujące (skoki, wywołania podprogramów, pętle, itp.)
•
inne (np. sterowanie pracą koprocesora, rozkazy testujące, operacje w trybie
inne (np. sterowanie pracą koprocesora, rozkazy testujące, operacje w trybie
chronionym)
chronionym)
Rozkazy (jak inne informacje) są przechowywane w systemie mikroprocesorowym w
Rozkazy (jak inne informacje) są przechowywane w systemie mikroprocesorowym w
postaci słów binarnych
postaci słów binarnych
LISTA ROZKAZÓW
LISTA ROZKAZÓW
Adres
komórki
Zawartość
komórki
0000
0000
1011
0001
0000
0001
0001
0101
0000
0010
1010
0000
0000
0011
0000
0000
0000
0100
0000
1111
0000
0101
0000
0000
0000
0110
1100
1000
0000
0111
1100
0110
0000
1000
1010
1010
-
-
0000
1111
0000
0010
MOV CL,5
MOV A, [B2,B3]
ADD CL,A
A=A+5
OUT [B2]
rozkazy w postaci kodów binarnych
rozkazy w postaci kodów binarnych
instrukcje maszynowe
instrukcje maszynowe
instrukcje w FORTRANie
instrukcje w FORTRANie
Rozkazy przesłań:
Rozkazy przesłań:
MOV -
MOV -
move
move
- przesłanie słowa między dwoma rejestrami
- przesłanie słowa między dwoma rejestrami
STR -
STR -
store
store
- przesłanie słowa ze wskazanego w rozkazie rejestru do
- przesłanie słowa ze wskazanego w rozkazie rejestru do
komórki pamięci
komórki pamięci
LD -
LD -
load
load
- przesłanie słowa z pamięci do wskazanego rejestru
- przesłanie słowa z pamięci do wskazanego rejestru
XCH -
XCH -
exchange
exchange
- wymiana zawartości rejestrów
- wymiana zawartości rejestrów
Rozkazy arytmetyczno-logiczne:
Rozkazy arytmetyczno-logiczne:
ADD -
ADD -
addition
addition
- dodawanie
- dodawanie
SUB -
SUB -
subtraction
subtraction
- odejmowanie
- odejmowanie
MUL -
MUL -
multiplication
multiplication
- mnożenie
- mnożenie
DIV -
DIV -
division
division
- dzielenie
- dzielenie
NEG -
NEG -
negate
negate
- negacja
- negacja
DEC -
DEC -
decrement
decrement
- zmniejszanie wartości o
- zmniejszanie wartości o
jeden
jeden
INC -
INC -
increment
increment
- awiększanie wartości o
- awiększanie wartości o
jeden
jeden
Rozkazy sterujące pracą programu:
Rozkazy sterujące pracą programu:
JMP -
JMP -
jump
jump
- skok bezwarunkowy do wyspecyfikowanego miejsca w
- skok bezwarunkowy do wyspecyfikowanego miejsca w
pamięci
pamięci
CALL -
CALL -
jump to subroutine
jump to subroutine
- wywołanie podprogramu
- wywołanie podprogramu
RET -
RET -
return
return
- skok powrotny z podprogramu
- skok powrotny z podprogramu
SKIP -
SKIP -
skip
skip
- przeskok przez jeden rozkaz
- przeskok przez jeden rozkaz
Rozkazy sterujące pracą procesora :
Rozkazy sterujące pracą procesora :
HALT -
HALT -
stop
stop
- zatrzymanie wykonania programu
- zatrzymanie wykonania programu
NOP -
NOP -
no operation
no operation
- rozkaz pusty
- rozkaz pusty
AND -
AND -
conjuction
conjuction
- iloczyn
- iloczyn
OR -
OR -
disjunction
disjunction
- suma
- suma
EXOR -
EXOR -
exclusive-OR
exclusive-OR
-suma mod 2
-suma mod 2
NOT -
NOT -
complement
complement
- negacja
- negacja
PRZYKŁADOWE ROZKAZY
PRZYKŁADOWE ROZKAZY
JMP SHORT
JMP SHORT
NEXT
NEXT
mnemonik
mnemonik
argument
argument
EB 03h
EB 03h
Kod rozkazu w
Kod rozkazu w
kodzie
kodzie
heksadecymalnym
heksadecymalnym
Kod rozkazu
Kod rozkazu
binarnie (w
binarnie (w
pamięci)
pamięci)
SPOSÓB PREZENTOWANIA
SPOSÓB PREZENTOWANIA
ROZKAZU
ROZKAZU
kod operacji i pola
kod operacji i pola
argumentów
argumentów
1.
1.
Oznaczenie
Oznaczenie
symboliczne rozkazu
symboliczne rozkazu
Jest stosowane dla prezentacji programu człowiekowi lub przy
Jest stosowane dla prezentacji programu człowiekowi lub przy
pisaniu programów w asemblerze
pisaniu programów w asemblerze
Składa się ono z
Składa się ono z
mnemonika
mnemonika
(skrótu, który powinien sugerować
(skrótu, który powinien sugerować
rodzaj operacji) i
rodzaj operacji) i
pola argumentów
pola argumentów
Inne postaci tego
Inne postaci tego
rozkazu:
rozkazu:
Na przykład: ….
Na przykład: ….
2.
2.
Opis działania rozkazu
Opis działania rozkazu
Jest możliwy w formie słownej lub symbolicznej
Jest możliwy w formie słownej lub symbolicznej
Opis słowny
Opis słowny
:
:
„
„
Wykonaj skok i pobierz kod rozkazu z
Wykonaj skok i pobierz kod rozkazu z
komórki pamięci o adresie równym
komórki pamięci o adresie równym
etykieta”
etykieta”
(u nas NEXT=100)
Argumentem jest jednak nie adres komórki lecz długość
Argumentem jest jednak nie adres komórki lecz długość
skoku (interpretowana w kodzie U2). SHORT oznacza w tym
skoku (interpretowana w kodzie U2). SHORT oznacza w tym
przypadku skok bliski (w zakresie od 127 bajtów w górę do
przypadku skok bliski (w zakresie od 127 bajtów w górę do
128 bajtów w dół)
128 bajtów w dół)
Opis symboliczny
Opis symboliczny
:
:
(IP)
(IP)
(IP) + przesunięcie
(IP) + przesunięcie
czyli zwiększ licznik rozkazów o przesunięcie (o liczbę
czyli zwiększ licznik rozkazów o przesunięcie (o liczbę
komórek)
komórek)
SPOSÓB PREZENTOWANIA
SPOSÓB PREZENTOWANIA
ROZKAZU
ROZKAZU
3.
3.
Format rozkazu i tryb adresowania
Format rozkazu i tryb adresowania
Jest to sposób rozmieszczenia informacji w kodzie rozkazu. Jest
Jest to sposób rozmieszczenia informacji w kodzie rozkazu. Jest
on następujący:
on następujący:
Kod
Kod
rozkazu
rozkazu
111010
111010
11
11
przemieszcze
przemieszcze
nie
nie
kod
kod
operacji
operacji
argument
argument
4.
4.
Ustawienie flagi
Ustawienie flagi
Istotną informacją jest określenie czy są ustawiane flagi (i
Istotną informacją jest określenie czy są ustawiane flagi (i
które) przy wykonaniu rozkazu. W tym przykładzie flagi nie są
które) przy wykonaniu rozkazu. W tym przykładzie flagi nie są
ustawiane.
ustawiane.
5.
5.
Szybkość wykonywania rozkazu
Szybkość wykonywania rozkazu
Szybkość podawana jest jako ilość taktów zegara procesora
Szybkość podawana jest jako ilość taktów zegara procesora
potrzebnych do wykonania rozkazu. W tym przykładzie
potrzebnych do wykonania rozkazu. W tym przykładzie
procesor 80386 wykonuje rozkaz w 7 taktach.
procesor 80386 wykonuje rozkaz w 7 taktach.
SPOSÓB PREZENTOWANIA
SPOSÓB PREZENTOWANIA
ROZKAZU
ROZKAZU
Pole
Pole
kodu operacji
kodu operacji
(1 lub 2 bajty) zawiera kod operacji, a
(1 lub 2 bajty) zawiera kod operacji, a
pole adresu
pole adresu
argumentu lub argumentu
argumentu lub argumentu
określa miejsce tego argumentu.
określa miejsce tego argumentu.
Przykład dla rozkazu dodawania
Przykład dla rozkazu dodawania
:
:
W - określa rodzaj argumentu (0-bajt; 1-słowo)
W - określa rodzaj argumentu (0-bajt; 1-słowo)
D - bit kierunku określa przeznaczenie (0-REG
D - bit kierunku określa przeznaczenie (0-REG
R/M; 1-
R/M; 1-
REG
REG
R/M)
R/M)
MOD - określa rodzaj adresowania
MOD - określa rodzaj adresowania
11-rejestr do rejestru;
11-rejestr do rejestru;
10-adresowanie pamięci; przesunięcie bez znaku o
10-adresowanie pamięci; przesunięcie bez znaku o
długości słowa;
długości słowa;
01- adresowanie pamięci; przesunięcie ze znakiem o
01- adresowanie pamięci; przesunięcie ze znakiem o
długości bajtu;
długości bajtu;
00-adresowanie pamięci; bez przesunięcia
00-adresowanie pamięci; bez przesunięcia
R/M - określa tryb adresowania pamięci w zależności od
R/M - określa tryb adresowania pamięci w zależności od
MOD jeśli MOD=11 to operacje między rejestrami -
MOD jeśli MOD=11 to operacje między rejestrami -
wskazuje rejestr argumentu
wskazuje rejestr argumentu
MOD
MOD
11 wskazuje metodę obliczania adresu efekt.
11 wskazuje metodę obliczania adresu efekt.
argumentu
argumentu
0
0
1
1
2
2
3
3
4
4
5
5
6
6
7
7
0
0
1
1
2
2
3
3
4
4
5
5
6
6
7
7
Bajt 1
Bajt 1
Bajt 2
Bajt 2
Kod operacji
Kod operacji
D
D
W
W
MOD
MOD
REG
REG
R/M
R/M
REJ - identyfikator rejestru
REJ - identyfikator rejestru
W=1:
W=1:
W=0:
W=0:
000 - AX
000 - AX
000 - AL
000 - AL
001 - CX
001 - CX
001 - CL
001 - CL
010 - DX
010 - DX
010 - DL
010 - DL
011 - BX
011 - BX
011 - BL
011 - BL
100 - SP
100 - SP
100 - AH
100 - AH
101 - BP
101 - BP
101 - CH
101 - CH
110 - SI
110 - SI
110 - DH
110 - DH
111 - DI
111 - DI
111 - BH
111 - BH
ADD CH,DL
ADD CH,DL
00000
00000
0
0
0
0
0
0
01
01
0
0
1
1
1
1
10
10
1
1
Kod rozkazu - 00H D5H
Kod rozkazu - 00H D5H
Zobacz w pamięci kod rozkazu - 00H D5H
Zobacz w pamięci kod rozkazu - 00H D5H
KOD ROZKAZU
KOD ROZKAZU
Kod rozkazu zostanie zapisany w pamięci pod adresem CS:IP
Kod rozkazu zostanie zapisany w pamięci pod adresem CS:IP
Można to zobaczyć
Można to zobaczyć
KOD ROZKAZU
KOD ROZKAZU
Pole kodu operacji
Pole kodu operacji
(1 lub 2 bajty) zawiera kod operacji, a pole adresu
(1 lub 2 bajty) zawiera kod operacji, a pole adresu
argumentu lub argumentu określa miejsce tego argumentu.
argumentu lub argumentu określa miejsce tego argumentu.
Przykład dla rozkazu dodawania
Przykład dla rozkazu dodawania
:
:
W - określa rodzaj argumentu (0-bajt; 1-słowo)
W - określa rodzaj argumentu (0-bajt; 1-słowo)
D - bit kierunku określa przeznaczenie (0-REG
D - bit kierunku określa przeznaczenie (0-REG
R/M; 1-
R/M; 1-
REG
REG
R/M)
R/M)
MOD - określa rodzaj adresowania
MOD - określa rodzaj adresowania
11-rejestr do rejestru;
11-rejestr do rejestru;
10-adresowanie pamięci; przesunięcie bez znaku o
10-adresowanie pamięci; przesunięcie bez znaku o
długości słowa;
długości słowa;
01- adresowanie pamięci; przesunięcie ze znakiem o
01- adresowanie pamięci; przesunięcie ze znakiem o
długości bajtu;
długości bajtu;
00-adresowanie pamięci; bez przesunięcia
00-adresowanie pamięci; bez przesunięcia
R/M - określa tryb adresowania pamięci w zależności od
R/M - określa tryb adresowania pamięci w zależności od
MOD jeśli MOD=11 to operacje między rejestrami -
MOD jeśli MOD=11 to operacje między rejestrami -
wskazuje rejestr argumentu
wskazuje rejestr argumentu
MOD
MOD
11 wskazuje metodę obliczania adresu efekt.
11 wskazuje metodę obliczania adresu efekt.
argumentu
argumentu
0
0
1
1
2
2
3
3
4
4
5
5
6
6
7
7
0
0
1
1
2
2
3
3
4
4
5
5
6
6
7
7
Bajt 1
Bajt 1
Bajt 2
Bajt 2
Kod operacji
Kod operacji
D
D
W
W
MOD
MOD
REG
REG
R/M
R/M
REJ - identyfikator rejestru
REJ - identyfikator rejestru
W=1:
W=1:
W=0:
W=0:
000 - AX
000 - AX
000 - AL
000 - AL
001 - CX
001 - CX
001 - CL
001 - CL
010 - DX
010 - DX
010 - DL
010 - DL
011 - BX
011 - BX
011 - BL
011 - BL
100 - SP
100 - SP
100 - AH
100 - AH
101 - BP
101 - BP
101 - CH
101 - CH
110 - SI
110 - SI
110 - DH
110 - DH
111 - DI
111 - DI
111 - BH
111 - BH
ADD CX,DX
ADD CX,DX
00000
00000
0
0
1
1
0
0
01
01
0
0
1
1
1
1
00
00
1
1
Kod rozkazu - 01H D1H
Kod rozkazu - 01H D1H
Zobacz w pamięci kod rozkazu - 01H D1H
Zobacz w pamięci kod rozkazu - 01H D1H
KOD ROZKAZU
KOD ROZKAZU
Kod rozkazu zostanie zapisany w pamięci pod adresem CS:IP
Kod rozkazu zostanie zapisany w pamięci pod adresem CS:IP
Można to zobaczyć
Można to zobaczyć
KOD ROZKAZU
KOD ROZKAZU
Przykład dla rozkazu dodawania
Przykład dla rozkazu dodawania
:
:
Bajt 2
Bajt 2
Bajt 1
Bajt 1
Bajt 3
Bajt 3
Bajt 4
Bajt 4
Bajt 5
Bajt 5
Bajt 6
Bajt 6
Kod
Kod
operacji
operacji
ADD CH,20H
ADD CH,20H
dodaj w trybie natychmiastowym bajt do rejestru bajtowego
dodaj w trybie natychmiastowym bajt do rejestru bajtowego
D
D
MOD
MOD
REG
REG
R/M
R/M
Przesunięcie
Przesunięcie
Przesunięcie
Przesunięcie
Dane
Dane
Dane dla DW=01
Dane dla DW=01
użyto bajtów 1,2 i 5 rozkazu
użyto bajtów 1,2 i 5 rozkazu
D=0; W=0, MOD=11; R/M i REG wskazują rejestr przeznaczenia
D=0; W=0, MOD=11; R/M i REG wskazują rejestr przeznaczenia
ADD CX,2A39H
ADD CX,2A39H
dodaj w trybie natychmiastowym słowo do rejestru
dodaj w trybie natychmiastowym słowo do rejestru
użyto bajtów 1,2,5 i 6 rozkazu
użyto bajtów 1,2,5 i 6 rozkazu
D=0; W=1, MOD=11; R/M i REG wskazują rejestr przeznaczenia
D=0; W=1, MOD=11; R/M i REG wskazują rejestr przeznaczenia
ADD CX,20H
ADD CX,20H
dodaj w trybie natychmiastowym bajt do rejestru o długości słowa
dodaj w trybie natychmiastowym bajt do rejestru o długości słowa
użyto bajtów 1,2 i 5 rozkazu
użyto bajtów 1,2 i 5 rozkazu
znak bajtu zostanie rozszerzony w rejestrze CX w lewo o 8 bitów
znak bajtu zostanie rozszerzony w rejestrze CX w lewo o 8 bitów
dla utworzenia słowa; D=1; W=1
dla utworzenia słowa; D=1; W=1
W
W
Kod rozkazu 80H C5H 20H
Kod rozkazu 80H C5H 20H
10000000 11000101 00100000
10000000 11000101 00100000
Kod rozkazu 81H C1H 39H 2AH
Kod rozkazu 81H C1H 39H 2AH
10000001 11000001 00111001 00101010
10000001 11000001 00111001 00101010
Kod rozkazu 83H C1H 20H
Kod rozkazu 83H C1H 20H
10000011 11000001 00100000
10000011 11000001 00100000
»
Określa się 72 odmiany rozkazów ADD dodawania słów i 72 dodawania bajtów typu
Określa się 72 odmiany rozkazów ADD dodawania słów i 72 dodawania bajtów typu
rejestr-rejestr, rejestr-pamięć, pamięć-rejestr (
rejestr-rejestr, rejestr-pamięć, pamięć-rejestr (
pamięć-pamięć niemożliwe
pamięć-pamięć niemożliwe
)
)
»
Określa się 26 odmian rozkazów ADD dodawania z argumentem natychmiastowym
Określa się 26 odmian rozkazów ADD dodawania z argumentem natychmiastowym
(do pamięci lub rejestru) na słowach i 51 odmian operacji na bajtach
(do pamięci lub rejestru) na słowach i 51 odmian operacji na bajtach
»
Łącznie 221 bez
Łącznie 221 bez
bitu przeniesienia
bitu przeniesienia
i tyle samo z
i tyle samo z
bitem przeniesienia
bitem przeniesienia
»
144
144
»
77
77
»
442
442
KOD ROZKAZU
KOD ROZKAZU
Przykład dla rozkazu przesłania
Przykład dla rozkazu przesłania
:
:
MOV CL,AL - skopiuj zawartość dolnej części akumulatora do
MOV CL,AL - skopiuj zawartość dolnej części akumulatora do
dolnej części rejestru licznika
dolnej części rejestru licznika
MOV AL,BL - skopiuj zawartość dolnej części rejestru B do
MOV AL,BL - skopiuj zawartość dolnej części rejestru B do
dolnej części rejestru akumulatora
dolnej części rejestru akumulatora
kod rozkazu: 88C1
kod rozkazu: 88C1
h
h
= 1 0 0 0 1 0 0 0 1 1 0 0 0 0 0 1
= 1 0 0 0 1 0 0 0 1 1 0 0 0 0 0 1
(MOV
(MOV
CL,AL)
CL,AL)
kod rozkazu: 88D8
kod rozkazu: 88D8
h
h
= 1 0 0 0 1 0 0 0 1 1 0 1 1 0 0 0
= 1 0 0 0 1 0 0 0 1 1 0 1 1 0 0 0
(MOV
(MOV
AL,BL)
AL,BL)
W
W
R/M
R/M
REG
REG
D
D
MO
MO
D
D
KOD
KOD
OPER.
OPER.
KOD ROZKAZU
KOD ROZKAZU
a rodzaj
a rodzaj
adresowania na operacje na rejestrach
adresowania na operacje na rejestrach
a
a
rejestrem
rejestrem
źródłowym rejestr CX
źródłowym rejestr CX
Przykład identyfikacji rozkazu
Przykład identyfikacji rozkazu
: W pamięci rozpoznano kod
: W pamięci rozpoznano kod
rozkazu
rozkazu
1 0 0 0 1 0 0 1
1 0 0 0 1 0 0 1
1 1 0 0 1 0 0 0
1 1 0 0 1 0 0 0
Jest to rozkaz dwubajtowy, który można zapisać dwójkowo
Jest to rozkaz dwubajtowy, który można zapisać dwójkowo
Kod operacji wskazuje na rozkaz przesłania MOV
Kod operacji wskazuje na rozkaz przesłania MOV
W
W
R/M
R/M
REG
REG
D
D
MO
MO
D
D
KOD
KOD
OPER.
OPER.
Możemy w nim
Możemy w nim
zidentyfikowa
zidentyfikowa
ć
ć
Rodzaj argumentu W na operacje na słowach
Rodzaj argumentu W na operacje na słowach
Stąd też rejestrem przeznaczenia jest AX (akumulator)
Stąd też rejestrem przeznaczenia jest AX (akumulator)
REJ - identyfikator rejestru
REJ - identyfikator rejestru
W=1:
W=1:
W=0:
W=0:
000 - AX
000 - AX
000 - AL
000 - AL
001 - CX
001 - CX
001 - CL
001 - CL
010 - DX
010 - DX
010 - DL
010 - DL
011 - BX
011 - BX
011 - BL
011 - BL
100 - SP
100 - SP
100 - AH
100 - AH
101 - BP
101 - BP
101 - CH
101 - CH
110 - SI
110 - SI
110 - DH
110 - DH
111 - DI
111 - DI
111 - BH
111 - BH
Czyli poszukiwany rozkaz to MOV
Czyli poszukiwany rozkaz to MOV
AX,CX
AX,CX
KOD ROZKAZU
KOD ROZKAZU
DZIĘKUJĘ ZA UWAGĘ !
DZIĘKUJĘ ZA UWAGĘ !