AKO 2009 cz 4

background image

Przechowywanie liczb w

pamięci komputera (1)

liczby występujące w programach często
przekraczają 255 i muszą być zapisywane na
dwóch, czterech lub na większej liczbie bajtów

w systemach komputerowych przyjęto dwa
podstawowe schematy rozmieszczenia
poszczególnych bajtów liczby w pamięci:

mniejsze niżej (ang. little endian)

mniejsze wyżej (ang. big endian)

background image

Przechowywanie liczb … (2)

background image

Przechowywanie liczb … (3)

format

format

little endian

little endian

stosowany jest m.in. w

stosowany jest m.in. w

procesorach rodziny x86/64 (AMD/Intel), VAX,

procesorach rodziny x86/64 (AMD/Intel), VAX,

Alpha

Alpha

format

format

big endian

big endian

stosowany jest m.in. w

stosowany jest m.in. w

procesorach Motorola 680x0, SunSPARC i

procesorach Motorola 680x0, SunSPARC i

większości procesorów klasy RISC

większości procesorów klasy RISC

procesor PowerPC udostępnia oba tryby pracy — w

procesor PowerPC udostępnia oba tryby pracy — w

rejestrze MSR (Machine Status Register)

rejestrze MSR (Machine Status Register)

wprowadzono dwa bity, z których pierwszy określa

wprowadzono dwa bity, z których pierwszy określa

stosowaną kolejność bajtów dla procesora

stosowaną kolejność bajtów dla procesora

działającego w trybie systemu operacyjnego (ang.

działającego w trybie systemu operacyjnego (ang.

kernel mode), drugi bit określa aktualną kolejność

kernel mode), drugi bit określa aktualną kolejność

background image

Przesyłanie liczb z pamięci

do rejestru (i odwrotnie)

background image

Rozpoznawanie formatu

mniejsze niżej/wyżej (1)

identyfikację schematu reprezentacji liczb

identyfikację schematu reprezentacji liczb

stosowanego w danym komputerze można

stosowanego w danym komputerze można

przeprowadzić za pomocą niżej podanego

przeprowadzić za pomocą niżej podanego

fragmentu programu w języku C

fragmentu programu w języku C

w podanym przykładzie założono, że wartości
typu int są 32-bitowe

background image

Rozpoznawanie formatu

mniejsze niżej/wyżej (2)

unsigned int liczba = 0x12345678;

unsigned int liczba = 0x12345678;

 

 

unsigned char

unsigned char

wsk = (unsigned char

wsk = (unsigned char

) &

) &

liczba;

liczba;

if (wsk[0] == 0x12)

if (wsk[0] == 0x12)

printf ("\nFormat mniejsze wyżej (big endian)");

printf ("\nFormat mniejsze wyżej (big endian)");

else

else

printf ("\nFormat mniejsze niżej (little

printf ("\nFormat mniejsze niżej (little

endian)");

endian)");

background image

Implementacja struktur

decyzyjnych (1)

Prawie wszystkie algorytmy realizowane w

Prawie wszystkie algorytmy realizowane w

komputerach zawierają struktury decyzyjne, które

komputerach zawierają struktury decyzyjne, które

określają sposób dalszego wykonywania

określają sposób dalszego wykonywania

programu w zależności od wartości uzyskanych

programu w zależności od wartości uzyskanych

wyników pośrednich — struktury te mają postać

wyników pośrednich — struktury te mają postać

rozwidleń i pętli

rozwidleń i pętli

W językach wysokiego poziomu struktury te

W językach wysokiego poziomu struktury te

realizowane są za pomocą instrukcji if … then …

realizowane są za pomocą instrukcji if … then …

else, a pętle za pomocą instrukcji while, for,

else, a pętle za pomocą instrukcji while, for,

repeat … until

repeat … until

background image

Implementacja struktur

decyzyjnych (2)

W tego rodzaju strukturach podstawowe

W tego rodzaju strukturach podstawowe

znaczenie mają operacje porównania — trzeba

znaczenie mają operacje porównania — trzeba

zbadać która z dwóch wartości jest większa albo

zbadać która z dwóch wartości jest większa albo

czy wartości są równe

czy wartości są równe

background image

Implementacja struktur

decyzyjnych (3)

background image

Implementacja struktur

decyzyjnych (4)

W architekturze IA—32 do porównania używa się

W architekturze IA—32 do porównania używa się

dwóch kolejnych rozkazów: pierwszy z nich wykonuje

dwóch kolejnych rozkazów: pierwszy z nich wykonuje

odejmowanie obu porównywanych wartości, drugi

odejmowanie obu porównywanych wartości, drugi

jest rozkazem skoku, który testuje własności wyniku

jest rozkazem skoku, który testuje własności wyniku

odejmowania i ewentualnie przekazuje sterowanie

odejmowania i ewentualnie przekazuje sterowanie

(„skacze”) do innego fragmentu programu

(„skacze”) do innego fragmentu programu

zatem w zależności od wyniku porównania rozkazy

zatem w zależności od wyniku porównania rozkazy

programu mogą być wykonywane dalej w porządku

programu mogą być wykonywane dalej w porządku

naturalnym, albo procesor może ominąć pewną liczbę

naturalnym, albo procesor może ominąć pewną liczbę

rozkazów i przejść (przeskoczyć) do wykonywania

rozkazów i przejść (przeskoczyć) do wykonywania

rozkazów znajdujących się w odległym miejscu

rozkazów znajdujących się w odległym miejscu

pamięci

pamięci

background image

Porównywanie zawartości

Porównywanie zawartości

rejestrów i komórek pamięci

rejestrów i komórek pamięci

(1)

(1)

W architekturze IA–32 operacje porównania

W architekturze IA–32 operacje porównania

realizowane są poprzez odejmowanie

realizowane są poprzez odejmowanie

porównywanych wartości i testowanie zawartości

porównywanych wartości i testowanie zawartości

znaczników: CF, ZF, OF, SF

znaczników: CF, ZF, OF, SF

w operacjach

w operacjach

porównywania liczb bez znaku

porównywania liczb bez znaku

istotne znaczenie mają bity CF i ZF:

istotne znaczenie mają bity CF i ZF:

background image

Porównywanie zawartości

Porównywanie zawartości

rejestrów i komórek pamięci

rejestrów i komórek pamięci

(2)

(2)

CF znacznik przeniesienia, ustawiany w
stan

1

w

przypadku

wystąpienia

przeniesienia (przy dodawaniu) lub pożyczki
(przy odejmowaniu)

ZF znacznik zera, ustawiany w stan 1, jeśli
wynik operacji arytmetycznej lub logicznej
jest równy 0 — w przeciwnym razie znacznik
ustawiany jest w stan 0

background image

Porównywanie zawartości

Porównywanie zawartości

rejestrów i komórek pamięci

rejestrów i komórek pamięci

(3)

(3)

Procesor wykonał odejmowanie dwóch liczb bez znaku

Procesor wykonał odejmowanie dwóch liczb bez znaku

znajdujących się w rejestrach EBX i ECX (rozkaz

znajdujących się w rejestrach EBX i ECX (rozkaz

sub ebx,

sub ebx,

ecx

ecx

) – jakie wartości zostaną wpisane do znaczników CF i

) – jakie wartości zostaną wpisane do znaczników CF i

ZF?

ZF?

1.

(EBX) > (ECX)

ZF = 0

CF = 0

2.

(EBX) = (ECX)

ZF = 1

CF = 0

3.

(EBX) < (ECX)

ZF = 0

CF = 1

Na podstawie stanu znaczników ZF i CF można określić która

Na podstawie stanu znaczników ZF i CF można określić która

z porównywanych liczb jest większa, albo czy liczby są równe

z porównywanych liczb jest większa, albo czy liczby są równe

xxxx

xxxx

background image

Rozkazy SUB i CMP

Rozkazy SUB i CMP

Zamiast rozkazu

Zamiast rozkazu

SUB

SUB

używa się zazwyczaj

używa się zazwyczaj

rozkazu

rozkazu

CMP

CMP

, który również wykonuje

, który również wykonuje

odejmowanie, ustawia znaczniki, ale nigdzie nie

odejmowanie, ustawia znaczniki, ale nigdzie nie

wpisuje wyniku odejmowania — ułatwia to

wpisuje wyniku odejmowania — ułatwia to

kodowanie programu, ponieważ po wykonaniu

kodowanie programu, ponieważ po wykonaniu

rozkazu CMP oba operandy pozostają

rozkazu CMP oba operandy pozostają

niezmienione (rozkaz SUB wpisuje do pierwszego

niezmienione (rozkaz SUB wpisuje do pierwszego

operandu wynik odejmowania)

operandu wynik odejmowania)

background image

Porównywanie liczb ze

Porównywanie liczb ze

znakiem i bez znaku (1)

znakiem i bez znaku (1)

Do testowania stanu znaczników używa się omawianych

Do testowania stanu znaczników używa się omawianych

wcześniej rozkazów sterujących (skoków) warunkowych

wcześniej rozkazów sterujących (skoków) warunkowych

(np. ja, jnz, ...) — do porównywania liczb ze znakiem i bez

(np. ja, jnz, ...) — do porównywania liczb ze znakiem i bez

znaku stosuje się odrębne grupy rozkazów sterujących

znaku stosuje się odrębne grupy rozkazów sterujących

background image

Porównywanie liczb ze

Porównywanie liczb ze

znakiem i bez znaku (2)

znakiem i bez znaku (2)

Poniższa tablica zawiera zestawienie warunków logicznych

Poniższa tablica zawiera zestawienie warunków logicznych

testowanych przez rozkazy używane w operacjach

testowanych przez rozkazy używane w operacjach

porównywania liczb bez znaku; w przypadku liczb ze

porównywania liczb bez znaku; w przypadku liczb ze

znakiem wyrażenia mają inną postać

znakiem wyrażenia mają inną postać

background image

Przykład: wyszukiwanie liczby

Przykład: wyszukiwanie liczby

naj-większej w tablicy liczb

naj-większej w tablicy liczb

(bez znaku)

(bez znaku)

; adres pierwszego elementu tablicy został

; adres pierwszego elementu tablicy został

; wcześniej wpisany do rejestru EBX

; wcześniej wpisany do rejestru EBX

; liczba elementów tablicy została wcześniej

; liczba elementów tablicy została wcześniej

; wpisana do rejestru ECX

; wpisana do rejestru ECX

dec ecx

dec ecx

; ECX

; ECX

ECX–1

ECX–1

mov

mov

eax,

eax,

[ebx]

[ebx]

ptla:

ptla:

add

add

ebx, 4

ebx, 4

; EBX

; EBX

EBX+4

EBX+4

cmp

cmp

eax, [ebx]

eax, [ebx]

jae

jae

skocz

skocz

; skocz gdy > lub =

; skocz gdy > lub =

mov

mov

eax, [ebx]

eax, [ebx]

skocz:

skocz:

sub

sub

ecx, 1

ecx, 1

ECX

ECX

ECX–1

ECX–1

jnz

jnz

ptla

ptla

; skocz, gdy ECX

; skocz, gdy ECX

0

0

background image

Rozkazy wyznaczania

Rozkazy wyznaczania

wartości logicznych (1)

wartości logicznych (1)

Podane wcześniej typy rozkazów sterujących

Podane wcześniej typy rozkazów sterujących

warunkowych pozwalają na zmianę porządku

warunkowych pozwalają na zmianę porządku

wykonywania rozkazów programu w zależności od

wykonywania rozkazów programu w zależności od

wyniku porównania

wyniku porównania

Czasami jednak przed wykonaniem skoku trzeba

Czasami jednak przed wykonaniem skoku trzeba

wykonać dodatkowe operacje — w takich

wykonać dodatkowe operacje — w takich

przypadkach, za pomocą wybranego rozkazu z

przypadkach, za pomocą wybranego rozkazu z

grupy

grupy

SET

SET

... można zapisać wynik porównania w

... można zapisać wynik porównania w

rejestrze 8-bitowym lub zmiennej

rejestrze 8-bitowym lub zmiennej

background image

Rozkazy wyznaczania

Rozkazy wyznaczania

wartości logicznych (2)

wartości logicznych (2)

Sekwencje rozkazów podane w lewej i w prawej

Sekwencje rozkazów podane w lewej i w prawej

kolumnie są funkcjonalnie równoważne

kolumnie są funkcjonalnie równoważne

cmp

ecx, edx

mov

al, 1

jae

zgadza_się

dec

al

zgadza_sie:

cmp

ecx, edx

setae

al

background image

Kodowanie programów na

Kodowanie programów na

poziomie rozkazów procesora (1)

poziomie rozkazów procesora (1)

wykonanie programu przez procesor wymaga
uprzedniego załadowania do pamięci danych i
rozkazów, zakodowanych w formie ciągów
zerojedynkowych, zrozumiałych przez procesor

współczesne kompilatory języków programowania
generują takie ciągi w sposób automatyczny na
podstawie kodu źródłowego programu

niekiedy jednak celowe jest precyzyjne
zakodowanie programu lub fragmentu programu
za pomocą pojedynczych rozkazów procesora

background image

Kodowanie programów na

Kodowanie programów na

poziomie rozkazów procesora (2)

poziomie rozkazów procesora (2)

dokumentacja techniczna procesora zawiera zazwyczaj
tablice ciągów zerojedynkowych przypisanych
poszczególnym operacjom (rozkazom procesora)

kodowanie na poziomie zer i jedynek, aczkolwiek możliwe,
byłoby bardzo żmudne i podatne na pomyłki

z tego powodu opracowano programy, nazywane
asemblerami, które na podstawie skrótu literowego (tzw.
mnemonika) opisującego czynności rozkazu dokonują
zamiany tego skrótu na odpowiedni ciąg zer i jedynek

asemblery udostępniają wiele innych udogodnień, jak np.
możliwość zapisu liczb w systemach o podstawie 2, 8, 10,
16 czy też automatyczną zamianę tekstów znakowych na
ciągi bajtów zawierające kody ASCII poszczególnych liter

background image

Wiersze źródłowe w asemblerze

Wiersze źródłowe w asemblerze

(1)

(1)

w programie asemblerowym niektóre obszary
pamięci opatrywane są nazwami:

jeśli

nazwa

odnosi

się

do

obszaru

zawierającego instrukcję (rozkaz) programu,
to nazwa taka stanowi etykietę,

jeśli obszar zawiera zmienną (daną), to
nazwa obszaru stanowi nazwę zmiennej;

nazwę w sensie asemblera tworzy ciąg liter, cyfr i
znaków ? (znak zapytania), @ (symbol at), _ (znak
podkreślenia), $ (znak dolara); nazwa nie może
zaczynać się od cyfry

background image

Wiersze źródłowe w asemblerze

Wiersze źródłowe w asemblerze

(2)

(2)

etykietę, wraz ze znakiem : (dwukropka),
umieszcza się przed rozkazem, np.

powtorz: mov

dl, [ecx]

taka konstrukcja oznacza, że obszar kilku bajtów
pamięci, w których przechowywany jest kod
podanego rozkazu

mov dl, [ecx]

ma swoją

unikatową nazwę, czyli etykietę

opcjonalnie może jeszcze wystąpić komentarz
poprzedzony znakiem średnika ;

program w asemblerze pozbawiony komentarzy
może być nieczytelny nawet dla autora

background image

Deklaracje zmiennych w

Deklaracje zmiennych w

asemblerze (1)

asemblerze (1)

zmienne w programie deklaruje się za pomocą
dyrektyw:

DB – definiowanie bajtu (8 bitów),

DW – definiowanie słowa (16 bitów),

DD – definiowanie słowa podwójnej długości
(32 bity),

DQ definiowanie słowa poczwórnej długości
(64 bity)

przykład:

background image

Deklaracje zmiennych w

Deklaracje zmiennych w

asemblerze (2)

asemblerze (2)

po lewej stronie dyrektywy podaje się nazwę

po lewej stronie dyrektywy podaje się nazwę

zmiennej, a po prawej wartość początkową, np.

zmiennej, a po prawej wartość początkową, np.

elem_sygn

DD –765407

w jednym wierszu można podać kilka wartości

w jednym wierszu można podać kilka wartości

alfa

DW

4567H, 5678H, 6789H

powyższy wiersz można interpretować jako

powyższy wiersz można interpretować jako

deklarację tablicy zawierającej trzy liczby 16-

deklarację tablicy zawierającej trzy liczby 16-

bitowe

bitowe

jeśli tablica zawiera identyczne elementy, to

jeśli tablica zawiera identyczne elementy, to

stosuje się operator powtarzania

stosuje się operator powtarzania

dup

dup

, np.

, np.

wyniki

DB 512 dup (–1)

background image

Deklaracje zmiennych w

Deklaracje zmiennych w

asemblerze (3)

asemblerze (3)

jeśli podane wartości są liczbami całkowitymi, to

jeśli podane wartości są liczbami całkowitymi, to

asembler tworzy ich reprezentacje binarne

asembler tworzy ich reprezentacje binarne

przyjmując, że najmniej znaczący bit ma wagę 2

przyjmując, że najmniej znaczący bit ma wagę 2

0

0

liczby dziesiętne poprzedzone znakiem + i liczby

liczby dziesiętne poprzedzone znakiem + i liczby

bez znaku traktowane są jednakowo: zamiana na

bez znaku traktowane są jednakowo: zamiana na

kod binarny wykonywana jest przy założeniu, że

kod binarny wykonywana jest przy założeniu, że

wszystkie bity w bajcie, w słowie, itd. są bitami

wszystkie bity w bajcie, w słowie, itd. są bitami

znaczącymi (nie występuje bit znaku)

znaczącymi (nie występuje bit znaku)

background image

Deklaracje zmiennych w

Deklaracje zmiennych w

asemblerze (4)

asemblerze (4)

dla liczb ujemnych stosuje się kod U2, przy czym

dla liczb ujemnych stosuje się kod U2, przy czym

przyjmuje się, że bit znaku zajmuje skrajną lewą

przyjmuje się, że bit znaku zajmuje skrajną lewą

pozycji bajtu, słowa, itd.; w szczególności oznacza

pozycji bajtu, słowa, itd.; w szczególności oznacza

to, że wiersze

to, że wiersze

DB

DB

–128

–128

DB

DB

+128

+128

generują takie same kody binarne 10000000

generują takie same kody binarne 10000000

background image

Deklaracje zmiennych w

Deklaracje zmiennych w

asemblerze (5)

asemblerze (5)

znak zapytania (?) oznacza, że wartość

znak zapytania (?) oznacza, że wartość

początkowa zmiennej jest nieokreślona, np.

początkowa zmiennej jest nieokreślona, np.

linia7a

linia7a

DQ

DQ

?

?

DQ

DQ

19331

19331

nazwę zmiennej przed dyrektywą można pominąć

nazwę zmiennej przed dyrektywą można pominąć

w polu operandu dyrektywy DB mogą

w polu operandu dyrektywy DB mogą

występować także łańcuchy znaków, np.

występować także łańcuchy znaków, np.

uczelnia

uczelnia

DB

DB

'Politechnika Gdańska', 0DH, 0AH

'Politechnika Gdańska', 0DH, 0AH

background image

Deklaracje zmiennych w

Deklaracje zmiennych w

asemblerze (6)

asemblerze (6)

liczby z kropką oddzielającą część ułamkową

liczby z kropką oddzielającą część ułamkową

mogą występować jako operandy dyrektyw DD,

mogą występować jako operandy dyrektyw DD,

DQ, DT – liczby takie są przekształcane na postać

DQ, DT – liczby takie są przekształcane na postać

zmiennoprzecinkową binarną, np.:

zmiennoprzecinkową binarną, np.:

c_Eulera

c_Eulera

DT

DT

0.577215

0.577215

; stała Eulera

; stała Eulera

— — — — — — — — — — — — —

— — — — — — — — — — — — —

fld

fld

c_Eulera

c_Eulera

; załadowanie stałej Eulera

; załadowanie stałej Eulera

; na stos koprocesora

; na stos koprocesora

background image

Deklaracje stałych w

Deklaracje stałych w

asemblerze

asemblerze

deklaracje stałych umożliwiają przypisanie nazw

deklaracje stałych umożliwiają przypisanie nazw

symbolicznych do określonych wartości, np.

symbolicznych do określonych wartości, np.

num1

num1

EQU

EQU

18H

18H

; wartość max

; wartość max

background image

Kodowanie rozkazów (1)

Kodowanie rozkazów (1)

Typowe rozkazy procesora mają jeden lub dwa
argumenty, np. rozkaz przesłania

mov edi, pomiar

powoduje wpisanie do rejestru

EDI

zawartości

zmiennej

pomiar

operandy rozkazów mają postać wyrażeń różnych
typów: są to często rejestry, liczby, ciągi znaków,
wyrażenia opisujące położenie lokacji pamięci i
modyfikacje adresowe

w asemblerze przyjęto, że nazwa zmiennej

w asemblerze przyjęto, że nazwa zmiennej

występująca w polu operandu rozkazu (podobnie

występująca w polu operandu rozkazu (podobnie

jak nazwa rejestru) oznacza, że działanie ma być

jak nazwa rejestru) oznacza, że działanie ma być

wykonane na zawartości tej zmiennej

wykonane na zawartości tej zmiennej

background image

Kodowanie rozkazów (2)

Kodowanie rozkazów (2)

W trakcie asemblacji nazwie każdej zmiennej

W trakcie asemblacji nazwie każdej zmiennej

przypisywana jest wartość równa odległości

przypisywana jest wartość równa odległości

pierwszego bajtu tej zmiennej (liczonej w bajtach)

pierwszego bajtu tej zmiennej (liczonej w bajtach)

od początku obszaru danych

od początku obszaru danych

jeszcze raz podkreślamy: omawiana wartość nie

jeszcze raz podkreślamy: omawiana wartość nie

jest wartością zmiennej, ale jest przypisywana

jest wartością zmiennej, ale jest przypisywana

nazwie zmiennej i określa położenie zmiennej w

nazwie zmiennej i określa położenie zmiennej w

pamięci

pamięci

background image

Rozmiary operandów (1)

Rozmiary operandów (1)

jeśli instrukcja wymaga podania dwóch

jeśli instrukcja wymaga podania dwóch

operandów, to prawie zawsze muszą być one

operandów, to prawie zawsze muszą być one

jednakowej długości, np.:

jednakowej długości, np.:

sub ecx, edi

sub ecx, edi

; obliczenie ECX

; obliczenie ECX

ECX – EDI

ECX – EDI

add

add

eax, dx

eax, dx

; błąd !!! — dodawanie

; błąd !!! — dodawanie

; zawartości rejestru 16-bitowego

; zawartości rejestru 16-bitowego

; do 32-bitowego

; do 32-bitowego

background image

Rozmiary operandów (2)

Rozmiary operandów (2)

wyjątkowo, jeśli jeden z operandów znajduje się w

wyjątkowo, jeśli jeden z operandów znajduje się w

pamięci, to możliwa jest doraźna zmiana rozmiaru

pamięci, to możliwa jest doraźna zmiana rozmiaru

(typu) zmiennej za pomocą operatora PTR, np.

(typu) zmiennej za pomocą operatora PTR, np.

 

 

blok_sys

blok_sys

dd

dd

?

?

; zmienna 32-

; zmienna 32-

bitowa

bitowa

— — — — — — — — —

— — — — — — — — —

mov

mov

cx,

cx,

word PTR blok_sys

word PTR blok_sys

mov

mov

dx,

dx,

word PTR blok_sys+2

word PTR blok_sys+2

w podanym przykładzie do rejestru CX zostanie wpisana

w podanym przykładzie do rejestru CX zostanie wpisana

młodsza część 32-bitowej zmiennej blok_sys, a rejestru DX

młodsza część 32-bitowej zmiennej blok_sys, a rejestru DX

starsza część tej zmiennej

starsza część tej zmiennej

w przypadku pominięcia operatora PTR sygnalizowany

w przypadku pominięcia operatora PTR sygnalizowany

byłby błąd asemblacji wynikający z niejednakowej długości

byłby błąd asemblacji wynikający z niejednakowej długości

obu operandów

obu operandów

background image

Operator PTR (1)

Operator PTR (1)

operator PTR używany jest w wyrażeniach

operator PTR używany jest w wyrażeniach

adresowych do ścisłego określania atrybutów

adresowych do ścisłego określania atrybutów

symbolu występującego w wyrażeniu adresowym

symbolu występującego w wyrażeniu adresowym

po prawej stronie operatora występuje wyrażenie

po prawej stronie operatora występuje wyrażenie

adresowe, a po lewej atrybut spośród

adresowe, a po lewej atrybut spośród

następujących: byte (8 bitów), word (16 bitów),

następujących: byte (8 bitów), word (16 bitów),

dword (32 bity), fword (48 bitów), qword (64 bity),

dword (32 bity), fword (48 bitów), qword (64 bity),

tword (80 bitów)

tword (80 bitów)

operator PTR nie dokonuje konwersji typów —

operator PTR nie dokonuje konwersji typów —

działa on tylko w trakcie asemblacji programu i

działa on tylko w trakcie asemblacji programu i

nie może zastępować rozkazów wykonywanych w

nie może zastępować rozkazów wykonywanych w

trakcie realizacji programu;

trakcie realizacji programu;

background image

Operator PTR (2)

Operator PTR (2)

z podanych powodów poniższy rozkaz

z podanych powodów poniższy rozkaz

mov ebx, dword PTR dh

mov ebx, dword PTR dh

; błąd !

; błąd !

jest błędny

jest błędny

Konwersję taką można zrealizować za pomocą

Konwersję taką można zrealizować za pomocą

dalej opisanych rozkazów MOVSX lub MOVZX

dalej opisanych rozkazów MOVSX lub MOVZX

background image

Operator PTR (3)

Operator PTR (3)

operator PTR stosuje się także w przypadkach,

operator PTR stosuje się także w przypadkach,

gdy wyrażenie adresowe nie pozwala na

gdy wyrażenie adresowe nie pozwala na

jednoznaczne przetłumaczenie rozkazu, np.

jednoznaczne przetłumaczenie rozkazu, np.

poniższy rozkaz stanowi tzw. odwołanie

poniższy rozkaz stanowi tzw. odwołanie

anonimowe (nie zawiera nazwy zmiennej)

anonimowe (nie zawiera nazwy zmiennej)

mov

mov

[ebx], 65

[ebx], 65

operandy rozkazu nie precyzują czy liczba 65 ma zostać

operandy rozkazu nie precyzują czy liczba 65 ma zostać

zapisana w pamięci jako liczba 8-bitowa, 16-bitowa czy 32-

zapisana w pamięci jako liczba 8-bitowa, 16-bitowa czy 32-

bitowa — zamiast podanego wyżej rozkazu programista

bitowa — zamiast podanego wyżej rozkazu programista

musi wyraźnie określić rozmiar liczby podając jeden z

musi wyraźnie określić rozmiar liczby podając jeden z

trzech poniższych rozkazów

trzech poniższych rozkazów

 

 

mov

mov

byte

byte

PTR

PTR

[ebx], 65

[ebx], 65

mov

mov

word

word

PTR

PTR

[ebx], 65

[ebx], 65

mov

mov

dword

dword

PTR

PTR

[ebx], 65

[ebx], 65

background image

Rozkazy MOVZX i MOVSX (1)

Rozkazy MOVZX i MOVSX (1)

reguła dotycząca jednakowej długości operandów

reguła dotycząca jednakowej długości operandów

nie obowiązuje w odniesieniu do rozkazów MOVSX

nie obowiązuje w odniesieniu do rozkazów MOVSX

i MOVZX

i MOVZX

rozkazy te powodują przepisanie zawartości 8- lub

rozkazy te powodują przepisanie zawartości 8- lub

16-bitowego rejestru (lub zawartości lokacji

16-bitowego rejestru (lub zawartości lokacji

pamięci) do rejestru 16- lub 32-bitowego

pamięci) do rejestru 16- lub 32-bitowego

w przypadku rozkazu MOVZX brakujące bity w

w przypadku rozkazu MOVZX brakujące bity w

rejestrze docelowym uzupełniane są zerami, zaś

rejestrze docelowym uzupełniane są zerami, zaś

w przypadku MOVSX bity te są wypełniane przez

w przypadku MOVSX bity te są wypełniane przez

wielokrotnie powielony bit znaku kopiowanego

wielokrotnie powielony bit znaku kopiowanego

rejestru

rejestru

background image

Rozkazy MOVZX i MOVSX (2)

Rozkazy MOVZX i MOVSX (2)

przykłady

przykłady

liczba_proc

liczba_proc

db

db

145

145

; zmienna 8-bitowa

; zmienna 8-bitowa

— — — — — — — — —

— — — — — — — — —

movzx

movzx

edx,

edx,

liczba_proc

liczba_proc

movsx

movsx

edx,

edx,

bh

bh

 

 

rozkaz MOVSX stosuje się do kopiowania liczb ze

rozkaz MOVSX stosuje się do kopiowania liczb ze

znakiem — po zwiększeniu ilości bitów liczby, jej

znakiem — po zwiększeniu ilości bitów liczby, jej

wartość pozostaje niezmieniona.

wartość pozostaje niezmieniona.


Document Outline


Wyszukiwarka

Podobne podstrony:
AKO 2009 cz 7
AKO 2009 cz 3
AKO 2009 cz 1
AKO 2009 cz 5
AKO 2009 cz 8
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