1
1
Architektura Systemów Komputerowych
Wykład 3
Architektura wewnętrzna i rozkazy języka asembler.
2
A
0
- A
3
B
0
- B
3
S
0
- S
3
M
F
0
- F
3
Sygnały sterujące do wyboru
mikrooperacji logicznej (M=0)
lub arytmetycznej (M=1)
Przykład 4 bitowego ALU SN74181
Blok arytmetyczno-logiczny
Blok arytmetyczno-logiczny (ALU) - jest uniwersalnym układem kombinacyjnym, który
realizuje operacje matematyczne i logiczne w zależności od zaprogramowanej operacji
tj. rozkazu umieszczonego w programie.
Rozkazy mogą dotyczyć
operacji dwuargumentowych: operacji arytmetycznych (dodawanie i odejmowanie) i
operacji logicznych (sumowanie mnożenie, sumowanie mod 2, itp.)
operacji jednoargumentowych (np. negowanie bitów lub przesuwanie zawartości
rejestrów)
Argumentami rozkazów są najczęściej dwa słowa binarne, od długości których mówi się
o liczbie bitów ALU.
Lp. S
0
- S
3
M=0 M=1
A
F
B
A
F
B
A
F
F
AB
F
B
F
B
A
F
B
A
F
B
A
F
B
A
F
B
F
AB
F
F
B
A
F
B
A
F
A
F
=
∨
=
∨
=
=
=
=
⊕
=
∨
=
=
⊕
=
=
=
=
=
∨
=
=
1
0
)
1
(
)
(
)
(
2
)
1
(
)
(
)
1
(
)
1
(
)
(
1
)
(
)
(
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
C
A
F
C
A
B
A
F
C
A
AB
F
C
A
F
C
AB
F
C
AB
B
A
F
C
B
A
F
C
AB
A
F
C
A
F
C
B
A
F
C
B
A
B
A
F
C
B
A
A
F
C
F
C
B
A
F
C
B
A
F
C
A
F
−
−
=
+
+
∨
=
+
+
=
+
=
−
−
=
+
+
∨
=
+
+
=
+
+
=
−
−
=
−
−
−
=
+
+
∨
=
+
+
=
−
=
+
∨
=
+
∨
=
+
=
16
15
14
13
12
11
10
9
8
7
6
5
4
3
2
1
1111
0111
1011
0011
1101
0101
1001
0001
1110
0110
1010
0010
1100
0100
1000
0000
Układ sterowania
Najczęściej procesor wykonuje rozkazy nie w jednym kroku (jak np.
dodawanie) ale w wielu krokach (np. mnożenie lub dzielenie jako ciąg
dodawań i przesunięć).
W tym celu potrzebny jest złożony automat sekwencyjny, generujący
odpowiednie ciągi słów podawanych na wejścia sterujące układu ALU -
układ sterowania.
Cechy takiego automatu to:
konieczność posiadania bardzo dużej liczby stanów dostosowanych do
wymaganej liczby wykonywanych rozkazów;
konieczność zapewnienia synchronizacji pracy układu sterowania i
wykonawczego (uwzględnienie czasów wykonywania poszczególnych
operacji).
W praktyce realizowane są jako:
generatory sekwencyjne
układy mikroprogramowalne
lub
stos
stos
Stos
Stos to wyróżniony obszar w pamięci używany wg reguł:
informacje zapisane są na stos do kolejnych komórek (pod
kolejnymi adresami), przy czym żadnego adresu nie wolno
pominąć
odczytujemy informacje w kolejności odwrotnej do ich zapisu
informacje odczytujemy z ostatnio zapełnionej komórki,
natomiast zapisujemy do pierwszej wolnej
Czyli obowiązuje reguła LIFO - ostatni wchodzi pierwszy wychodzi
Cykl rozkazowy procesora
Realizując program, system mikroprocesorowy wykonuje pewne
powtarzające się czynności, polegające na cyklicznym pobieraniu
kodów rozkazów z pamięci i wczytywaniu ich do układu sterowania, a
następnie realizacji rozkazu
Czas potrzebny na odczytanie kodu rozkazu z pamięci, na pobranie
argumentów, na wykonanie rozkazu i przesłanie wyniku operacji
nazywa się cyklem rozkazowym (instrukcyjnym)
Cykl rozkazowy składa się zwykle z faz pobierania (kodu rozkazu,
pobierania argumentu) i wykonania rozkazu
3
Pami
ęć
CPU
cykl pobrania rozkazu
cykl
pobrania
argumentu I
cykl
pobrania
argumentu II
cykl zapisu wyniku
Cykl rozkazowy procesora
Faza pobrania:
1. adresowanie: podanie zawartości rejestrów adresujących pamięć (np.
CS:IP) na magistralę adresową
2. odczyt zaadresowanej komórki pamięci do rejestru rozkazów (RR)
3. zwiększenie zawartości licznika rozkazów (IP)
Faza wykonania:
4. zdekodowanie kodu rozkazu i wytworzenie sygnałów sterujących
realizujących dany rozkaz
Format rozkazu - to sposób rozmieszczenia informacji w kodzie rozkazu
Kod rozkazu:
• musi zawierać określenie rodzaju wykonywanej operacji (kod operacji) - w pierwszym
bajcie (bajtach) kodu rozkazu
• może zawierać operandy i/lub adresy operandów wykonywanych operacji
Tryb adresowania to sposób określenia miejsca przechowywania argumentów
rozkazu
Argumenty rozkazu (dotyczy zarówno danych jak i wyników) mogą być przechowywane w:
• rejestrach
• pamięci
• kodzie rozkazu
Tryby adresowania
• adresowanie natychmiastowe
• adresowanie bezpośrednie
• adresowanie rejestrowe
• adresowanie pośrednie
• adresowanie indeksowe z przemieszczeniem
Format rozkazów i tryb adresowania
Przy adresowaniu bezpośrednim argument rozkazu zawarty jest w kodzie rozkazu
Argument jest umieszczany w kodzie rozkazu, więc musi być on znany w momencie pisania
programu.
Kod rozkazu
Kod operacji
Argument
Przy adresowaniu bezpośrednim kod rozkazu zawiera adres komórki pamięci, w
której przechowywany jest argument rozkazu
W momencie pisania programu musimy zarezerwować adres przechowywania argumentu.
Kod rozkazu
Kod operacji
Adres
Argument
PA
M
IĘĆ
Tryby adresowania
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
Podział rozkazów
• rozkazy przesłań
• rozkazy arytmetyczne i logiczne
• rozkazy sterujące (skoki, wywołania podprogramów, pętle, itp.)
• inne (np. sterowanie pracą koprocesora, rozkazy testujące, operacje w
trybie chronionym)
Rozkazy (jak inne informacje) są przechowywane w systemie mikroprocesorowym
w postaci słów binarnych
Lista rozkazów
4
Rozkazy przesłań:
MOV - move - przesłanie słowa między dwoma rejestrami
STR - store - przesłanie słowa ze wskazanego w rozkazie rejestru do komórki
pamięci
LD - load - przesłanie słowa z pamięci do wskazanego rejestru
XCH - exchange - wymiana zawartości rejestrów
Rozkazy arytmetyczno-logiczne:
ADD - addition - dodawanie
SUB - subtraction - odejmowanie
MUL - multiplication - mnożenie
DIV - division - dzielenie
NEG - negate - negacja
DEC - decrement - zmniejszanie wartości o jeden
INC - increment - zwiększanie wartości o jeden
Rozkazy sterujące pracą programu:
JMP - jump - skok bezwarunkowy do wyspecyfikowanego miejsca w pamięci
CALL - jump to subroutine - wywołanie podprogramu
RET - return - skok powrotny z podprogramu
SKIP - skip - przeskok przez jeden rozkaz
Rozkazy sterujące pracą procesora :
HALT - stop - zatrzymanie wykonania programu
NOP - no operation - rozkaz pusty
AND - conjuction - iloczyn
OR - disjunction - suma
EXOR - exclusive-OR -suma mod 2
NOT - complement - negacja
Przykładowe rozkazy
MOV AL, 9c
mnemonik argument
Sposób prezentowania rozkazu
Oznaczenie symboliczne rozkazu
Jest stosowane dla prezentacji programu człowiekowi lub przy
pisaniu programów w asemblerze
Składa się ono z mnemonika (skrótu, który powinien sugerować
rodzaj operacji) i pola argumentów
Przykład
Organizacja pamięci – kolejność bajtów
Bajty (słowa 8-bitowe) są umieszczone w kolejnych komórkach pamięci.
Odczyt i zapis komórek pamięci jest możliwy na różne sposoby, np.:
odczyt/zapis bajtu (byte), słowa (word) (16-bitów = dwa bajty),
podwójnego słowa (dword) (32-bity)
Podstawową jednostką lokacji w pamięci jest bajt (każdy ma swój
unikatowy adres). Odczyt lub zapis słów (word/dword) powoduje odczyt lub
zapis dwu (lub czterech) kolejnych bajtów równocześnie.
Kolejność przyporządkowania poszczególnych części rejestru do kolejnych
bajtów nazywana jest kolejnością bajtów (byte order).
Możliwe są dwie kolejności: Little Endian i Big Endian
Little Endian
– stosowane np. w architekturze Intel x86
- mniej znaczące bajty zapisywane są w komórkach o niższych
adresach
przykład
mov eax, 12345678h
mov [100], eax
da w wyniku
adresy ...|100|101|102|103|..
zawartość
...|78h|56h|34h|12h|..
Big Endian
– stosowane np. w Motorola68000, PowerPC, Sparc,...
dla powyższego przykładu:
adresy
...|100|101|102|103|..
zawartość
...|12h|34h|56h|78h|..
Organizacja pamięci – kolejność bajtów
5
Informacja o żądanej liczbie bajtów do odczytu/zapisu procesor ma
zawartą w kodzie instrukcji:
Przykłady:
mov AL, [100] - odczyt jednego bajtu z komórki o adresie 100 do części
rejestru A (oznaczonej AL)
mov [220], AX – zapis dwu bajtów (AL i AH) do kolejnych komórek pamięci
([220] <= AL, [221] <= AH)
Jeśli z kontekstu instrukcji nie wynika rozmiar argumentu, należy go
określić wprost, za pomocą specjalnych dyrektyw (byte ptr, word ptr lub
dword ptr
):
np.
add [100], 10h
należy dopisać, np.:
add byte ptr [100], 10h
Organizacja pamięci – kolejność bajtów
Instrukcja MOV należy do grupy instrukcji przesyłania danych i
stanowi jeden z podstawowych rozkazów używanych w
asemblerze.
Zadaniem jej jest kopiowanie danej z jednego do drugiego
miejsca
(nie
można
jednak
przesyłać
danych
między
komórkami pamięci - musi się to odbywać poprzez rejestr
procesora).
Przykład:
mov operand1,operand2
źródło (skąd lub co?)
cel (gdzie?)
Rozkaz przesyłania danych - MOV
Tryb rejestrowy
W zależności od trybu adresowania użycie tej instrukcji może wyglądać:
Przykład:
MOV AX,BX
0000000100010111
0000000000100011
0000000000010000
0000000000000000
0000000000100011
0000000000010000
0000000000000000
0000000000100011
AX
BX
CX
DX
rejestry przed
wykonaniem rozkazu
rejestry po
wykonaniu rozkazu
AX
BX
CX
DX
Jeżeli argument znajduje się w rejestrze, to tryb adresowania nazywa się trybem
rejestrowym (register mode). Można zauważyć, że rozkaz zawiera numer rejestru
procesora, w którym przechowywany jest argument operacji.
KOD OPERACJI
NR REJESTRU
BLOK REJESTRÓW
ARGUMENT
Rozkaz przesyłania danych - MOV
Tryb natychmiastowy
Przykład:
MOV CL,5DH
0000000100010111
0000000000100011
0000000000010000
0000000000000000
0000000000100011
0000000001011101
0000000000000000
AX
BX
CX
DX
rejestry przed
wykonaniem rozkazu
rejestry po
wykonaniu rozkazu
AX
BX
CX
DX
5D
H
= 01011101
0000000100010111
Jeżeli argument znajduje się w kodzie rozkazu, to tryb adresowania nazywa się
trybem natychmiastowym (immediate mode). Można zauważyć, że stała 8-, 16- czy
32-bitowa jako argument źródłowy zawarta jest w rozkazie (umieszczona tam przez
asembler), a nie w rejestrze czy komórce pamięci.
KOD OPERACJI
ARGUMENT
Rozkaz przesyłania danych - MOV
6
Rejestr jako argument pośredni zapisuje się w asemblerze w nawiasie kwadratowym
(w odróżnieniu od rejestru jako argumentu).
Przykład:
MOV AX,BX
do rejestru AX ładowana jest zawartość rejestru BX
Tryb adresowania pośredniego przez rejestr
MOV AX,[BX] do rejestru AX ładowana jest zawartość komórki pamięci,
której adres od początku segmentu danych (offset) określa
rejestr BX
MOV BX,0001
.........................
MOV AX,[BX]
0000
0001
0002
0003
0004
8B
1A
1A8B
AX =
0001
BX =
bajt o adresie młodszym
bajt o adresie starszym
młodszy bajt starszy bajt
Rozkaz przesyłania danych - MOV
Ograniczenia instrukcji MOV:
MOV nie może przenosić danych z jednej komórki pamięci do innej,
np. instrukcja:
MOV [SI],[BX] w procesie kompilacji będzie błędem
MOV nie może przenosić zawartości jednego rejestru
segmentowego do innego np. instrukcja:
MOV CS,DS w procesie kompilacji będzie błędem
Toteż by np. przenieść zawartość rejestru DS do CS trzeba wpierw
przenieść zawartość DS do innego rejestru ogólnego przeznaczenia i dopiero
jego zawartość do CS, np.
MOV AX,DS
;AX:=DS
MOV CS,AX
;CS:=AX
MOV nie może przenosić danych natychmiastowych do rejestru
segmentowego, np. instrukcja:
MOV CS,0B80H w procesie kompilacji będzie błędem
MOV nie może przenosić jednej z 8-bitowych połówek rejestru do
rejestrów 16-bitowych i odwrotnie.
Rozkaz przesyłania danych - MOV
Rozkazy logiczne
Wszystkie te rozkazy, których działanie jest oparte bezpośrednio na
zasadach logiki to rozkazy logiczne
Rozkazy te operują na poszczególnych bitach wewnątrz rejestrów
czy komórek pamięci. Z tego też względu rozkazy logiczne (wraz z
rozkazami przesunięć) często są nazywane rozkazami operowania
na bitach
Do najważniejszych rozkazów tej grupy należą:
Negacja logiczna (bajtu lub słowa) - NOT
Mnożenie logiczne (bajtu lub słowa) - AND
Dodawanie logiczne (bajtów lub słów) - OR
Logiczna nierównoważność (bajtów lub słów) - XOR
Rozkaz NOT neguje logicznie bity argumentu, tzn. odwraca stan
każdego bitu rejestru lub komórki pamięci. Nie wpływa na stan
rejestru znaczników (flag).
Przykład:
jeśli do rejestru BL przesłano liczbę
9C
H =
10011100B
, to po
użyciu rozkazu
NOT BL
, otrzymamy:
01100011B
=
63
H.
W języku asemblera można to przedstawić jako:
MOV BL,9C
;ładuj do BL wartość 9CH = 10011100B
NOT BL
;w BL otrzymamy liczbę 01100011 B = 63H
Rozkaz negacji logicznej - NOT
7
Rozkaz AND wykonuje mnożenie logiczne odpowiadających sobie
bitów dwóch argumentów (operandów) i umieszcza wynik w miejscu
lewego argumentu (operandu).
Bit wyniku ma wartość 1 wówczas, gdy odpowiadające sobie bity w
obydwu argumentach mają wartość 1, w pozostałych przypadkach bit
wyniku ma wartość 0.
Przykład:
jeśli do rejestru AL przesłano liczbę
9C
H =
10011100
B, a do BL
4C
H =
01001100
B to po użyciu rozkazu
AND AL,BL
otrzymamy w rejestrze AL
liczbę
0C
H =
00001100
B.
Rozkaz mnożenia logicznego - AND
W języku asemblera można to przedstawić jako:
MOV AL,9C
;ładuj do BL wartość 9CH = 10011100B
MOV BL,4C
;w BL otrzymamy liczbę 01100011B = 63H
AND AL,BL
;w AL Otrzymamy liczbę 00001100B = 0CH
Rozkaz OR wykonuje dodawanie logiczne odpowiadających sobie bitów
dwóch argumentów (operandów) i umieszcza wynik w miejscu lewego
argumentu (operandu).
Bit wyniku ma wartość O wówczas, gdy odpowiadające sobie bity w obydwu
argumentach mają wartość O, w pozostałych przypadkach bit wyniku ma
wartość 1.
Przykład:
jeśli do rejestru AL przesłano liczbę
9C
H =
10011100
B, a do BL
4C
H =
01001100
B to po użyciu rozkazu
OR AL,BL
otrzymamy w rejestrze AL liczbę
DC
H =
11011100
B.
Rozkaz dodawania logicznego - OR
W języku asemblera można to przedstawić jako:
MOV AL,9C
;ładuj do BL wartość 9CH = 10011100B
MOV BL,4C
;w BL otrzymamy liczbę 01100011B = 63H
OR AL,BL
;w AL Otrzymamy liczbę 11011100B = DCH
Rozkazy arytmetyczne
Do najważniejszych rozkazów tej grupy należą:
Dodawanie - ADD, ADC
Odejmowanie - SUB, SBB
Mnożenie - MUL, IMUL
Dzielenie - DIV, IDIV
Powielanie długości argumentu - CBW, CWD
Negacja lub uzupełnienie do dwóch - NEG
Inkrementacja i dekrementacja - INC, DEC
Porównywanie przeznaczenia ze źródłem - CMP
Dodawania całkowite dokonujemy za pomocą rozkazu ADD
ADD argument1,argument2
rejestr
komórka pamięci (z pewnymi wyjątkami)
rejestr
komórka pamięci (z pewnymi wyjątkami)
dana natychmiastowa
Do argumentu1 dodaj argument2 i wynik zapisz w argument1
Przykłady:
ADD AL,BL
ADD AL,4Ch
Rozkaz ten ma wpływ na następujące znaczniki rejestru flagowego (zależne od
wyniku dodawania):
OF - flaga nadmiaru (przepełnienia)
SF - flaga znaku
ZF - flaga zera
AF - flaga przeniesienia pomocniczego
PF - flaga parzystości
CF - flaga przeniesienia
Dodawanie
8
Odejmowania całkowitego dokonujemy za pomocą rozkazu SUB
SUB argument1,argument2
rejestr
komórka pamięci (z pewnymi wyjątkami)
rejestr
komórka pamięci (z pewnymi wyjątkami)
dana natychmiastowa
Od argumentu1 odejmij argument2 i wynik zapisz w argument1
Przykłady:
SUB AL,BL
SUB AL,4Ch
Rozkaz ten ma wpływ na następujące znaczniki rejestru flagowego (zależne od
wyniku odejmowania):
OF - flaga nadmiaru (przepełnienia)
SF - flaga znaku
ZF - flaga zera
AF - flaga przeniesienia pomocniczego
PF - flaga parzystości
CF - flaga przeniesienia
Odejmowanie
Mnożenie liczb całkowitych bez znaku dokonujemy za pomocą rozkazu MUL
MUL argument2
rejestr (rej)
komórka pamięci (mem)
Pomnóż argument2 przez niejawny argument1 (wartość rejestru AL lub AX) a
wynik zapisz w rejestrze AL lub AX
Rozkaz ten ma wpływ na następujące znaczniki rejestru flagowego (zależne od
wyniku):
OF - flaga nadmiaru (przepełnienia)
CF - flaga przeniesienia
ROZMIAR
ARGUMENTU
argument1 argument2 iloczyn
Bajt AL
reg(8bit)/mem(8bit)
AX
Słowo AX
reg(16bit)/mem(16bit)
DX:AX
przy czym jeśli ”górna” połowa wyniku znajdująca się w rejestrach AH lub DX
zawiera same zera to OF i CF ustawiane są na wartość 0, w przeciwnym razie na 1.
Mnożenie
Dzielenie liczb całkowitych bez znaku dokonujemy za pomocą rozkazu DIV
DIV argument2
rejestr (rej)
komórka pamięci (mem)
Podziel niejawny argument1 (wartość rejestru AL lub AX) przez argument2 a
wynik zapisz w rejestrze AL lub AX natomiast resztę z dzielenia w AH lub DX
ROZMIAR
ARGUMENTU
dzielna dzielnik iloraz
reszta
Słowo/Bajt AX
reg(8bit)/mem(8bit)
AL AH
Podwójne
Słowo/Słowo
DX:AX reg(16bit)/mem(16bit)
AX
DX
Gdy iloraz nie pomieści się w AL czy AX, czy też nawet w przydzielonej mu
specjalnej komórce pamięci, procesor wygeneruje przerwanie nr 0 (błąd
dzielenia przez zero) i poinformuje o tym.
Dzielenie
Rotacje i przesunięcia logiczne oraz
arytmetyczne
Rozkazy rotacji (przesunięcia cyklicznego):
ROL,
ROR,
RCL,
RCR,
rozkazy przesunięć logicznych:
SAL/SHL,
SHR
przesunięć arytmetycznych:
SAR,
Wynik rotacji lub przesunięcia wpisywany jest zawsze w miejsce
argumentu (operandu).
Rotacja różni się tym od przesunięć, iż w przesunięciach następuje
utrata bitów skrajnych przesuwanych rejestrów lub komórek
pamięci, natomiast w rotacjach nie ma tej utraty
.
Rozkazy przesunięć oraz rozkazy rotacji oddziałują na znaczniki (flagi)
CF i OF.
przemieszczają bity rejestru lub
komórki pamięci 8- lub 16-bitowej o
1 bit (lub więcej) w prawo lub w
lewo
9
CF
0
1
2
3
13
14
15
ROL x,wielkość
CF
0
1
2
3
13
14
15
ROR x,wielkość
CF
0
1
2
3
13
14
15
RCL x,wielkość
CF
0
1
2
3
13
14
15
RCR x,wielkość
Rozkazy rotacji
Rozkaz ROL dokonuje przesunięcia cyklicznego argumentu1 w lewo, o
liczbę bitów, określoną argumentem2.
ROL argument1,argument2
gdy dokonujemy przesunięcia o liczbę bitów większą niż 1 to argumentem2
jest rejestr CL, który uprzednio należy załadować liczbą, określającą o ile
bitów należy przesunąć lewy argument.
W rotacji bit opuszczający rejestr (komórkę pamięci) z jednego końca,
wchodzi do niego (do niej) z drugiego końca, a jego wartość kopiowana jest
do rejestru znaczników, jako znacznik (flaga) przeniesienia, CF. Jeśli
podczas tej rotacji, o 1 bit w lewo, nie zmieni się zawartość bitu znaku, to
wówczas znacznik OF jest zerowany, w przeciwnym razie znacznik OF
przyjmuje wartość 1.
Przykłady:
......
ROL AL, 1
.......
MOV CL,14
ROL BX,CL
............
Rotacja w lewo - ROL
CF
0
1
2
3
13
14
15
Rozkaz ROR dokonuje przesunięcia cyklicznego argumentu1 w prawo, o
liczbę bitów, określoną argumentem2.
ROR argument1,argument2
gdy dokonujemy przesunięcia o liczbę bitów większą niż 1 to argumentem2 jest
rejestr CL, który uprzednio należy załadować liczbą, określającą o ile bitów należy
przesunąć lewy argument.
W rotacji bit opuszczający rejestr (komórkę pamięci) z jednego końca, wchodzi do
niego (do niej) z drugiego końca, a jego wartość kopiowana jest do rejestru
znaczników, jako znacznik (flaga) przeniesienia, CF. Jeśli podczas tej rotacji, o 1 bit w
lewo, nie zmieni się zawartość bitu znaku, to wówczas znacznik OF jest zerowany, w
przeciwnym razie znacznik OF przyjmuje wartość 1.
Przykłady:
......
ROR AL, 1
.......
MOV CL,14
ROR BX,CL
............
Rotacja w prawo - ROR
CF
0
1
2
3
13
14
15
Rozkaz RCL dokonuje przesunięcia cyklicznego argumentu1 w prawo, o
liczbę bitów, określoną argumentem2 (jeśli więcej niż 1 bit to użyć rejestru
CL).
W tego rodzaju rotacji („rotacja długa”) bit CF jest łącznikiem między
najmłodszym a najstarszym bitem rolowanego argumentu (operandu).
Skrajny bit po opuszczeniu rolowanego argumentu wchodzi na miejsce
znacznika CF, podczas gdy poprzednia wartość CF wchodzi na brakujące
miejsce po stronie przeciwnej tegoż argumentu.
Rozkaz RCR działa analogicznie do rozkazu RCL
Rotacja w lewo (w prawo) z przeniesieniem -
RCL (RCR)
CF
0
1
2
3
13
14
15
RCL argument1,argument2
RCR argument1,argument2
CF
0
1
2
3
13
14
15
10
CF
0
1
2
3
13
14
15
SHL x,wielkość
0
CF
0
1
2
3
13
14
15
SHR x,wielkość
0
Rozkazy SHL i SHR używane są w programach jako rozkazy
odpowiednio zastępujące: rozkaz mnożenia MUL i rozkaz dzielenia
DIV, jak też w sytuacjach związanych z tablicami, z uzyskiwaniem
dostępu do danego elementu tablicy.
Rozkazy przesunięcia logicznego w lewo
(SHL) i prawo (SHR)
Przetwarzanie łańcuchów
Przez łańcuchy rozumiemy bloki kolejnych bajtów lub słów w pamięci,
których rozmiar może sięgać do 64kB.
Bloki te mogą się składać z:
wartości liczbowych, które są reprezentowane przez kody binarne lub
kody BCD
wartości alfanumeryczne
Rozkazy operujące na łańcuchach realizują pięć elementarnych
operacji:
kopiowanie
zapisywanie
odczytywanie
porównywanie
przeszukiwanie
Rozkazy łańcuchowe używają zawsze tych samych rejestrów do
adresowania argumentów (operandów) oraz do zliczania powtórzeń:
DS:SI - para rejestrów adresująca źródło danych
ES:DI - para rejestrów adresująca miejsce przeznaczenia, wyniku
CX - rejestr powtórzeń, licznik