AKO 2009 cz 8

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


Wyszukiwarka

Podobne podstrony:
AKO 2009 cz 7
AKO 2009 cz 4
AKO 2009 cz 3
AKO 2009 cz 1
AKO 2009 cz 5
AKO 2009 cz 7
arkusz 2009 x cz 2
arkusz 2009 y cz 2
klucz 2009 cz i 1
wykład 16 - 16.04.2009 - cz.2, FARMACJA, ROK 5, TPL 3, Zachomikowane
KONCEPCE ZARZADZANIA 2009 CZ.2, Koncepcje Zarządzania- ĆW cz 1,2 WSAiB
wykład 17 - 23.04.2009 - cz.3, FARMACJA, ROK 5, TPL 3, Zachomikowane
PROMOCJA ZDROWIA - PIELEGNIARSTWO[2009][CZ.I]
wykład 17 - 23.04.2009 - cz.2, FARMACJA, ROK 5, TPL 3, Zachomikowane
arkusz 2009 x cz 2
test 2009 cz 4
Opracowanie zagadnień do egzaminu z Psychologii sądowej 2009 (cz 1)
test 2009 cz 2

więcej podobnych podstron