background image

Rejestr  stanu  koprocesora

Rejestr  stanu  koprocesora

rejestr stanu koprocesora 

rejestr stanu koprocesora 

zawiera różne pola informujące o przebiegu 

zawiera różne pola informujące o przebiegu 

obliczeń, wystąpieniu specjalnych warunków, określa położenie 

obliczeń, wystąpieniu specjalnych warunków, określa położenie 

wierzchołka stosu i inne informacje

wierzchołka stosu i inne informacje

zawartość rejestru stanu koprocesora może być przesłana do rejestru 

zawartość rejestru stanu koprocesora może być przesłana do rejestru 

AX za pomocą rozkazu

AX za pomocą rozkazu

fstsw

fstsw

ax

ax

w języku C rejestr ten można odczytać za pomocą funkcji 

w języku C rejestr ten można odczytać za pomocą funkcji 

_status87

_status87

background image

Rejestr  sterujący  koprocesora 

Rejestr  sterujący  koprocesora 

(1)

(1)

rejestr sterujący koprocesora

rejestr sterujący koprocesora

 zawiera pola, które 

 zawiera pola, które 

określają sposób działanie koprocesora

określają sposób działanie koprocesora

zawartość tego rejestru zmienia się wyłącznie 

zawartość tego rejestru zmienia się wyłącznie 

wskutek jawnego załadowania go przez program, 

wskutek jawnego załadowania go przez program, 

np. za pomocą rozkazu 

np. za pomocą rozkazu 

fldcw

fldcw

tryb_pracy

tryb_pracy

dw

dw

037FH ; 

037FH ; 

typowa wartość

typowa wartość

– — — – — — – — —

– — — – — — – — —

fldcw

fldcw

 tryb_pracy

 tryb_pracy

background image

Rejestr  sterujący  koprocesora 

Rejestr  sterujący  koprocesora 

(2)

(2)

poprzez ustawienie odpowiednich bitów w tym 

poprzez ustawienie odpowiednich bitów w tym 

rejestrze można określić reguły zaokrąglania, 

rejestrze można określić reguły zaokrąglania, 

sposób reagowania koprocesora na pewne 

sposób reagowania koprocesora na pewne 

zdarzenia w trakcie obliczeń (np. dzielenie przez 

zdarzenia w trakcie obliczeń (np. dzielenie przez 

zero) i inne

zero) i inne

zawartość rejestru sterującego koprocesora można 

zawartość rejestru sterującego koprocesora można 

także odczytać i zapisać  na poziomie języka C za 

także odczytać i zapisać  na poziomie języka C za 

pomocą funkcji 

pomocą funkcji 

_control87

_control87

background image

Rodzaje zaokrąglenia

Rodzaje zaokrąglenia

bity RC określają rodzaj stosowanego zaokrąglenia (do liczby 

bity RC określają rodzaj stosowanego zaokrąglenia (do liczby 

reprezentowalnej w formacie zmiennoprzecinkowym, na 

reprezentowalnej w formacie zmiennoprzecinkowym, na 

rysunku w postaci kropki):

rysunku w postaci kropki):

00 — zaokrąglenie do liczby najbliższej (zob. rys.)

00 — zaokrąglenie do liczby najbliższej (zob. rys.)

11 — zaokrąglenie w kierunku zera  (zob. rys.)

11 — zaokrąglenie w kierunku zera  (zob. rys.)

01 — zaokrąglenie w dół (w kierunku –

01 — zaokrąglenie w dół (w kierunku –

10 — zaokrąglenie w górę (w kierunku +

10 — zaokrąglenie w górę (w kierunku +

)

)

background image

Rozkazy przesyłania danych (1)

Rozkazy przesyłania danych (1)

we wielu obliczeniach wykonywanych przez 

we wielu obliczeniach wykonywanych przez 

koprocesor jednym z argumentów jest rejestr 

koprocesor jednym z argumentów jest rejestr 

będący wierzchołkiem stosu rejestrów 

będący wierzchołkiem stosu rejestrów 

koprocesora

koprocesora

w operacjach przesyłania danych podstawowe 

w operacjach przesyłania danych podstawowe 

znaczenia mają dwa rozkazy:

znaczenia mają dwa rozkazy:

FLD

FLD

 — ładowanie na wierzchołek stosu koproce-

 — ładowanie na wierzchołek stosu koproce-

sora liczby zmiennoprzecinkowej pobranej z 

sora liczby zmiennoprzecinkowej pobranej z 

lokacji pamięci lub ze stosu koprocesora

lokacji pamięci lub ze stosu koprocesora

FST

FST

 — przesłanie zawartości wierzchołka stosu 

 — przesłanie zawartości wierzchołka stosu 

do lokacji pamięci lub do innego rejestru stosu 

do lokacji pamięci lub do innego rejestru stosu 

koprocesora

koprocesora

background image

Rozkazy przesyłania danych (2)

Rozkazy przesyłania danych (2)

z

z

dq

dq

–27.6082

–27.6082

—  —  —  —  —  —  

—  —  —  —  —  —  

fld

fld

z

z

background image

Rozkazy przesyłania danych (3)

Rozkazy przesyłania danych (3)

obok podstawowych rozkazów FLD i FST istnieje 

obok podstawowych rozkazów FLD i FST istnieje 

kilka odmian tych rozkazów przeznaczonych do 

kilka odmian tych rozkazów przeznaczonych do 

różnych zastosowań

różnych zastosowań

rozkaz FILD ładuje na wierzchołek stosu liczbę 

rozkaz FILD ładuje na wierzchołek stosu liczbę 

całkowitą pobraną z lokacji pamięci — przed 

całkowitą pobraną z lokacji pamięci — przed 

załadowaniem na stos format liczby jest 

załadowaniem na stos format liczby jest 

zmieniany na 80-bitowy (zmiennoprzecinkowy)

zmieniany na 80-bitowy (zmiennoprzecinkowy)

rozkaz FIST przesyła zawartość wierzchołka stosu 

rozkaz FIST przesyła zawartość wierzchołka stosu 

do lokacji pamięci z jednoczesnym 

do lokacji pamięci z jednoczesnym 

przekształceniem  na format całkowity

przekształceniem  na format całkowity

background image

Rozkazy przesyłania danych (4)

Rozkazy przesyłania danych (4)

istnieją też rozkazy do przesyłania i konwersji liczb 

istnieją też rozkazy do przesyłania i konwersji liczb 

kodowanych w systemie BCD

kodowanych w systemie BCD

dostępnych jest kilka rozkazów, które wpisują 

dostępnych jest kilka rozkazów, które wpisują 

stałe matematyczne na wierzchołek stosu:

stałe matematyczne na wierzchołek stosu:

FLDZ

FLDZ

– ładowanie 0

– ładowanie 0

FLD1

FLD1

– ładowanie 1

– ładowanie 1

FLDPI

FLDPI

– ładowanie 

– ładowanie 

FLDL2E

FLDL2E

– ładowanie log 

– ładowanie log 

2

2

 e

 e

FLDL2T

FLDL2T

– ładowanie log 

– ładowanie log 

2

2

 10

 10

FLDLG2

FLDLG2

– ładowanie log 

– ładowanie log 

10

10

 2

 2

FLDLN2

FLDLN2

– ładowanie log 

– ładowanie log 

e

e

  2

  2

background image

Działania arytmetyczne (1)

Działania arytmetyczne (1)

działania arytmetyczne wykonywane są przez 

działania arytmetyczne wykonywane są przez 

rozkazy:

rozkazy:

FADD

FADD

dodawanie

dodawanie

FSUB

FSUB

odejmowanie

odejmowanie

FMUL

FMUL

mnożenie

mnożenie

FDIV

FDIV

dzielenie

dzielenie

 

 

na operandach oznaczonych jako <źródło> i <cel> 

na operandach oznaczonych jako <źródło> i <cel> 

— rezultat wpisywany jest do <cel>

— rezultat wpisywany jest do <cel>

podstawowy format jest następujący:

podstawowy format jest następujący:

<cel>

<cel>

 

 

 

 

 

 

 

 

 <cel>

 <cel>

  

  

{

{

 +, 

 +, 

,

,

*

*

 , /

 , /

 }

 }

 

 

 źródło

 źródło

pierwszy operand

pierwszy operand

drugi operand

drugi operand

 

 

background image

Działania arytmetyczne (2)

Działania arytmetyczne (2)

we wszystkich przypadkach jednym z operandów 

we wszystkich przypadkach jednym z operandów 

musi być wierzchołek stosu

musi być wierzchołek stosu

przykładowo rozkaz

przykładowo rozkaz

FDIV

FDIV

ST(5), ST(0)

ST(5), ST(0)

wykonuje obliczenie

wykonuje obliczenie

ST(0)

ST(5)

ST(5)

background image

Wartości specjalne w koprocesorze 

Wartości specjalne w koprocesorze 

arytmetycznym (1)

arytmetycznym (1)

złożone obliczenia numeryczne trwają czasami 

złożone obliczenia numeryczne trwają czasami 

wiele godzin czy nawet dni

wiele godzin czy nawet dni

wystąpienie nadmiaru lub niedomiaru nie 

wystąpienie nadmiaru lub niedomiaru nie 

powinno powodować załamania programu 

powinno powodować załamania programu 

(praktyka wskazuje, że w złożonych obliczeniach 

(praktyka wskazuje, że w złożonych obliczeniach 

wyniki pośrednie z nadmiarem czy niedomiarem 

wyniki pośrednie z nadmiarem czy niedomiarem 

często mają niewielki wpływ na wynik końcowy)

często mają niewielki wpływ na wynik końcowy)

background image

Wartości specjalne w koprocesorze 

Wartości specjalne w koprocesorze 

arytmetycznym (2)

arytmetycznym (2)

spośród dopuszczalnych wartości liczb wyłączono 

spośród dopuszczalnych wartości liczb wyłączono 

niektóre i nadano im znaczenie specjalne — takie 

niektóre i nadano im znaczenie specjalne — takie 

liczby określane są terminem 

liczby określane są terminem 

wartości specjalne

wartości specjalne

wartości specjalne mogą być argumentami 

wartości specjalne mogą być argumentami 

obliczeń tak jak zwykłe liczby — jeśli jeden z 

obliczeń tak jak zwykłe liczby — jeśli jeden z 

argumentów jest wartością specjalną, to wynik 

argumentów jest wartością specjalną, to wynik 

jest też wartością specjalną

jest też wartością specjalną

w koprocesorze arytmetycznym przyjęto, że 

w koprocesorze arytmetycznym przyjęto, że 

wszystkie liczby, których pole wykładnika zawiera 

wszystkie liczby, których pole wykładnika zawiera 

same zera lub same jedynki traktowane są jako 

same zera lub same jedynki traktowane są jako 

wartości specjalne

wartości specjalne

background image

Wartości specjalne w koprocesorze 

Wartości specjalne w koprocesorze 

arytmetycznym (3)

arytmetycznym (3)

w szczególności wyróżnia się następujące 

w szczególności wyróżnia się następujące 

wartości specjalne

wartości specjalne

liczba 0 (pole mantysy i wykładnika zawiera 

liczba 0 (pole mantysy i wykładnika zawiera 

wyłącznie bity o wartości 0)

wyłącznie bity o wartości 0)

nieskończoność (pole mantysy zawiera same 

nieskończoność (pole mantysy zawiera same 

zera, pole wykładnika zawiera same jedynki)

zera, pole wykładnika zawiera same jedynki)

liczby z niedomiarem (pole wykładnika zawiera 

liczby z niedomiarem (pole wykładnika zawiera 

same zera, pole mantysy zawiera jest rózne od 

same zera, pole mantysy zawiera jest rózne od 

zera)

zera)

nieliczby (NaN) (pole wykładnika zawiera same 

nieliczby (NaN) (pole wykładnika zawiera same 

jedynki, pole mantysy jest różne od zera)

jedynki, pole mantysy jest różne od zera)

background image

Wartości specjalne w koprocesorze 

Wartości specjalne w koprocesorze 

arytmetycznym (4)

arytmetycznym (4)

w zależności od ustawienia bitów w rejestrze 

w zależności od ustawienia bitów w rejestrze 

sterującym koprocesora, wystąpienie wartości 

sterującym koprocesora, wystąpienie wartości 

specjalnej może powodować generowanie wyjątku 

specjalnej może powodować generowanie wyjątku 

koprocesora, albo też obliczenia mogą być 

koprocesora, albo też obliczenia mogą być 

kontynuowane

kontynuowane

background image

Przykład — obliczanie rezystancji 

Przykład — obliczanie rezystancji 

wypadkowej (1)

wypadkowej (1)

wartość rezystancji R dla podanego układu można 

wartość rezystancji R dla podanego układu można 

wyznaczyć z zależności

wyznaczyć z zależności

 

3

2

1

R

1

R

1

R

1

1

R

background image

Przykład — obliczanie rezystancji 

Przykład — obliczanie rezystancji 

wypadkowej (2)

wypadkowej (2)

jeśli jedna z rezystancji ma wartość 0, to wystąpi 

jeśli jedna z rezystancji ma wartość 0, to wystąpi 

dzielenie przez 0, a w ślad za tym koprocesor 

dzielenie przez 0, a w ślad za tym koprocesor 

wygeneruje wyjątek

wygeneruje wyjątek

jeśli jednak przez rozpoczęciem obliczeń do bitu 

jeśli jednak przez rozpoczęciem obliczeń do bitu 

ZM

ZM

 w rejestrze sterującym koprocesora zostanie 

 w rejestrze sterującym koprocesora zostanie 

wpisane 1, to wyjątek nie wystąpi, a wynikiem 

wpisane 1, to wyjątek nie wystąpi, a wynikiem 

dzielenia będzie wartość specjalna 

dzielenia będzie wartość specjalna 

„nieskończoność” (same jedynki w polu 

„nieskończoność” (same jedynki w polu 

wykładnika, same zera w polu mantysy)

wykładnika, same zera w polu mantysy)

zatem, zamaskowanie wyjątku "dzielenie przez 

zatem, zamaskowanie wyjątku "dzielenie przez 

zero" pozwala na poprawne obliczenie rezystancji 

zero" pozwala na poprawne obliczenie rezystancji 

R podanego układu, także w przypadku, gdy 

R podanego układu, także w przypadku, gdy 

wartość rezystancji R1 lub R2 lub R3 wynosi 0

wartość rezystancji R1 lub R2 lub R3 wynosi 0

background image

Niedokładny wynik

Niedokładny wynik

charakterystycznym przykładem wyjątku, który 

charakterystycznym przykładem wyjątku, który 

prawie zawsze jest maskowany jest 

prawie zawsze jest maskowany jest 

niedokładny 

niedokładny 

wynik

wynik

, który sygnalizowany jest przez ustawienie 

, który sygnalizowany jest przez ustawienie 

bitu PE (ang. precision exception)

bitu PE (ang. precision exception)

wyjątek 

wyjątek 

niedokładny wynik

niedokładny wynik

 powstaje, gdy wynik 

 powstaje, gdy wynik 

operacji nie może być dokładnie przedstawiony w 

operacji nie może być dokładnie przedstawiony w 

żądanym formacie, np. liczba 

żądanym formacie, np. liczba 

1/3 =  (0.010101...)

1/3 =  (0.010101...)

2

2

ma okresowe nieskończone rozwinięcie binarne i 

ma okresowe nieskończone rozwinięcie binarne i 

nie może przedstawiona dokładnie w postaci 

nie może przedstawiona dokładnie w postaci 

liczby zmiennoprzecinkowej, w której mantysa 

liczby zmiennoprzecinkowej, w której mantysa 

zajmuje ustaloną liczbę bitów

zajmuje ustaloną liczbę bitów

background image

Niedozwolona operacja

Niedozwolona operacja

wyjątek 

wyjątek 

niedozwolona operacja

niedozwolona operacja

 powstaje, gdy niemożliwe jest 

 powstaje, gdy niemożliwe jest 

żadne inne działanie, np. próba obliczenia pierwiastka z liczby 

żadne inne działanie, np. próba obliczenia pierwiastka z liczby 

ujemnej, próba użycia pustego rejestru stosu

ujemnej, próba użycia pustego rejestru stosu

jeśli bit IE jest zamaskowany (tj. IM = 1), to wynikiem operacji 

jeśli bit IE jest zamaskowany (tj. IM = 1), to wynikiem operacji 

jest 

jest 

nieliczba

nieliczba

  – NaN (ang. Not a Number)

  – NaN (ang. Not a Number)

przykładowo, jeśli bit IE jest zamaskowany, to rozkaz FSQRT dla 

przykładowo, jeśli bit IE jest zamaskowany, to rozkaz FSQRT dla 

operandu –2 daje wynik:

operandu –2 daje wynik:

background image

Zasady  kodowania

Zasady  kodowania

instrukcji (rozkazów) (1)

instrukcji (rozkazów) (1)

wszelkie informacje w komputerze kodowane są w 

wszelkie informacje w komputerze kodowane są w 

postaci ciągów zerojedynkowych — taka postać 

postaci ciągów zerojedynkowych — taka postać 

informacji wynika ze stosowania elementów 

informacji wynika ze stosowania elementów 

elektronicznych, które pracują pewnie i stabilnie 

elektronicznych, które pracują pewnie i stabilnie 

jako elementy dwustanowe

jako elementy dwustanowe

zatem również poszczególne instrukcje programu 

zatem również poszczególne instrukcje programu 

muszą być przedstawiane w postaci ciągów zero-

muszą być przedstawiane w postaci ciągów zero-

jedynkowych; producent procesora (np. firma Intel) 

jedynkowych; producent procesora (np. firma Intel) 

ustala szczegółowe zasady kodowania rozkazów, 

ustala szczegółowe zasady kodowania rozkazów, 

przyporządkowując każdemu z nich ustalony ciąg 

przyporządkowując każdemu z nich ustalony ciąg 

zer i jedynek; przykładowo rozkazom mnożenia i 

zer i jedynek; przykładowo rozkazom mnożenia i 

dzielenia przypisano następujące kody:

dzielenia przypisano następujące kody:

background image

Zasady  kodowania

Zasady  kodowania

instrukcji (rozkazów) (2)

instrukcji (rozkazów) (2)

mnożenie liczb 8-bitowych bez znaku 11110110..100

mnożenie liczb 8-bitowych bez znaku 11110110..100

mnożenie liczb 32 (lub 16)-bitowych bez znaku 11110111..100

mnożenie liczb 32 (lub 16)-bitowych bez znaku 11110111..100

mnożenie liczb 8-bitowych ze znakiem 11110110..101

mnożenie liczb 8-bitowych ze znakiem 11110110..101

mnożenie liczb 32 (lub 16)-bitowych ze znakiem 11110111..101

mnożenie liczb 32 (lub 16)-bitowych ze znakiem 11110111..101

dzielenie liczby 16-bitowej bez znaku przez liczbę 8-bitową

dzielenie liczby 16-bitowej bez znaku przez liczbę 8-bitową

11110110..110

11110110..110

dzielenie liczby 64 (lub 32)-bitowej bez znaku przez liczbę 32 

dzielenie liczby 64 (lub 32)-bitowej bez znaku przez liczbę 32 

(16)-bitową 11110111..110

(16)-bitową 11110111..110

dzielenie liczby 16-bitowej ze znakiem przez liczbę 8-bitową

dzielenie liczby 16-bitowej ze znakiem przez liczbę 8-bitową

11110110..111

11110110..111

dzielenie liczby 64 (lub 32)-bitowej ze znakiem przez liczbę 32 

dzielenie liczby 64 (lub 32)-bitowej ze znakiem przez liczbę 32 

(16)-bitową 11110111..111

(16)-bitową 11110111..111

background image

Kodowanie operacji 

Kodowanie operacji 

dwuargumentowych (1)

dwuargumentowych (1)

ciąg zerojedynkowy opisujący instrukcję, która 

ciąg zerojedynkowy opisujący instrukcję, która 

wykonuje operację dwuargumentową, np. 

wykonuje operację dwuargumentową, np. 

dodawania  W 

dodawania  W 

 A + B

 A + B

powinien zawierać następujące elementy (pola):

powinien zawierać następujące elementy (pola):

1.

1.

kod operacji (zakodowany opis wykonywanych 

kod operacji (zakodowany opis wykonywanych 

czynności)

czynności)

2.

2.

położenie pierwszego operandu (A)

położenie pierwszego operandu (A)

3.

3.

położenie drugiego operandu (B)

położenie drugiego operandu (B)

4.

4.

informacje dokąd przesłać wynik (W) 

informacje dokąd przesłać wynik (W) 

5.

5.

gdzie znajduje się kolejna instrukcja do 

gdzie znajduje się kolejna instrukcja do 

wykonania ? (tylko wyjątkowo, jeśli w procesorze 

wykonania ? (tylko wyjątkowo, jeśli w procesorze 

nie jest używany wskaźnik instrukcji)

nie jest używany wskaźnik instrukcji)

background image

Kodowanie operacji 

Kodowanie operacji 

dwuargumentowych (2)

dwuargumentowych (2)

konstruktorzy procesorów, wybierając sposób 

konstruktorzy procesorów, wybierając sposób 

kodowania rozkazów, zwracają szczególną uwagę 

kodowania rozkazów, zwracają szczególną uwagę 

na możliwość kodowania programów za pomocą 

na możliwość kodowania programów za pomocą 

możliwie krótkiego kodu

możliwie krótkiego kodu

w celu zmniejszenia liczby bitów rozkazu w wielu 

w celu zmniejszenia liczby bitów rozkazu w wielu 

procesorach, w tym także w architekturze IA–32, 

procesorach, w tym także w architekturze IA–32, 

przyjęto różne ograniczenia:

przyjęto różne ograniczenia:

1. wynik operacji przesyłany do lokacji, w której 

1. wynik operacji przesyłany do lokacji, w której 

dotychczas znajdował się pierwszy operand (A)

dotychczas znajdował się pierwszy operand (A)

background image

Kodowanie operacji 

Kodowanie operacji 

dwuargumentowych (3)

dwuargumentowych (3)

2. co najwyżej jeden operand (A albo B) może 

2. co najwyżej jeden operand (A albo B) może 

wskazywać na lokację pamięci, drugi operand lub 

wskazywać na lokację pamięci, drugi operand lub 

oba operandy muszą wskazywać na rejestry

oba operandy muszą wskazywać na rejestry

3. położenie lokacji pamięci może być określone 

3. położenie lokacji pamięci może być określone 

przez zawartość rejestru (modyfikacji adresowej)

przez zawartość rejestru (modyfikacji adresowej)

background image

Podstawowy format 

Podstawowy format 

rozkazu w architekturze 

rozkazu w architekturze 

IA–32 (1)

IA–32 (1)

W architekturze IA–32 zdefiniowano kilkanaście 

W architekturze IA–32 zdefiniowano kilkanaście 

formatów rozkazów sterujących (skoków) i 

formatów rozkazów sterujących (skoków) i 

niesterujących

niesterujących

formaty rozkazów niesterujących wywodzą się z 

formaty rozkazów niesterujących wywodzą się z 

tzw. formatu podstawowego

tzw. formatu podstawowego

background image

Podstawowy format 

Podstawowy format 

rozkazu w architekturze 

rozkazu w architekturze 

IA–32 (2)

IA–32 (2)

Trzybitowe pole 

Trzybitowe pole 

reg

reg

 identyfikuje rejestr procesora, w 

 identyfikuje rejestr procesora, w 

którym znajduje się jeden z operandów

którym znajduje się jeden z operandów

Jeśli przed kodem rozkazu zostanie umieszczony 

Jeśli przed kodem rozkazu zostanie umieszczony 

dodatkowy bajt 66H (

dodatkowy bajt 66H (

przedrostek rozmiaru operandu

przedrostek rozmiaru operandu

), 

), 

to działanie zostanie wykonane na operandzie 16-

to działanie zostanie wykonane na operandzie 16-

bitowym (a nie na 32-bitowym)

bitowym (a nie na 32-bitowym)

reg

000

001

010

011

100

101

110

111

w = 0

AL

CL

DL

BL

AH

CH

DH

BH

w = 1

AX

CX

DX

BX

SP

BP

SI

DI

w = 1

EAX

ECX

EDX

EBX

ESP

EBP

ESI

EDI

background image

Podstawowy format 

Podstawowy format 

rozkazu w architekturze 

rozkazu w architekturze 

IA–32 (3)

IA–32 (3)

Drugi operand może znajdować się także w 

Drugi operand może znajdować się także w 

rejestrze (gdy dwubitowe pole 

rejestrze (gdy dwubitowe pole 

mod=11

mod=11

) — w 

) — w 

takim przypadku kod rejestru podany jest w 3-

takim przypadku kod rejestru podany jest w 3-

bitowym polu 

bitowym polu 

r/m

r/m

przyjęty sposób kodowania, w zależności od stanu 

przyjęty sposób kodowania, w zależności od stanu 

bitu d umożliwia przesłanie wyniku do:

bitu d umożliwia przesłanie wyniku do:

obiektu wskazanego przez pole r/m, gdy 

obiektu wskazanego przez pole r/m, gdy 

d = 0

d = 0

;

;

obiektu wskazanego przez pole reg, gdy 

obiektu wskazanego przez pole reg, gdy 

d = 1

d = 1

;

;

background image

Podstawowy format 

Podstawowy format 

rozkazu w architekturze 

rozkazu w architekturze 

IA–32 (4)

IA–32 (4)

Drugi operand może znajdować się także w 

Drugi operand może znajdować się także w 

rejestrze (gdy dwubitowe pole 

rejestrze (gdy dwubitowe pole 

mod=11

mod=11

) — w 

) — w 

takim przypadku kod rejestru podany jest w 3-

takim przypadku kod rejestru podany jest w 3-

bitowym polu 

bitowym polu 

r/m

r/m

Jeśli drugi operand znajduje się w lokacji pamięci 

Jeśli drugi operand znajduje się w lokacji pamięci 

(gdy pole mod=00,01,10), to pole 

(gdy pole mod=00,01,10), to pole 

r/m

r/m

 określa 

 określa 

sposób obliczania adresu efektywnego wg 

sposób obliczania adresu efektywnego wg 

podanej tablicy

podanej tablicy

background image

Podstawowy format 

Podstawowy format 

rozkazu w architekturze 

rozkazu w architekturze 

IA–32 (5)

IA–32 (5)

background image

Podstawowy format 

Podstawowy format 

rozkazu w architekturze 

rozkazu w architekturze 

IA–32 (6)

IA–32 (6)

Pole 

Pole 

mod

mod

 określa długość (liczbę bajtów) pola 

 określa długość (liczbę bajtów) pola 

przesunięcia

przesunięcia

w przypadku mod=00 pole przesunięcie nie 

w przypadku mod=00 pole przesunięcie nie 

występuje, gdy mod = 01, to pole przesunięcia 

występuje, gdy mod = 01, to pole przesunięcia 

jest 1-bajtowe, a gdy mod = 10, to pole 

jest 1-bajtowe, a gdy mod = 10, to pole 

przesunięcia jest 4-bajtowe

przesunięcia jest 4-bajtowe

background image

Kodowanie złożonych 

Kodowanie złożonych 

schematów adresowania 

schematów adresowania 

(1)

(1)

W architekturze IA–32 wartość wyrażenia 

W architekturze IA–32 wartość wyrażenia 

adresowego rozkazu może zależeć od zawartości 

adresowego rozkazu może zależeć od zawartości 

dwóch rejestrów modyfikacji adresowych, np.

dwóch rejestrów modyfikacji adresowych, np.

 

 

add

add

edx,  tablica[ebx+esi]

edx,  tablica[ebx+esi]

Kodowanie takich rozkazów wymaga 

Kodowanie takich rozkazów wymaga 

wprowadzenia dodatkowego bajtu oznaczonego 

wprowadzenia dodatkowego bajtu oznaczonego 

symbolem 

symbolem 

SIB

SIB

Obecność tego bajtu wskazuje pole 

Obecność tego bajtu wskazuje pole 

r/m=100 

r/m=100 

(w 

(w 

drugim bajcie)

drugim bajcie)

background image

Kodowanie złożonych 

Kodowanie złożonych 

schematów adresowania 

schematów adresowania 

(2)

(2)

Pole 

Pole 

base

base

 (3 bity) określa pierwszy rejestr 

 (3 bity) określa pierwszy rejestr 

modyfikacji, a pole 

modyfikacji, a pole 

index

index

 (3 bity) określa drugi 

 (3 bity) określa drugi 

rejestr modyfikacji

rejestr modyfikacji

Pole 

Pole 

ss

ss

 (2 bity) określa współczynnik skalowania, 

 (2 bity) określa współczynnik skalowania, 

np.    

np.    

sub

sub

wyniki[ecx+edi*4], bx

wyniki[ecx+edi*4], bx

background image

Kodowanie złożonych 

Kodowanie złożonych 

schematów adresowania 

schematów adresowania 

(3)

(3)

Jeśli występuje bajt SIB, to w trakcie obliczania 

Jeśli występuje bajt SIB, to w trakcie obliczania 

wartości adresu efektywnego zawartość drugiego 

wartości adresu efektywnego zawartość drugiego 

rejestru modyfikacji jest mnożona przez 

rejestru modyfikacji jest mnożona przez 

współczynnik skalowania, który przyjmuje 

współczynnik skalowania, który przyjmuje 

wartości: 1 (gdy ss=00), 2 (gdy ss=01), 4 (gdy 

wartości: 1 (gdy ss=00), 2 (gdy ss=01), 4 (gdy 

ss=10), 8 (gdy ss=11). np.

ss=10), 8 (gdy ss=11). np.

background image

Przypadki szczególne 

Przypadki szczególne 

kodowania (1)

kodowania (1)

W podanej wcześniej tabeli wymieniono 8 różnych 

W podanej wcześniej tabeli wymieniono 8 różnych 

sposobów obliczania adresu efektywnego, ale w 

sposobów obliczania adresu efektywnego, ale w 

każdym z nich zawartość pola przesunięcie jest 

każdym z nich zawartość pola przesunięcie jest 

sumowana z zawartością jakiegoś rejestru

sumowana z zawartością jakiegoś rejestru

w praktyce programowania zdarza się dość 

w praktyce programowania zdarza się dość 

często, że adres lokacji pamięci, na której ma być 

często, że adres lokacji pamięci, na której ma być 

wykonana operacja podany jest w polu 

wykonana operacja podany jest w polu 

przesunięcie i nie potrzeba do niego niczego 

przesunięcie i nie potrzeba do niego niczego 

dodawać — wydaje się, że konstruktorzy 

dodawać — wydaje się, że konstruktorzy 

procesora nie uwzględnili tego przypadku

procesora nie uwzględnili tego przypadku

background image

Przypadki szczególne 

Przypadki szczególne 

kodowania (2)

kodowania (2)

Powstałą sytuację rozwiązano poprzez 

Powstałą sytuację rozwiązano poprzez 

wprowadzenie przypadku specjalnego: gdy pola 

wprowadzenie przypadku specjalnego: gdy pola 

mod=00

mod=00

 i 

 i 

r/m=101

r/m=101

, to adres efektywny 

, to adres efektywny 

określony jest wyłącznie przez zawartość 32-

określony jest wyłącznie przez zawartość 32-

bitowego pola przesunięcie (modyfikacja 

bitowego pola przesunięcie (modyfikacja 

adresowa nie występuje)

adresowa nie występuje)

background image

Przykłady kodowania (1)

Przykłady kodowania (1)

background image

Przykłady kodowania (2)

Przykłady kodowania (2)


Document Outline