background image

ORGANIZACJA I 

ORGANIZACJA I 

REALIZACJA ROZKAZÓW 

REALIZACJA ROZKAZÓW 

(2)

(2)

Rotacje i przesunięcia

Rotacje i przesunięcia

Operacje na łańcuchach

Operacje na łańcuchach

Operacje na stosie

Operacje na stosie

Operacje na znacznikach

Operacje na znacznikach

Operacje WE/WY 

Operacje WE/WY 

background image

ROTACJE I PRZESUNIĘCIA 

ROTACJE I PRZESUNIĘCIA 

LOGICZNE ORAZ ARYTMETYCZNE

LOGICZNE ORAZ ARYTMETYCZNE

Rozkazy rotacji

Rozkazy rotacji

ROL,

ROL,

ROR, 

ROR, 

RCL, 

RCL, 

RCR, 

RCR, 

rozkazy przesunięć logicznych

rozkazy przesunięć logicznych

:

:

SAL/SHL,

SAL/SHL,

SHR 

SHR 

przesunięć arytmetycznych

przesunięć arytmetycznych

SAR, 

SAR, 

Wynik  rotacji  lub  przesunięcia  wpisywany  jest  zawsze  w  miejsce 

Wynik  rotacji  lub  przesunięcia  wpisywany  jest  zawsze  w  miejsce 

argumentu (operandu). 

argumentu (operandu). 

Rotacja  różni  się  tym  od  przesunięć,  iż  w  przesunięciach  następuje 

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, 

utrata bitów skrajnych przesuwanych rejestrów lub komórek pamięci, 

natomiast w rotacjach nie ma tej utraty. 

natomiast w rotacjach nie ma tej utraty. 

Rozkazy  przesunięć  logicznych  z  uwagi  na  "pewne  swoje 

Rozkazy  przesunięć  logicznych  z  uwagi  na  "pewne  swoje 

pokrewieństwo  w  działaniu"  do  rozkazów  mnożenia  i  dzielenia, 

pokrewieństwo  w  działaniu"  do  rozkazów  mnożenia  i  dzielenia, 

używane są często zamiennie, tym bardziej, że wykonują się od nich 

używane są często zamiennie, tym bardziej, że wykonują się od nich 

o wiele szybciej.

o wiele szybciej.

Rozkazy  przesunięć  oraz  rozkazy  rotacji  oddziałują  na  znaczniki 

Rozkazy  przesunięć  oraz  rozkazy  rotacji  oddziałują  na  znaczniki 

(flagi) CF i OF.

(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

background image

CF

CF

0

0

1

1

2

2

3

3

13

13

14

14

15

15

ROL x,wielkość

ROL x,wielkość

CF

CF

0

0

1

1

2

2

3

3

13

13

14

14

15

15

ROR x,wielkość

ROR x,wielkość

CF

CF

0

0

1

1

2

2

3

3

13

13

14

14

15

15

RCL x,wielkość

RCL x,wielkość

CF

CF

0

0

1

1

2

2

3

3

13

13

14

14

15

15

RCR x,wielkość

RCR x,wielkość

ROZKAZY ROTACJI (PRZESUNIĘCIA 

ROZKAZY ROTACJI (PRZESUNIĘCIA 

CYKLICZNEGO)

CYKLICZNEGO)

background image

Rozkaz ROL dokonuje przesunięcia cyklicznego argumentu1 w 

lewo, o liczbę bitów, określoną argumentem2. 

ROL argument1,argument2

ROL argument1,argument2

gdy  dokonujemy  przesunięcia  o  liczbę  bitów  większą  niż  1  to 

gdy  dokonujemy  przesunięcia  o  liczbę  bitów  większą  niż  1  to 

argumentem2 jest rejestr CL, który uprzednio należy załadować 

argumentem2 jest rejestr CL, który uprzednio należy załadować 

liczbą, określającą o ile bitów należy przesunąć lewy argument.

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 

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 

końca,  wchodzi  do  niego  (do  niej)  z  drugiego  końca,  a  jego 

wartość  kopiowana  jest  do  rejestru  znaczników,  jako  znacznik 

wartość  kopiowana  jest  do  rejestru  znaczników,  jako  znacznik 

(flaga) przeniesienia, CF. Jeśli podczas tej rotacji, o 1 bit w lewo, 

(flaga) przeniesienia, CF. Jeśli podczas tej rotacji, o 1 bit w lewo, 

nie  zmieni  się  zawartość  bitu  znaku,  to  wówczas  znacznik  OF 

nie  zmieni  się  zawartość  bitu  znaku,  to  wówczas  znacznik  OF 

jest  zerowany,  w  przeciwnym  razie  znacznik  OF  przyjmuje 

jest  zerowany,  w  przeciwnym  razie  znacznik  OF  przyjmuje 

wartość 1.

wartość 1.

 

Przykłady:

Przykłady:

......

......

ROL AL, 1 

ROL AL, 1 

.......

.......

MOV CL,14 

MOV CL,14 

ROL BX,CL 

ROL BX,CL 

............

............

ROTACJA W LEWO - ROL

ROTACJA W LEWO - ROL

CF

CF

0

0

1

1

2

2

3

3

13

13

14

14

15

15

background image

1

1

0100010

0100010

01000101

01000101

zmiana znaku

zmiana znaku

0

0

0010010

0010010

00100100

00100100

brak zmiany znaku

brak zmiany znaku

ROTACJA W LEWO - ROL

ROTACJA W LEWO - ROL

background image

Rozkaz ROR dokonuje przesunięcia cyklicznego argumentu1 w 

prawo, o liczbę bitów, określoną argumentem2. 

ROR argument1,argument2

ROR argument1,argument2

gdy  dokonujemy  przesunięcia  o  liczbę  bitów  większą  niż  1  to 

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ą, 

argumentem2  jest  rejestr  CL,  który  uprzednio  należy  załadować  liczbą, 

określającą o ile bitów należy przesunąć lewy argument.

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, 

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 

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 

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, 

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 

to wówczas znacznik OF jest zerowany, w przeciwnym razie znacznik OF 

przyjmuje wartość 1.

przyjmuje wartość 1.

 

Przykłady:

Przykłady:

......

......

ROR AL, 1 

ROR AL, 1 

.......

.......

MOV CL,14 

MOV CL,14 

ROR BX,CL 

ROR BX,CL 

............

............

ROTACJA W PRAWO - ROR

ROTACJA W PRAWO - ROR

CF

CF

0

0

1

1

2

2

3

3

13

13

14

14

15

15

background image

Rozkaz RCL

Rozkaz RCL

 dokonuje przesunięcia cyklicznego argumentu1 w 

 dokonuje przesunięcia cyklicznego argumentu1 w 

prawo, o liczbę bitów, określoną argumentem2 (jeśli więcej niż 1 

prawo, o liczbę bitów, określoną argumentem2 (jeśli więcej niż 1 

bit to użyć rejestru CL). 

bit to użyć rejestru CL). 

W  tego  rodzaju  rotacji  („rotacja  długa”)  bit  CF  jest  łącznikiem 

W  tego  rodzaju  rotacji  („rotacja  długa”)  bit  CF  jest  łącznikiem 

między 

najmłodszym 

najstarszym 

bitem 

rolowanego 

między 

najmłodszym 

najstarszym 

bitem 

rolowanego 

argumentu  (operandu).  Skrajny  bit  po  opuszczeniu  rolowanego 

argumentu  (operandu).  Skrajny  bit  po  opuszczeniu  rolowanego 

argumentu  wchodzi  na  miejsce  znacznika  CF,  podczas  gdy 

argumentu  wchodzi  na  miejsce  znacznika  CF,  podczas  gdy 

poprzednia wartość CF wchodzi na brakujące miejsce po stronie 

poprzednia wartość CF wchodzi na brakujące miejsce po stronie 

przeciwnej tegoż argumentu. 

przeciwnej tegoż argumentu. 

 

Rozkaz RCR

Rozkaz RCR

 działa analogicznie do rozkazu RCL

 działa analogicznie do rozkazu RCL

ROTACJA W LEWO (W PRAWO) Z 

ROTACJA W LEWO (W PRAWO) Z 

PRZENIESIENIEM - RCL (RCR)

PRZENIESIENIEM - RCL (RCR)

CF

CF

0

0

1

1

2

2

3

3

13

13

14

14

15

15

RCL argument1,argument2

RCL argument1,argument2

RCR argument1,argument2

RCR argument1,argument2

CF

CF

0

0

1

1

2

2

3

3

13

13

14

14

15

15

background image

0

0

1000101

1000101

1000101

1000101

1

1

CF=1

CF=1

CF=0

CF=0

ROTACJA W LEWO (W PRAWO) Z 

ROTACJA W LEWO (W PRAWO) Z 

PRZENIESIENIEM - RCL (RCR)

PRZENIESIENIEM - RCL (RCR)

background image

CF

CF

0

0

1

1

2

2

3

3

13

13

14

14

15

15

SHL x,wielkość

SHL x,wielkość

0

0

CF

CF

0

0

1

1

2

2

3

3

13

13

14

14

15

15

SHR x,wielkość

SHR x,wielkość

0

0

Rozkazy  SHL  i  SHR  używane  są  w  programach  jako 

Rozkazy  SHL  i  SHR  używane  są  w  programach  jako 

rozkazy  odpowiednio  zastępujące:  rozkaz  mnożenia 

rozkazy  odpowiednio  zastępujące:  rozkaz  mnożenia 

MUL  i  rozkaz  dzielenia  DIV,  jak  też  w  sytuacjach 

MUL  i  rozkaz  dzielenia  DIV,  jak  też  w  sytuacjach 

związanych  z  tablicami,  z  uzyskiwaniem  dostępu  do 

związanych  z  tablicami,  z  uzyskiwaniem  dostępu  do 

danego elementu tablicy. 

danego elementu tablicy. 

ROZKAZY PRZESUNIĘCIA 

ROZKAZY PRZESUNIĘCIA 

LOGICZNEGO W LEWO (SHL) I PRAWO 

LOGICZNEGO W LEWO (SHL) I PRAWO 

(SHR)

(SHR)

background image

0

0

0000010

0000010

0000010

0000010

0

0

0

0

ROZKAZY PRZESUNIĘCIA 

ROZKAZY PRZESUNIĘCIA 

LOGICZNEGO W LEWO (SHL)

LOGICZNEGO W LEWO (SHL)

background image

W  czasie  przesuwania  najmniej  znaczące  bity 

W  czasie  przesuwania  najmniej  znaczące  bity 

argumentu  są  wprowadzane  kolejno  w  miejsce 

argumentu  są  wprowadzane  kolejno  w  miejsce 

znacznika CF, natomiast najbardziej znaczący bit nie 

znacznika CF, natomiast najbardziej znaczący bit nie 

zmienia wartości.

zmienia wartości.

CF

CF

0

0

1

1

2

2

3

3

13

13

14

14

15

15

SAR x,wielkość

SAR x,wielkość

Arytmetyczne przesunięcie w lewo (SAL) nie istnieje. 

Arytmetyczne przesunięcie w lewo (SAL) nie istnieje. 

Gdy  wartość  danej  zajmuje  mniej  bitów  niż  długość 

Gdy  wartość  danej  zajmuje  mniej  bitów  niż  długość 

pojemnika 

danych 

zmniejszona 

wielkość 

pojemnika 

danych 

zmniejszona 

wielkość 

przesunięcia,  to  można  użyć  przesunięcia  w  lewo. 

przesunięcia,  to  można  użyć  przesunięcia  w  lewo. 

Działa  jak  przesunięcie  logiczne  w  lewo  (SHL).

Działa  jak  przesunięcie  logiczne  w  lewo  (SHL).

W  innych  przypadkach  bit  znaku  musi  być 

W  innych  przypadkach  bit  znaku  musi  być 

programowo zapamiętany i potem przywrócony. 

programowo zapamiętany i potem przywrócony. 

ROZKAZY PRZESUNIĘCIA 

ROZKAZY PRZESUNIĘCIA 

ARYTMETYCZNEGO W PRAWO (SAR)

ARYTMETYCZNEGO W PRAWO (SAR)

background image

1

1

10101010110101

10101010110101

0

0

1

1

11010101011010

11010101011010

1

1

1

1

111010101011010

111010101011010

ROZKAZY PRZESUNIĘCIA 

ROZKAZY PRZESUNIĘCIA 

ARYTMETYCZNEGO W PRAWO (SAR)

ARYTMETYCZNEGO W PRAWO (SAR)

background image

PRZETWARZANIE ŁAŃCUCHÓW

PRZETWARZANIE ŁAŃCUCHÓW

Przez 

Przez 

łańcuchy

łańcuchy

 rozumiemy bloki kolejnych bajtów lub słów w 

 rozumiemy bloki kolejnych bajtów lub słów w 

pamięci, których rozmiar może sięgać do 64kB. 

pamięci, których rozmiar może sięgać do 64kB. 

Bloki te mogą się składać z:

Bloki te mogą się składać z:

wartości  liczbowych,  które  są  reprezentowane  przez  kody 

wartości  liczbowych,  które  są  reprezentowane  przez  kody 

binarne lub kody BCD 

binarne lub kody BCD 

wartości alfanumeryczne

wartości alfanumeryczne

Rozkazy 

operujące 

na 

łańcuchach 

realizują 

pięć 

Rozkazy 

operujące 

na 

łańcuchach 

realizują 

pięć 

elementarnych operacji: 

elementarnych operacji: 

kopiowanie

kopiowanie

zapisywanie

zapisywanie

odczytywanie

odczytywanie

porównywanie

porównywanie

przeszukiwanie

przeszukiwanie

Rozkazy łańcuchowe używają zawsze tych samych rejestrów 

Rozkazy łańcuchowe używają zawsze tych samych rejestrów 

do adresowania argumentów (operandów) oraz do zliczania 

do adresowania argumentów (operandów) oraz do zliczania 

powtórzeń: 

powtórzeń: 

DS:SI - para rejestrów adresująca źródło danych 

DS:SI - para rejestrów adresująca źródło danych 

ES:DI - para rejestrów adresująca miejsce przeznaczenia, wyniku

ES:DI - para rejestrów adresująca miejsce przeznaczenia, wyniku

CX - rejestr powtórzeń, licznik

CX - rejestr powtórzeń, licznik

background image

Rozkazy:

• MOVS 
• MOVSB (przesyła bajty) 
• MOVSW (przesyła słowa)

pozwalają  na  przesyłanie  z  jednego  miejsca  pamięci  do  drugiego 
pojedynczych  bajtów,  słów  lub  łańcuchów  znakowych,  posługując  się 
przy  tym  przedrostkiem  powtórzeń  REP,  umożliwiającym  powtarzanie 
operacji, aż do wyzerowania licznika powtórzeń. 
Każdy  z  rozkazów  blokowych  automatycznie  wykonuje  zwiększanie  lub 
zmniejszanie swoich wskaźników zawartych w rejestrach SI (źródło) i DI 
(cel),  natomiast  przedrostek  REP  zadba  już  o  to,  by  odliczać 
powtórzenie  operacji  wg  wskazań  rejestru  CX,  za  każdym  jej  zajściem 
(dekrementując rejestr CX). 
Przesyłanie (kopiowanie) w pamięci może się odbywać:

• "do  przodu"  -  rozkaz  CLD  (ustawiający  znacznik  kierunku  CF=0) 

towarzyszy rozkazom blokowym MOVS, MOVSB, MOVSW 

• "do  tyłu"    -  rozkaz  STD  (ustawiający  znacznik  kierunku  CF=1) 

towarzyszy rozkazom blokowym MOVS, MOVSB, MOVSW 

KOPIOWANIE W OBRĘBIE PAMIĘCI - 

KOPIOWANIE W OBRĘBIE PAMIĘCI - 

MOVS, MOVSB, MOVSW

MOVS, MOVSB, MOVSW

background image

kopiowanie „do przodu”, CF=0 (CLD)

kopiowanie „do przodu”, CF=0 (CLD)

a

d

re

s

y

 w

zg

d

n

e

a

d

re

s

y

 w

zg

d

n

e

0500

0500

1000

1000

1500

1500

2000

2000

2500

2500

3000

3000

3500

3500

4000

4000

źródłowy 

źródłowy 

obszar

obszar

pamięci

pamięci

wynikowy 

wynikowy 

obszar

obszar

pamięci

pamięci

źródłowy 

źródłowy 

obszar

obszar

pamięci

pamięci

wynikowy 

wynikowy 

obszar

obszar

pamięci

pamięci

kopiowanie „do tyłu”, CF=1 (STD)

kopiowanie „do tyłu”, CF=1 (STD)

offset pamięci

offset pamięci

...

...

MOV SI,0000H

MOV SI,0000H

;offset źródła, skąd pobieramy dane

;offset źródła, skąd pobieramy dane

MOV DI,0100H

MOV DI,0100H

;offset przeznaczenia, dokąd dane skopiujemy

;offset przeznaczenia, dokąd dane skopiujemy

MOV CX,500

MOV CX,500

;ilość bajtów do przesłania

;ilość bajtów do przesłania

CLD

CLD

;zerujemy flagę kierunku, kopiowanie "do przodu"

;zerujemy flagę kierunku, kopiowanie "do przodu"

REP MOVSB

REP MOVSB

;kopiuj, aż rejestr CX osiągnie wartość 0

;kopiuj, aż rejestr CX osiągnie wartość 0

...

...

Przykład

Przykład

:

:

KOPIOWANIE W OBRĘBIE PAMIĘCI - 

KOPIOWANIE W OBRĘBIE PAMIĘCI - 

MOVS, MOVSB, MOVSW 

MOVS, MOVSB, MOVSW 

DS:SI

DS:SI

DS:SI

DS:SI

ES:DI

ES:DI

ES:DI

ES:DI

CX

CX

CX

CX

background image

Obszar źródłowy pamięci (do kopiowania DS:SI)

Obszar źródłowy pamięci (do kopiowania DS:SI)

MOV SI,0000H

MOV SI,0000H

;offset źródła, skąd pobieramy dane

;offset źródła, skąd pobieramy dane

MOV DI,0100H

MOV DI,0100H

;offset przeznaczenia, dokąd dane skopiujemy

;offset przeznaczenia, dokąd dane skopiujemy

MOV CX,08

MOV CX,08

;ilość bajtów do przesłania

;ilość bajtów do przesłania

CLD

CLD

;zerujemy flagę kierunku, kopiowanie "do przodu"

;zerujemy flagę kierunku, kopiowanie "do przodu"

REP MOVSB

REP MOVSB

;kopiuj, aż rejestr CX osiągnie wartość 0

;kopiuj, aż rejestr CX osiągnie wartość 0

Obszar docelowy pamięci (po skopiowaniu ES:DI)

Obszar docelowy pamięci (po skopiowaniu ES:DI)

Obszar docelowy pamięci (ES:DI)

Obszar docelowy pamięci (ES:DI)

Przykład:

Przykład:

KOPIOWANIE W OBRĘBIE PAMIĘCI - 

KOPIOWANIE W OBRĘBIE PAMIĘCI - 

MOVS, MOVSB, MOVSW

MOVS, MOVSB, MOVSW

background image

Rozkazy:

• STOS 
• STOSB (kopiuje bajty) 
• STOSW (kopiuje słowa)

pozwalają na  przesyłanie  z  rejestru AX (akumulatora)  bajtu lub 
słowa, do pamięci adresowanej parą rejestrów ES:DI. 
Po  każdym  przesłaniu  rejestr  DI  jest  zwiększany  (kopiowanie 
„do przodu”) lub zmniejszany (kopiowanie „do tyłu”) o 1 lub o 2 
zależnie od tego czy kopiujemy bajty, czy też słowa.
Użycie  mnemoników  STOSB  i  STOSW  określa  wprost  czy  mają 
być kopiowane bajty, czy słowa. 

KOPIOWANIE Z AKUMULATORA DO 

KOPIOWANIE Z AKUMULATORA DO 

PAMIĘCI - STOS, STOSB, STOSW

PAMIĘCI - STOS, STOSB, STOSW

AH

AL

15

7

0

AX

ES:D

I

ES:D

I

Pamięć

background image

Obszar docelowy pamięci (ES:DI)

Obszar docelowy pamięci (ES:DI)

Przykład:

Przykład:

Obszar docelowy pamięci po kopiowaniu (ES:DI)

Obszar docelowy pamięci po kopiowaniu (ES:DI)

KOPIOWANIE Z AKUMULATORA DO 

KOPIOWANIE Z AKUMULATORA DO 

PAMIĘCI - STOS, STOSB, STOSW 

PAMIĘCI - STOS, STOSB, STOSW 

background image

Rozkazy:

• LODS 

• LODSB (kopiuje bajty) 

• LODSW (kopiuje słowa)

pozwalają na przesyłanie bajtu lub słowa do rejestru AX (akumulatora) z 

pamięci adresowanej parą rejestrów DS:SI. 

Po  każdym  przesłaniu  rejestr  SI  jest  zwiększany  (kopiowanie  „do 

przodu”) lub zmniejszany (kopiowanie „do tyłu”) o 1 lub o 2 zależnie od 

tego czy kopiujemy bajty, czy też słowa.

Użycie  mnemoników  LODSB  i  LODSW  określa  wprost  czy  mają  być 

kopiowane bajty, czy słowa. 

Przykłady

Przykłady

:

:

...

...

CLD

CLD

MOV SI,0

MOV SI,0

LODSB

LODSB

...

...

STD

STD

MOV SI,10

MOV SI,10

LODSW

LODSW

...

...

KOPIOWANIE Z PAMIĘCI DO 

KOPIOWANIE Z PAMIĘCI DO 

AKUMULATORA - LODS, LODSB, 

AKUMULATORA - LODS, LODSB, 

LODSW 

LODSW 

AH

AL

15

7

0

AX

DS:SI

DS:SI

Pamięć

background image

MOV SI,0 

MOV SI,0 

MOV CX,8

MOV CX,8

CLD

CLD

REP LODSB

REP LODSB

KOPIOWANIE Z PAMIĘCI DO 

KOPIOWANIE Z PAMIĘCI DO 

AKUMULATORA - LODS, LODSB, 

AKUMULATORA - LODS, LODSB, 

LODSW 

LODSW 

background image

Rozkazy:

• CMPS 

• CMPSB (porównuje bajty) 

• CMPSW (porównuje słowa)

pozwalają  na  porównanie  bajtu  lub  słowa  znajdującego  się  w  źródle  i 

celu.

Działają  podobnie  jak  CMP  z  tą  różnicą,  że  odejmują  argument 

przeznaczenia  (adresowany  przez  parę  rejestrów  ES:DI)  od  argumentu 

źródła (adresowany przez parę rejestrów DS:SI).

Po  wykonaniu  porównywania,  rejestry  DI  i  SI  są  zwiększane  lub 

zmniejszane, o 1 lub o 2 (w zależności to od tego czy porównujemy "do 

przodu",  czy  "do  tyłu"  pamięci  oraz  czy  porównujemy  bajty,  czy  też 

słowa). 

Użycie  mnemoników  CMPSB  i  CMPSW  określa  wprost  czy  mają  być 

porównywane bajty, czy słowa. 
W  celu  porównania  więcej  niż  jednego  elementu,  należy  stosować 
przedrostki 

• REPE  -  sprawia,  iż  procesor  porównuje  łańcuchy  dopóty,  dopóki 

rejestr CX będzie miał wartość 0 lub też zostaną znalezione dwa nie 
pasujące do siebie elementy

lub 

• REPNE  -  sprawia,  iż  procesor  porównuje  łańcuchy  dopóty,  dopóki 

rejestr  CX  będzie  posiadał  wartość  0  lub  też  zostaną  znalezione 
dwa te same elementy

PORÓWNYWANIE ŁAŃCUCHÓW

PORÓWNYWANIE ŁAŃCUCHÓW

background image

Rozkazy:

• SCAS 

• SCASB (porównuje bajty) 

• SCASW (porównuje słowa)

powodują  odjęcie  łańcucha  (bajtu  lub  słowa)  adresowanego 
przez  rejestry  ES:DI  od  zawartości  akumulatora  (AL  lub  AX). 
Wynik nie jest zapamiętywany, ustawiane są tylko znaczniki. 
Po  wykonaniu  porównywania  rejestr  DI  jest  zwiększany  lub 
zmniejszany o 1, lub o 2; zależy to od tego czy porównujemy "do 
przodu"  czy  "do  tyłu"  pamięci  oraz  czy  porównujemy  bajty,  czy 
też słowa. 
Użycie  mnemoników  SCASB  i  SCASW  określa  wprost  czy  mają 
być porównywane bajty, czy słowa. 
Podobnie  jak  dla  rozkazów  CMPS,  CMPSB,  CMPSW,  tak  i  w  tym 
przypadku,  nie  stosuje  się  przedrostka  REP,  natomiast  stosuje 
się przedrostki REPE lub REPNE. 

PORÓWNYWANIE Z ZAWARTOŚCIĄ 

PORÓWNYWANIE Z ZAWARTOŚCIĄ 

AKUMULATORA

AKUMULATORA

background image

ROZKAZY OPERACJI NA 

ROZKAZY OPERACJI NA 

STOSIE

STOSIE

Stos omówiliśmy już wcześniej - wtedy sygnalizowałem 

Stos omówiliśmy już wcześniej - wtedy sygnalizowałem 

istnienie dwóch instrukcji, które służą do obsługi stosu 

istnienie dwóch instrukcji, które służą do obsługi stosu 

- PUSH i POP.

- PUSH i POP.

PUSH

PUSH

 -  powoduje zapisanie wartości lub zawartości 

 -  powoduje zapisanie wartości lub zawartości 

rejestru na stos

rejestru na stos

POP

POP

 - pobranie wartości ze stosu i zapisanie jej do 

 - pobranie wartości ze stosu i zapisanie jej do 

rejestru.

rejestru.

       

       

Składnia:

Składnia:

       

       

PUSH REJ16

PUSH REJ16

       

       

PUSH WAR16

PUSH WAR16

       

       

POP REJ16

POP REJ16

  

  

"REJ16" i "WAR16" - oznaczają odpowiednio rejestr i 

"REJ16" i "WAR16" - oznaczają odpowiednio rejestr i 

wartość 16-bitową - tzn. nie można zapisywać ani 

wartość 16-bitową - tzn. nie można zapisywać ani 

pobierać ze stosu wartości 8-bitowych  np. AL, AH...; 

pobierać ze stosu wartości 8-bitowych  np. AL, AH...; 

inaczej: instrukcje PUSH i POP operują jedynie na 

inaczej: instrukcje PUSH i POP operują jedynie na 

słowach czyli danych 2-bajtowych.

słowach czyli danych 2-bajtowych.

background image

Instrukcja  PUSHA  i  POPA  powodują  zapisanie  na  stos 
wszystkich  rejestrów  -  nie  trzeba  wywoływać  kilkakrotnie 
instrukcji  PUSH  i  POP  -  wpływa    to  więc  na  skrócenie 
programu.
Instrukcje  te  nie  są  dostępne  we  wszystkich  wersjach 
procesora (tylko dla procesorów 80188 i lepszych).

PUSHA

PUSHA

  -  zapisuje  wartości  wszystkich  rejestrów 

  -  zapisuje  wartości  wszystkich  rejestrów 

na stos,

na stos,

POPA

POPA

 - pobiera wartości wszystkich rejestrów ze 

 - pobiera wartości wszystkich rejestrów ze 

stosu.

stosu.

Oczywiście,  nie  dotyczy  to  rejestrów  IP  i  kilku  innych,  gdyż 
pobranie ze stosu wartości rejestru IP (wskaźnik instrukcji -  
wskaźnik  aktualnie  wykonywanej  instrukcji)  spowodowałoby 
przeskok do miejsca w programie, już wykonanego, tj. przed 
instrukcję  PUSHA,  doprowadziłoby  to  do  powstania  "pętli 
nieskończonej".

       

       

Składnia:

Składnia:

       

       

PUSHA

PUSHA

       

       

POPA

POPA

ROZKAZY OPERACJI NA STOSIE - 

ROZKAZY OPERACJI NA STOSIE - 

PUSHA, POPA

PUSHA, POPA

background image

Ostatnią już parą instrukcji jest 

PUSHF

 i 

POPF

, których 

działanie jest identyczne do PUSHA i POPA, lecz ogranicza się 
wyłącznie do rejestru flagowego

       

       

Składnia:

Składnia:

PUSHF

PUSHF

POPF

POPF

Bezargumentowy  rozkaz  PUSHF  nie  wpływa  na  stan  flag,  w 
przeciwieństwie  do  "nierozłącznego"  z  nim  rozkazu  POPF 
wykonującego  czynność  odwrotną  w  stosunku  do  PUSHF,  a 
dokładniej  rozkazu,  który  odczytuje  słowo  ze  stosu  i 
umieszcza go w rejestrze znaczników (flagowym).

ROZKAZY OPERACJI NA STOSIE - 

ROZKAZY OPERACJI NA STOSIE - 

PUSHF, POPF

PUSHF, POPF

background image

Operacji  na  rejestrze  flagowym  można  też  dokonywać  za  pomocą 
bezargumentowych rozkazów LAHF i SAHF. 
Rozkaz 

LAHF

  powoduje  załadowanie  do  rejestru  akumulatora,  do 

części  AH,  mniej  znaczącego  bajtu  rejestru  znaczników  czyli  bitów 
flagowych od nr 0 do 7 (CF, PF, AF, ZF, SF). 
Jego  "bliźniaczym"  rozkazem  jest  rozkaz 

SAHF

,  który  powoduje 

załadowanie  rejestru  AH  do  mniej  znaczącego  bajtu  rejestru 
znaczników. 
Przykłady użycia rozkazów operujących na znacznikach:

PF=0

AF=0

ZF=0

SF=0

CF=0

O

O

F

F

D

D

F

F

I

I

F

F

T

T

F

F

S

S

F

F

Z

Z

F

F

A

A

F

F

P

P

F

F

C

C

F

F

0

7

8

15

0

1

0

0

0

0

0

0

O

O

F

F

D

D

F

F

I

I

F

F

T

T

F

F

S

S

F

F

Z

Z

F

F

A

A

F

F

P

P

F

F

C

C

F

F

0

7

8

15

1

0

1

1

1

1

1

1

ROZKAZY OPERACJI NA ZNACZNIKACH

ROZKAZY OPERACJI NA ZNACZNIKACH

 - (poza PUSHF, POPF) LAHF, SAHF

 - (poza PUSHF, POPF) LAHF, SAHF

background image

Rozkazy  wejścia/wyjścia  służą  do  przesyłania  informacji  między 

Rozkazy  wejścia/wyjścia  służą  do  przesyłania  informacji  między 

procesorem a jego otoczeniem. 

procesorem a jego otoczeniem. 

Do komunikowania się procesora 8086/88 z jego otoczeniem utworzono 

Do komunikowania się procesora 8086/88 z jego otoczeniem utworzono 

65536 "okienek" (o numerach od 0 do 65535) zwanych portami. 

65536 "okienek" (o numerach od 0 do 65535) zwanych portami. 

Odczyt  z  tych  portów  (zapis  do  nich)  odbywa  się  zawsze  za 

Odczyt  z  tych  portów  (zapis  do  nich)  odbywa  się  zawsze  za 

pośrednictwem:

pośrednictwem:

rejestru akumulatora AL (port - 8 bitowy) 

rejestru akumulatora AL (port - 8 bitowy) 

rejestru akumulatora AX (port 16 - bitowy). 

rejestru akumulatora AX (port 16 - bitowy). 

Do  odczytywania  danej  z  portu  służy

Do  odczytywania  danej  z  portu  służy

 

dwuargumentowy  rozkaz  IN  o 

dwuargumentowy  rozkaz  IN  o 

składni: 

składni: 

IN akumulator, nr_portu

IN akumulator, nr_portu

 lub 

 lub 

IN akumulator, rejestr DX

IN akumulator, rejestr DX

 

 

Do zapisywania danej do portu służy

Do zapisywania danej do portu służy

 

rozkaz OUT o składni: 

rozkaz OUT o składni: 

OUT nr_portu, akumulator

OUT nr_portu, akumulator

 lub 

 lub 

OUT rejestr DX, akumulator

OUT rejestr DX, akumulator

 

 

Przykłady

Przykłady

:

:

IN AL,16

IN AL,16

;odczytaj do rejestru AL bajt z portu o adresie nr 16

;odczytaj do rejestru AL bajt z portu o adresie nr 16

IN AX,DX

IN AX,DX

;

;

odczytaj do rejestru AX słowo z portu o numerze w 

odczytaj do rejestru AX słowo z portu o numerze w 

rejestrze DX

rejestrze DX

OUT 6D,AX

OUT 6D,AX

;wyprowadź słowo z rejestru AX do portu o numerze 6D

;wyprowadź słowo z rejestru AX do portu o numerze 6D

OUT DX,AX

OUT DX,AX

;wyprowadź słowo z rejestru AX do portu o numerze w 

;wyprowadź słowo z rejestru AX do portu o numerze w 

rejestrze DX

rejestrze DX

ROZKAZY WEJŚCIA/WYJŚCIA - IN, OUT

ROZKAZY WEJŚCIA/WYJŚCIA - IN, OUT

background image

DZIĘKUJĘ ZA UWAGĘ ! 

DZIĘKUJĘ ZA UWAGĘ ! 


Document Outline