PPS 2011 W7 id 381592 Nieznany

background image

Wykład 7

Struktury danych

Konstrukcje warunkowe

background image

Definiowanie symboli

Zmienne programu

Struktury zło

ż

one

Sterowanie programem

Skoki warunkowe

Warunkowe polecenia blokowe

background image

Definicje symboli

Etykiety

przy instrukcjach lub polach danych

Warto

ś

ci

ą

etykiety jest adres przypisany linii programu

ASM

Stałe

symbol

EQU

warto

ść

< warto

ść

> ::= <stała > | <inny symbol> | <wyra

ż

enie>

Zwi

ę

ksza czytelno

ść

i zrozumiało

ść

programu

definiowanie uprzednie (niemo

ż

liwe odwołania w przód)

background image

Definiowanie symboli

Przykład 1

MAXLEN

EQU

4096

MOV

EX,#MAXLEN

Przykład 2 (def. wielu rejestrów uniwersalnych)

BASE

EQU

R1

COUNT EQU

R2

INDEX EQU R3

Przykład 3

MAXLEN

EQU

BUFEND-BUFFER

background image

Symbole lokalne

dyrektywa QUAL:

QUAL symbol

ASM poprzedza ka

ż

dy kolejny

symbol przedrostkiem
/<symbol>/

Nie wyst

ę

puje

w MASM 86

background image

Definiowanie zmiennych programu

Rezerwacja komórek pami

ę

ci na zmienne programu

- zmienne z warto

ś

ci

ą

zainicjalizowan

ą

- zmienne bez zainicjalizowanej warto

ś

ci

Np. dyrektywy:

DB, DW, DQ, DT

Dyrektywa DB:

symbol

DB wyra

ż

enie, [wyra

ż

enie],

Lista odpowiadaj

ą

ca zainicjalizowanym warto

ś

ciom.

Zwykle „?”

oznacza warto

ść

dowoln

ą

background image

Definiowanie zmiennych programu

Przykład 1

Przykład 3

ę

dnie!!!

Zostanie

potraktowane jak kod instrukcji

Przykład 2

ENTRY

background image

Przypisanie adresu pocz

ą

tkowego

Dyrektywa ORG (origin):

ORG warto

ść

< warto

ść

> ::= <stała > | <inny

symbol> | <wyra

ż

enie>

Po

ś

rednio przypisuje

warto

ś

ci symbolom

Ustawia wska

ź

nik

lokalizacji kodu na
wyspecyfikowan

ą

warto

ść

definiowanie uprzednie
(niemo

ż

liwe odwołania w

przód)

background image

Przy u

ż

yciu EQU

STAB

DB

1190 DUP (?)

SYMBOL

EQU

STAB

VALUE

EQU

STAB+6

FLAG

EQU

STAB+10

SYMBOL

VALUE FLAGS

STAB

6 bajtów

4 bajty 2 bajty

(100 pozycji)

.

.

.

.

.

.

.

.

.

Przy u

ż

yciu ORG

STAB

DB

1190 DUP (?)

ORG

STAB

SYMBOL

DB

6 DUP (?)

VALUE

DW

?

FLAGS

DB

2 DUP (?)

ORG

STAB+1190

Przypisanie bloku do pami

ę

ci,

definiowanie tablic

Przykład

background image

Zło

ż

one struktury zmiennych programu

Dyrektywa RECORD:

symbol

RECORD n_pola:długo

ść

[wyra

ż

enie], [n_pola:długo

ść

[wyra

ż

enie]]

Definiuje struktur

ę

o danej nazwie.

Nie dokonuje alokacji

background image

Dyrektywa STRUCT:

symbol

STRUCT [alignment]

deklaracje pól

symbol

ENDS

Zło

ż

one struktury zmiennych programu

Definiuje struktur

ę

o danej

nazwie. Nie dokonuje alokacji

Ustala „raster” lokalizacji w

pami

ę

ci

background image

Konstrukcje warunkowe

background image

Flagi statusu – przypomnienie

Flaga

Zero

ustawiana, gdy wynik wynosi 0.

Flaga

Carry

ustawiana, gdy wynik jest zbyt du

ż

y (zbyt mały), aby

umie

ś

ci

ć

w lokalizacji docelowej.

Flaga

Sign

ustawiana, gdy wynik jest ujemny.

Flaga

Overflow

ustawiana, gdy wynik w postaci liczby ze znakiem

jest niewła

ś

ciwy.

Flaga

Parity

ustawiana, gdy wynik zawiera parzyst

ą

liczb

ę

1 (low

byte).

Flaga

Auxiliary Carry

ustawiana, gdy przeniesienie z bitu 3 na bit 4

background image

Skoki warunkowe

Warunki odnosz

ą

si

ę

do. . .

- flag

- równo

ś

ci (argumentów)

- wyników porówna

ń

(bez znaku)

- wyników porówna

ń

(ze znakiem)

background image

Skoki warunkowe (od flag)

background image

Skoki warunkowe (równo

ść

/nierówno

ść

)

rejestr licznikowy

background image

Skoki warunkowe (porównania bez znaku)

CF=0 i ZF=0

CF=0 i ZF=0

CF=0

CF=0

CF=1

CF=1

CF=1 lub ZF=1

CF=1 lub ZF=1

background image

Skoki warunkowe (porównania ze znakiem)

SF=OF i ZF=0

SF=OF

SF

OF

SF

OF lub ZF=1

background image

Warunki rozgał

ę

zie

ń

mov ax,wordVal

and ax,1

; zeruj bity poza najmłodszym

jz EvenValue

; skocz, gdy ustawiona flaga zera

• Zadanie: skocz do etykiety, je

ż

eli liczba całk. parzysta.

• Rozwi

ą

zanie: wyzeruj wszystkie bity poza najmłodszym

(x

AND

1). Gdy rezultat 0 - liczba była parzysta.

• Zadanie: Skocz do etykiety, gdy zawarto

ść

AL

0.

• Rozwi

ą

zanie: wykonaj AL

OR

AL (0

AL=0). U

ż

yj JNZ

(jump if not zero).

or al,al

jnz IsNotZero

; skocz, gdy nie zero

Uwaga! x

x=x

background image

Warunki rozgał

ę

zie

ń

Zastosowanie instrukcji

TEST

Nie modyfikuje operandów; okre

ś

la stan flagi „Zero”.

Warto

ść

flagi „Zero” jak dla instrukcji AND

Przykład 1: skocz, gdy AL

0

lub AL

1

ustawione.

test al,00000011b

jnz ValueFound

Przykład 2: skocz, gdy ani AL

0

ani AL

1

ustawione.

test al,00000011b

jz ValueNotFound

background image

Warunki rozgał

ę

zie

ń

Zastosowanie instrukcji

CMP

Porównuje operand docelowy ze

ź

ródłowym

Warto

ś

ci flag jak dla odejmowania operandu

ź

ródłowego od

operandu docelowego; operandy niezmienione.

Składnia:

CMP arg docelowy, arg

ź

ródłowy

SF=¬OF

CF=1

docelowy <

ź

ródłowy

SF=OF

ZF=0

CF=0

docelowy >

ź

ródłowy

ZF=1

docelowy

ź

ródłowy

background image

Oprnd1

minus

Oprnd2

S

O

------

------

-

-

0FFFF (-1)

-

0FFFE (-2)

0

0

8000

-

00001

0

1

FFFE (-2)

-

0FFFF (-1)

1

0

07FFF (32767) -

0FFFF (-1)

1

1

Warunki rozgał

ę

zie

ń

Zastosowanie instrukcji

CMP

background image

Warunki rozgał

ę

zie

ń

cmp eax,ebx

ja

Larger

• Zadanie: skocz do etykiety, je

ż

eli EAX>EBX (

bez znaku

)

• Rozwi

ą

zanie: u

ż

yj

CMP

, nast

ę

pnie

JA

cmp eax,ebx

jg

Greater

• Zadanie: skocz do etykiety, je

ż

eli EAX>EBX (

ze znakiem

)

• Rozwi

ą

zanie: u

ż

yj

CMP

, nast

ę

pnie

JG

background image

Warunki rozgał

ę

zie

ń

cmp eax,Val1

jbe

L1

; mniejsze lub równe

• Skocz, je

ż

eli EAX

Val1 (

bez znaku

)

cmp eax,Val1

jle

L1

; mniejsze lub równe

• Skocz, je

ż

eli EAX

Val1 (

ze znakiem

)

background image

Warunki rozgał

ę

zie

ń

cmp

WORD PTR [esi],

0

je

L1

• Skocz, je

ż

eli słowo „adresowane” przez ESI równa si

ę

0

test

DWORD PTR [edi],

1

jz

L2

• Skocz, je

ż

eli podwójne słowo „adresowane” przez EDI jest

parzyste

background image

Warunki rozgał

ę

zie

ń

Warunki od warto

ś

ci bitu:

U

ż

yj

BT

do przekopiowania bitu do CF

Składnia:

BT symbol, n

U

ż

yj skoku od

CF

Przykład: skocz, je

ż

eli AX

9

=1:

bt

AX,9

; CF = bit 9

jc

L1

; skocz, gdy CF=1

r16, r32, lub imm8

r/m16 lub r/m32

background image

Organizacja p

ę

tli

Składnia:

LOOP etykieta

Działanie:

ECX

ECX – 1

ECX > 0, skok do etykiety

background image

Organizacja p

ę

tli

Składnia:

LOOPE etykieta

(

LOOPZ etykieta)

Działanie:

ECX

ECX – 1

ECX > 0 i ZF=1, skok do etykiety

Składnia:

LOOPNE etykieta

(

LOOPNZ etykieta)

Działanie:

ECX

ECX – 1

ECX > 0 i ZF=0, skok do etykiety

background image

Instrukcja do wykorzystania, nale

ż

y powtarza

ć

p

ę

tl

ę

w czasie, gdy

jedna warto

ść

=drugiej, lecz nie przekroczy

ć

maksymalnej liczby iteracji

Organizacja p

ę

tli

LOOPE etykieta

Przykład: poszukiwanie pierwszego niezerowego elementu
tablicy, w granicach tablicy:

mov cx, 16

;max 16 elementów

mov bx, -1

;indeks w tablicy

SearchLp:

inc bx

;przesu

ń

indeks

cmp Array[bx], 0

;czy zero?

loope SearchLp

;powtarzaj (zero, <16)

je AllZero

;gdy wszystkie= zero

background image

Instrukcja do wykorzystania, gdy nale

ż

y powtarza

ć

p

ę

tl

ę

maksymaln

ą

liczb

ę

razy oczekuj

ą

c na spełnienie pewnego warunku

Organizacja p

ę

tli

LOOPNE etykieta

Przykład: oczekiwanie, a

ż

urz

ą

dzenie gotowe:

mov dx, 379h

;adres portu

mov cx, 0

;p

ę

tla max 65536 razy

WaitNotBusy: in al, dx

;czytaj port

test al, 80h

;zaj

ę

ty?

loopne WaitNotBusy

;gdy zaj

ę

ty i <65536x

jne TimedOut

;skok, gdy „time out”(CX=0, ZF=0)

background image

Struktury warunkowe

Implementacja struktur warunkowych w ASM

• Blokowe polecenia IF

• P

ę

tle WHILE

• Przeł

ą

cznik CASE

Wsparcie makroasemblera (MASM)

• Polecenia blokowe IF

• P

ę

tle WHILE

• P

ę

tle REPEAT

background image

Blokowe polecenia IF

Odpowiedniki polece

ń

j

ę

zyków wysokiego poziomu:

mov eax,op1

cmp eax,op2

jne L1

mov X,1

jmp L2

L1: mov X,2

L2:

if( op1 == op2 )

X = 1;

else

X = 2;

background image

Zło

ż

one wyra

ż

enia warunkowe

Wyra

ż

enie warunkowe z iloczynem (AND)

Przykład: w poni

ż

szym przykładzie HLL pomija wyznaczanie

drugiego wyra

ż

enia, je

ż

eli pierwsze fałszywe.

if (al > bl) AND (bl > cl)

X = 1;

background image

Zło

ż

one wyra

ż

enia warunkowe

if (al > bl) AND (bl > cl)

X = 1;

cmp al,bl

; pierwsze wyra

ż

enie...

ja L1

jmp next

L1:

cmp bl,cl

; drugie wyra

ż

enie...

ja L2

jmp next

L2:

; obydwa prawdziwe

mov X,1

; ustaw X na 1

next:

Jedna z mo

ż

liwych implementacji: [IF

(al > bl)

]

AND

[IF

(bl > cl)

]

{

{

background image

Zło

ż

one wyra

ż

enia warunkowe

cmp al,bl

; pierwsze wyra

ż

enie...

jbe next

; ko

ń

cz, gdy fałsz

cmp bl,cl

; drugie wyra

ż

enie...

jbe next

; ko

ń

cz, gdy fałsz

mov X,1

; obydwa prawdziwe

next:

if (al > bl) AND (bl > cl)

X = 1;

Ale....poni

ż

sza implementacja u

ż

ywa prawie 30% kodu

mniej: NOT {[IF NOT

(al > bl)

]

OR

[IF NOT

(bl > cl)

]

}

background image

Zło

ż

one wyra

ż

enia warunkowe

Wyra

ż

enie warunkowe z sum

ą

logiczn

ą

(OR)

Przykład: w poni

ż

szym przykładzie HLL pomija wyznaczanie

drugiego wyra

ż

enia, je

ż

eli pierwsze prawdziwe.

if (al > bl) OR (bl > cl)

X = 1;

background image

Zło

ż

one wyra

ż

enia warunkowe

cmp al,bl

; AL > BL?

ja L1

; tak

cmp bl,cl

; nie: BL > CL?

jbe next

; nie: omi

ń

L1: mov X,1

; ustaw X na 1

next:

if (al > bl) OR (bl > cl)

X = 1;

Mo

ż

na zastosowa

ć

poprzedni

ą

koncepcj

ę

dla skrócenia

programu:

background image

P

ę

tle WHILE

while( eax < ebx)

eax = eax + 1;

P

ę

tla

WHILE

jest w rzeczywisto

ś

ci poleceniem IF po którym

nast

ę

puje tre

ść

p

ę

tli zako

ń

czona skokiem bezwarunkowym

na pocz

ą

tek p

ę

tli.

Przykład:

top: cmp eax,ebx

; sprawd

ź

warunek p

ę

tli

jae next

; fałsz? Opu

ść

p

ę

tl

ę

inc eax

; program p

ę

tli

jmp top

; powtarzaj p

ę

tl

ę

next:

Mo

ż

liwa implementacja:

background image

CASE zmienna in

"wzorzec1") polecenie1 ;;
"wzorzec2") polecenie2 ;;
"wzorzec3") polecenie3 ;;
*) polecenie_domy

ś

lne

esac

Przeł

ą

cznik CASE

Przeł

ą

cznik CASE

o nast

ę

puj

ą

cej składni:

... Porównuje zmienn

ą

z wzorcami i po napotkaniu pierwszej

zgodno

ś

ci wykonuje odpowiadaj

ą

ce polecenie a nast

ę

pnie

ko

ń

czy CASE

background image

Przeł

ą

cznik - implementacja

.data

CaseTable BYTE 'A'

; warto

ść

sprawdzana

DWORD Process_A

; adres procedury

EntrySize = ($ - CaseTable)

BYTE 'B'

DWORD Process_B

BYTE 'C'

DWORD Process_C

BYTE 'D'

DWORD Process_D

NumberOfEntries = ($ - CaseTable) / EntrySize

Krok 1: utwórz tablic

ę

zawieraj

ą

c

ą

wyró

ż

niki i przesuni

ę

cia do

procedur:

wyró

ż

nik

adres

background image

Przeł

ą

cznik - implementacja

mov ebx,OFFSET CaseTable

; EBX wskazuje tablic

ę

mov ecx,NumberOfEntries

; licznik p

ę

tli

L1: cmp al,[ebx]

; znaleziono?

jne L2

; nie: kontynuuj

call NEAR PTR [ebx + 1]

; tak: wywołaj procedur

ę

jmp L3

; po zako

ń

czeniu opu

ść

p

ę

tl

ę

L2: add ebx,EntrySize

; przesu

ń

na nast.pozycj

ę

loop L1

; powtarzaj, a

ż

ECX = 0

L3:

Krok 2: U

ż

yj p

ę

tli do przeszukiwania tablicy. Wywołaj procedur

ę

,

której przesuni

ę

cie wpisane w znalezionej pozycji:

wymagane dla

wska

ź

ników do

procedury

background image

Dyrektywy makroasemblera

.IF eax > ebx

mov edx,1

.ELSE

mov edx,2

.ENDIF

• Dyrektywy

.IF, .ELSE, .ELSEIF, .ENDIF

mog

ą

by

ć

u

ż

yte do

utworzenia blokowych polece

ń

IF.

• Przykłady:

• Makroasembler (MASM) utworzy „ukryty” kod

ź

ródłowy

składaj

ą

cy si

ę

z instrukcji, etykiet, CMP i skoków

warunkowych.

.IF eax > ebx && eax > ecx

mov edx,1

.ELSE

mov edx,2

.ENDIF

background image

U

ż

ywane operatory logiczne i porówna

ń

background image

Ekwiwalentny kod ASM

mov eax,6

cmp eax,val1

jbe

@C0001

mov result,1

@C0001:

.data

val1 DWORD 5

result DWORD ?

.code

mov eax,6

.IF eax > val1

mov result,1

.ENDIF

Odpowiadaj

ą

cy kod ASM:

MASM automatycznie stosuje

JBE

(

bez znaku

), gdy

ż

val1 jest

liczb

ą

bez znaku

.

background image

mov eax,6

cmp eax,val1

jle

@C0001

mov result,1

@C0001:

.data

val1 SDWORD 5

result SDWORD ?

.code

mov eax,6

.IF eax > val1

mov result,1

.ENDIF

Ekwiwalentny kod ASM

Odpowiadaj

ą

cy kod ASM:

MASM automatycznie stosuje

JLE

(

ze znakiem

), gdy

ż

val1 jest

liczb

ą

ze znakiem

.

background image

mov ebx,5

mov eax,6

cmp eax,ebx

jbe

@C0001

mov result,1

@C0001:

.data

result DWORD ?

.code

mov ebx,5

mov eax,6

.IF eax > ebx

mov result,1

.ENDIF

MASM automatycznie stosuje

JBE

(

bez znaku

), gdy

ż

obydwa

operandy

s

ą

rejestrami

Ekwiwalentny kod ASM

Odpowiadaj

ą

cy kod ASM:

background image

mov ebx,5

mov eax,6

cmp eax,ebx

jle

@C0001

mov result,1

@C0001:

.data

result SDWORD ?

.code

mov ebx,5

mov eax,6

.IF SDWORD PTR eax > ebx

mov result,1

.ENDIF

. . .chyba,

ż

e operand rejestrowy zostanie poprzedzony

prefiksem w postaci

operatora SDWORD PTR

. Wówczas

u

ż

ywany jest skok

JLE

(

ze znakiem

).

Ekwiwalentny kod ASM

Odpowiadaj

ą

cy kod ASM:

background image

Dyrektywa .REPEAT

; Display integers 1 – 10:

mov eax,0

.REPEAT

inc eax

call WriteDec

call Crlf

.UNTIL eax == 10

Program p

ę

tli jest wykonywany

przed sprawdzeniem

warunku

p

ę

tli, umieszczonego po dyrektywie .UNTIL.

Przykład:

background image

Dyrektywa .REPEAT

Ekwiwalentny kod ASM

implementacja:

; Display integers 1 – 10:

mov eax,0

@C0001:

inc eax

call WriteDec

call Crlf

cmp eax,10

; sprawd

ź

warunek p

ę

tli

jb @C0001

; fałsz? Opu

ść

p

ę

tl

ę

background image

Dyrektywa .WHILE

; Display integers 1 – 10:

mov eax,0

.WHILE eax < 10

inc eax

call WriteDec

call Crlf

.ENDW

Warunek p

ę

tli sprawdzany jest

przed wykonaniem programu

p

ę

tli. Koniec p

ę

tli oznaczony jest dyrektyw

ą

.ENDW.

Przykład:

background image

Dyrektywa .WHILE

; Display integers 1 – 10:

mov eax,0

cmp eax,10

; sprawd

ź

warunek p

ę

tli

jae @C0001

; fałsz? Opu

ść

p

ę

tl

ę

inc eax

call WriteDec

call Crlf

@C0001:

Ekwiwalentny kod ASM

implementacja:


Wyszukiwarka

Podobne podstrony:
4OS 2011 w7 id 39386 Nieznany
Calki, IB i IS, 2011 12 id 1073 Nieznany
Egzamin 2011 algebra id 151848 Nieznany
BAL 2011 cwicz6 id 78938 Nieznany (2)
AMB ME 2011 wyklad01 id 58945 Nieznany (2)
4OS 2011 w5 id 39385 Nieznany
marzec 2011 wybrane id 281154 Nieznany
BAL 2011 cwicz 3 id 78934 Nieznany (2)
19 07 2011 ucho(1)id 18427 Nieznany
PC w7(1) id 351842 Nieznany
chemia proz maj 2011 cke id 112 Nieznany
AMB ME 2011 wyklad04 id 58946 Nieznany (2)
4OS 2011 w1 id 39381 Nieznany (2)
4OS 2011 w8 id 39387 Nieznany
GPW biuletyn 2011 01 id 194038 Nieznany
egz sem 2 analiza 2011 12 id 15 Nieznany
kalendarium UJ 2011 2012 id 230 Nieznany
budowlane notatki 2011 12 id 94 Nieznany

więcej podobnych podstron