architektura sk 08

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

a

najstarszym

bitem

rolowanego

między

najmłodszym

a

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

o

wielkość

pojemnika

danych

zmniejszona

o

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


Wyszukiwarka

Podobne podstrony:
architektura sk 05
architektura sk 01
architektura sk 04
architektura sk 03
architektura sk 09
architektura sk 07
architektura sk 13
architektura sk 06
Podstawy urbanistyki i architektury 5.10.08, Szkoła, Architektura i Urbanistyka
architektura sk 11
architektura sk 02
architektura sk 12
architektura sk 10
architektura sk 05
architektura sk 01
03 OZE 2013 11 08 sk
JDICE EC 08 architecture
EC08 COP Architecture 08 May JMU
08 AI PPA Architecture

więcej podobnych podstron