Download as pdf or txt
Download as pdf or txt
You are on page 1of 30

IDZ DO

PRZYKADOWY ROZDZIA
SPIS TRECI

KATALOG KSIEK
KATALOG ONLINE

Win32ASM.
Asembler w Windows
Autor: Adam Baszczyk
ISBN: 83-7361-022-7
Format: B5, stron: 360

ZAMW DRUKOWANY KATALOG

TWJ KOSZYK
DODAJ DO KOSZYKA

CENNIK I INFORMACJE
ZAMW INFORMACJE
O NOWOCIACH
ZAMW CENNIK

CZYTELNIA
FRAGMENTY KSIEK ONLINE

Przekonanie, e programowanie w asemblerze odeszo w przeszo wraz z opartymi


na interfejsie tekstowym systemami w rodzaju DOS i upowszechnieniem si
wysokopoziomowych jzykw programowania takich jak Visual Basic, C++ czy Java,
jest bdne. Cakiem spora grupa osb nadal uywa asemblera w rodowisku Windows.
Jeli chcesz do nich doczy, znalaze waciw ksik.
Asembler daje programicie poczucie ogromnej wolnoci i penego panowania nad
sprztem. Dziki tej ksice nauczysz si programowa w tym jzyku, poznasz rwnie
cay zestaw aplikacji, ktre programowanie to uatwi. W tekcie ksiki znajdziesz
wiele przykadw kodu ilustrujcych najwaniejsze omawiane zagadnienia.
Ksika przedstawia:
Podstawowe informacje zwizane z asemblerem: systemy kodowania,
zapis liczb i znakw
Rejestry i pami maszyny z punktu widzenia programisty asemblera, adresowanie
Instrukcje asemblera i list rozkazw procesora
Programowanie z uyciem MASM Makro Asemblera
Uycie programu NMAKE i tworzenie plikw Makefile
Programowanie w Windows: WinAPI
Biblioteki DLL
Technologie COM i OLE
Zasoby programw Windows
Jeszcze jedna metoda tworzenia programw w Windows, ktra moe zafascynowa
osoby lubice dubanie w kodzie? Dlaczego nie! Przeczytaj t ksik, a sam bdziesz
mg oceni, czy asembler si zdewaluowa.
Programowanie w Windows dla wtajemniczonych.

Wydawnictwo Helion
ul. Chopina 6
44-100 Gliwice
tel. (32)230-98-63
e-mail: helion@helion.pl

Poznaj jzyk asembler dla procesorw Intel i kompatybilnych


Naucz si uywa Windows API z poziomu asemblera
Poznaj narzdzia uatwiajce programowanie

Spis treci
Od Autora.......................................................................................... 9
Wstp ............................................................................................. 11
Rozdzia 1. Zanim zaczniemy na powanie.......................................................... 15
Platform SDK, MSDN ......................................................................................................15
Pakiet Masm32..................................................................................................................16
Narzdziownia...................................................................................................................17

Rozdzia 2. Asembler kontra Windows................................................................ 19


Krtko o rnych rodzinach okienek ................................................................................19
Gdzie si podziay przerwania?.........................................................................................23
Windows API ....................................................................................................................24
Windows z perspektywy asemblera ..................................................................................27

Rozdzia 3. Co trzeba wiedzie? ......................................................................... 31


Systemy liczbowe i nie tylko ............................................................................................31
Informacja i system dwjkowy (binarny) ...................................................................32
Potgi liczby 2...................................................................................................................33
Jednostki objtoci danych................................................................................................37
Kodowanie liczb................................................................................................................37
NKB (naturalny kod binarny) .....................................................................................40
Kod dwjkowo-dziesitny BCD (Binary Coded Decimal) ........................................41
Reprezentacja liczb ujemnych ....................................................................................42
Reprezentacja staoprzecinkowa.................................................................................45
Reprezentacja zmiennoprzecinkowa...........................................................................45
Problemy zwizane z bdami oblicze......................................................................46
Kodowanie znakw ...........................................................................................................47
ASCII (ISO 646) .........................................................................................................47
ASCII rozszerzone (ASCII Extended, HI-ASCII)......................................................47
Polskie znaki diaktryczne w rnych systemach kodowania znakw ........................54
ASCIIZ (ASCII Zero) .................................................................................................55
Systemy kodowania MBCS (Multibyte Character Set) i DBCS
(Double Character Set) ............................................................................................55
Unicode .......................................................................................................................56

Win32ASM. Asembler w Windows

Rozdzia 4. Asembler......................................................................................... 63
Z czego skada si typowy program? ................................................................................63
Program wykonywalny od rodka................................................................................70
Gdzie umieszcza kod i dane? ..........................................................................................73
Zamiana tekstu programu na kod wykonywalny ..............................................................74
Procesory 80x86 krtkie wprowadzenie ......................................................................77
Pami model paski.....................................................................................................77
Rejestry..............................................................................................................................80
Rejestry tzw. oglnego przeznaczenia........................................................................80
Rejestr EIP ..................................................................................................................82
Rejestry segmentowe ..................................................................................................82
Rejestr eflags...............................................................................................................83
Moment uruchomienia programu......................................................................................86
Dostp do pamici i sposoby jej adresowania...................................................................87
Adresowanie bezporednie .........................................................................................87
Adresowanie porednie...............................................................................................88
Adresowanie a wielko danych .......................................................................................89
Adresowanie a rejestry segmentowe .................................................................................90
Adresowanie acuchw ...................................................................................................91
Instrukcje 32- i 16-bitowe .................................................................................................92
Stos ....................................................................................................................................93
Wywoywanie procedur ....................................................................................................94
Przekazywanie parametrw przez rejestry..................................................................95
Przekazywanie parametrw przez stos .......................................................................95
Deklarowanie zmiennych..................................................................................................95
Zmienne, wskaniki adresowanie ................................................................................97
Najwaniejsze instrukcje programu ..................................................................................99
Instrukcja mov ............................................................................................................99
Para instrukcji push/pop............................................................................................100
Rozkazy dotyczce operacji na acuchach ..............................................................100
Rozkazy arytmetyczne ..............................................................................................101
Etykiety, ptle, skoki.................................................................................................102
Rozkazy zwizane z procedurami.............................................................................103
Rozkazy logiczne ......................................................................................................105
Rozkazy przesuni ..................................................................................................106
Lista rozkazw IA-32 opis skrcony .........................................................................108
Instrukcje transferu danych.......................................................................................108
Instrukcje arytmetyczne ............................................................................................108
Instrukcje porwnujce i testujce ustawienie danego bitu......................................108
Instrukcje arytmetyczne (kod BCD) .........................................................................109
Instrukcje logiczne ....................................................................................................109
Instrukcje przesuni ................................................................................................109
Instrukcje obrotw ....................................................................................................109
Intrukcje operujce na bitach ....................................................................................109
Intrukcje przenoszce kontrol do innego miejsca w programie..............................109
Intrukcje operujce na acuchach............................................................................110
Instrukcje dotyczce rejestru znacznikw ................................................................110
Instrukcje dotyczce segmentw ..............................................................................110
Instrukcje rne.........................................................................................................110

Rozdzia 5. Macro Assembler........................................................................... 131


MASM Macro Assembler ..........................................................................................131
Jak powstaj makra? .................................................................................................133

Spis treci

7
Najwaniejsze informacje o makrach .............................................................................134
Znaki specjalne .........................................................................................................134
Zapis liczb.................................................................................................................134
Przedefiniowane symbole i funkcje ..........................................................................134
Operatory ..................................................................................................................136
Makra zwizane z procesem asemblacji ...................................................................138
Operatory zwizane z programowaniem ..................................................................147
Tworzenie wasnych makr ........................................................................................155
Plik macro.inc przykady uytecznych makr .......................................................155
Sowa zarezerwowane w jzyku Macro Assembler........................................................169

Rozdzia 6. Pisanie plikw makefile program NMAKE ................................... 175


Zawarto pliku projektowego ........................................................................................175
Bloki komentarzy......................................................................................................176
Bloki opisowe ...........................................................................................................176
Pora na praktyk budowanie wasnych projektw.....................................................178
Uniwersalny makefile (plik makefile.mak).....................................................................179

Rozdzia 7. Parametry wywoania programw MASM, LINK, RC i NMAKE .......... 185


Parametry wywoania ML.EXE ......................................................................................185
Parametry wywoania LINK.EXE...................................................................................187
Parametry wywoania RC.EXE.......................................................................................188
Parametry wywoania NMAKE ......................................................................................189

Rozdzia 8. Podstawy programowania Windows ................................................ 191


Pojcie okna ....................................................................................................................192
Komunikaty okna ............................................................................................................193
Szkielet aplikacji dialogowej ..........................................................................................194
Konsola............................................................................................................................195
Podsumowanie ................................................................................................................197

Rozdzia 9. Jak korzysta z dokumentacji SDK? ............................................... 209


Notacja wgierska ...........................................................................................................209
Funkcje Win API.............................................................................................................209
Parametry funkcji Win API.............................................................................................213
Funkcje Unicode kontra funkcje ANSI...........................................................................215

Rozdzia 10. Win32ASM graficzny interfejs uytkownika GUI .......................... 223


Rola interfejsu uytkownika .....................................................................................223
Elementy interfejsu ...................................................................................................225
Zmiany wprowadzone przez Windows XP...............................................................226
Wszystko o oknach ...................................................................................................226
Menu .........................................................................................................................262

Rozdzia 11. Zasoby programw Windows .......................................................... 269


Skrypty zasobw w plikach .rc i .res...............................................................................269
Binaria, czyli zasoby w plikach wykonywalnych ...........................................................272
Dostp do zasobw z poziomu programu.................................................................273
Jeszcze raz o narzdziach..........................................................................................273
Tworzenie plikw z zasobami ..................................................................................274
Piszemy wasny edytor tekstu...................................................................................275
Inne rodzaje zasobw................................................................................................287
Manifest w Windows XP ..........................................................................................288
Zakadka Wersja informacje o programie............................................................291

Win32ASM. Asembler w Windows

Rozdzia 12. WinAPI najczciej wykorzystywane funkcje............................... 301


Wersja systemu ...............................................................................................................301
Odczyt parametrw systemu ...........................................................................................301
Dostp do katalogw systemowych ................................................................................302
Powiadomienia o zmianach (stanu systemu, jego ustawie lub stanu okna itp.)............303
Dostp do linii polece programu ...................................................................................303
Operacje na liczbach i acuchach ..................................................................................305
Pliki w systemie Windows ..............................................................................................305
Dostp do Rejestru ..........................................................................................................306
Liczniki czasowe .............................................................................................................308

Rozdzia 13. Zagadnienia wcale niezaawansowane............................................. 309


Biblioteki DLL ................................................................................................................309
Haki w systemie Windows..............................................................................................312
Internet ............................................................................................................................313
Uaktualnianie wersji programu przez internet..........................................................313
Piszemy konia trojaskiego, czyli oprogramowanie typu serwer-klient...............317

Rozdzia 14. Technologia COM i kontrolki OLE ................................................... 331


Obecno na pasku zada interfejs ITaskbarList .......................................................332
Plik skrtu interfejs IShellLink ..................................................................................338
Najmniejsza przegldarka wiata interfejs IWebBrowser2 .......................................340

Rozdzia 15. Materiay pomocnicze .................................................................... 351


Dokumentacja i podrczniki............................................................................................351
Najwaniejsze strony domowe powicone Win32ASM ...............................................351
Opracowania i literatura dotyczce Win32ASM, WinAPI i tematyki pokrewnej ..........352
Asemblery, kompilatory, programy czce ...................................................................352
Inne..................................................................................................................................353
Wybrane strony z narzdziami........................................................................................353

Rozdzia 16. Programy rdowe......................................................................... 355


Skorowidz...................................................................................... 361

Rozdzia 5.

Macro Assembler
Niniejsza cz ksiki powicona jest cakowicie przyblieniu podstawowych i najwaniejszych z punktu widzenia programisty informacji na temat jzyka Macro Assembler.

MASM Macro Assembler


Macro Assembler to jzyk cakowicie typowy i nic dziwnego, e steruj nim pewne,
odgrnie ustalone zasady. Przede wszystkim jest to zwyky asembler, w ktrym mona
tworzy programy w klasyczny sposb piszc kolejne instrukcje w osobnych linijkach. Prawdziwa sia Macro Assemblera tak naprawd tkwi jednak w makrach. Czym s
i jak uywa ich skutecznie w swoich programach opowiemy za chwil, zastanwmy
si jednak najpierw, co jest najwiksz bolczk programistw piszcych w jzyku
asembler. Odpowied na to pytanie znalaza si ju w poprzednim podrozdziale
chodzi o chaos widoczny w wikszoci programw pisanych w tym jzyku. Jeli masz
ju jakie dowiadczenia jako programista pracujcy w asemblerze, zapewne znasz
doskonale uczucie towarzyszce przegldaniu programw rdowych, szczeglnie tych
pochodzcych z przeszoci lub pisanych przez innych programistw. Sporo czasu zajmuje zwykle zrozumienie sedna sprawy i to tutaj wanie Macro Assembler ma okazj
pokaza swoje najwiksze zalety, a ju szczeglnie swj zbawienny wpyw na przejrzysto kodu.
Wemy na przykad bardzo czsto stosowan w asemblerze konstrukcj:









 


132

Win32ASM. Asembler w Windows


 




 




 








ktra pozwala na wykonywanie rnego kodu w zalenoci od okrelonych warunkw.


W przypadku jednego rozgazienia nie ma problemu, natomiast komplikacje s od razu
widoczne przy wikszej liczbie warunkw. Macro Assembler wietnie rozwizuje t
kwesti, pozwalajc na uproszczenie tego typu konstrukcji za pomoc bloku , ktry dla powyszego przykadu moglibymy zastosowa w nastpujcy sposb:








Od razu rzucaj si w oczy trzy rzeczy. Po pierwsze, zapis jest o wiele krtszy; po
drugie, nie musimy korzysta z uciliwych etykiet; po trzecie skadnia bardzo przypomina zapis jzyka wyszego poziomu. I tak jest w istocie. Istnieje nawet opinia, i
programowanie w Macro Asemblerze w nieduym stopniu rni si od programowania
w jzyku C lub podobnym. Chyba ju wiesz, jak potg skupia w sobie ten niepozorny
jzyk?
Tak, tak
Skadnia jzyka wysokiego poziomu, instrukcje asemblera, bezporedni dostp do pamici, bezporedni dostp do funkcji Win API, moliwo ingerencji w kod programu
na najniszym poziomie i wiele innych czynnikw, wczajc w to jeden drobny, acz
chyba najbardziej lubiany przez wszystkich koderw szczeg programy wynikowe
s o wiele krtsze ni pisane w jzykach wysokiego poziomu. Odpowiednio zdefiniowany zestaw makr moe take suy do wykrywania bdw w programie (uatwione
ledzenie programu, dziki informacjom na temat jego wykonywania).
Poznalimy ju konstrukcj makra . Jeszcze raz popatrzmy, jak wyglda ono w praktyce, biorc za przykad wykonanie pewnego typowego kodu w zalenoci od jakiego
warunku. Na szybko wymylmy sytuacj, w ktrej chcemy wywietli na ekranie komunikat o bdzie, jeli wynik zwrcony przez funkcj otwierajc plik jest niepoprawny.

Rozdzia 5. Macro Assembler

133

I tak, zapisany w typowy sposb kod miaby posta:


 ; w tym przykadzie parametry nas nie interesuj
 ; -1 oznacza tutaj kod bdu

!; jeli bd skok do etykiety Blad
 ; \ dalsza cz programu, wykonujca si
; / jeli nie ma bdu
!
 ; obsuga bdu

Z kolei w jzyku MASM taka operacja moe zosta zastpiona kodem:


 ; w tym przykadzie parametry nas nie interesuj
" ; -1 oznacza tutaj kod bdu
 ; \ dalsza cz programu, wykonujca si
; / jeli nie ma bdu

 ; obsuga bdu

Jak powstaj makra?


Makra w MASM to bloki tekstu, ktre mog by doczane w dowolnym momencie
kodu. Definicja makra nadaje mu nazw i opisuje, co dane makro ma robi z praktycznego punktu widzenia makro ma ogln posta typu:
#$%&'()*+, ; tutaj umie tre makra
%

Dla przykadu makro, ktrego celem jest wstawienie do kodu funkcji tzw. epilogu zwracajcego dan warto w rejestrze , moe mie posta:
(./(%&'( #$) #$)),
%

Wywoanie zdefiniowanego makra wyglda nastpujco (w przykadzie zwracamy ):


(./(

Umieszczenie powyszego kodu w programie powoduje, e analizujcy kod asembler


po napotkaniu tego wyraenia rozwinie je w nastpujcy kod:
 #$)),

a za warto
  zostanie podstawiona warto , dajc finaln wersj kodu:

),

Powyszy przykad przewija si w wielu programach rdowych Win32ASM, jakie


mona znale w internecie.

134

Win32ASM. Asembler w Windows

Najwaniejsze informacje o makrach


Pisanie makr oraz wykorzystanie moliwoci jzyka Macro Assembler s zwizane
z koniecznoci zapoznania si z najwaniejszymi makrami, symbolami oraz operatorami uywanymi do zapisu wyrae rnego typu. Zaczniemy od znakw o specjalnym znaczeniu.

Znaki specjalne
0

oznacza aktualn (tj. w danym momencie procesu asemblacji) warto


licznika okrelajcego adres biecej instrukcji; w praktyce mona traktowa
to jako symboliczny zapis adresu miejsca, w ktrym symbol ten wystpi.
1

symbol uywany podczas deklaracji danych; jego zastosowanie informuje


asembler, e zmienna zadeklarowana przy uyciu symbolu 1 nie ma wartoci
pocztkowej.
2

symbol uywany przy deklaracji etykiet oraz w nazwach przedefiniowanych


symboli (opisanych w nastpnym podrozdziale).
34

symbole uywane przy deklaracji zmiennych lub staych tekstowych oraz


podczas czenia wielu parametrw w jeden cig (traktowany jako jeden parametr).
56

symbole uywane przy odwoywaniu si do komrek pamici.

Zapis liczb


reprezentuje  dziesitn; z reguy nie trzeba dodawa przyrostka ,


chyba e zostanie zmieniony domylny system liczbowy (uywany przez
asembler w trakcie asemblacji).
78

reprezentuje  szesnastkow (heksadecymaln); przedrostek 7 dodaje


si w przypadku liczb rozpoczynajcych si od cyfr szesnastkowych &, !, ', , 
lub .
9

reprezentuje  dwjkow (binarn).

Przedefiniowane symbole i funkcje


2,

reprezentuje aktualn dat.

Rozdzia 5. Macro Assembler

135

2.

reprezentuje aktualny czas.


2:);

reprezentuje wersj programu Macro Assembler.


2'+)

reprezentuje nazw pliku poddawanego asemblacji.


2

reprezentuje pen nazw pliku poddawanego asemblacji.


2

dostarcza informacji o segmencie kodu.


2,

dostarcza informacji o segmencie danych.


2;,

dostarcza informacji o segmencie stosu.


2'+)*

dostarcza informacji o biecym (tzn. tym, w ktrym aktualnie uyty jest


symbol 2'+)*) segmencie.
Poniszy przykad pokazuje, w jaki sposb mona wykorzysta opisane symbole do wywietlania informacji diagnostycznych w trakcie kompilowania programu.
archiwum: \Win32ASM\Src\!Symbole\!Symbole.asm
; ===========================================================
; Opis
: Demonstracja wykorzystania rnych
;
funkcji wbudowanych w Macro Assembler
; ===========================================================
<=>; instrukcje 586
%&..'&; paski model pamici
; konwencja STDCALL
; sekcja kodu
,),; pocztek programu
),; powrt z procedury
?'@,A,B2,
?'@'#;A.B2.
?'@C);
A:);B2:);
?'@#$A'+)B2'+)
?'@#$DAB2
?'@*,+AB2
?'@*,-8A,B2,
?'@*,;,;+A;,B2;,
?'@*,,+-A'+)*B2'+)*
,),; tu zaczyna si program

136

Win32ASM. Asembler w Windows

A oto rezultat przykadowej asemblacji programu.


archiwum: \Win32ASM\Src\!Symbole\!Symbole.txt
E
FG%&%H%;
.$)#I)
,J"-9J
C);
(&K9##;9L$
&;;9*"-9 ;
,A,B7=M NM7
'#;A.B O  N
C);
A:);B> N
#$A'+)B"-9 ;
#$DAB"P%!
*,+AB .K.
*,-8A,B&.
*,;,;+A;,B&.
*,,+-A'+)*B .K.
&9-,-+$QR
$-$;#  

Operatory
Operatory matematyczne

  S
  

zwraca sum obu 


 .

  T
  

zwraca rnic obu 


 .

  
  

zwraca iloczyn obu 


 .

  M
  

zwraca iloraz obu 


 .
U
 

zwraca 
  ze znakiem zmienionym na przeciwny.

  %
  

zwraca reszt z dzielenia (funkcja %, funkcja %/) 


  przez

  .

Operatory logiczne

  &
  

zwraca iloczyn logiczny (funkcja &) obu 


 .

  (
  

zwraca sum logiczn (funkcja () obu 


 .

Rozdzia 5. Macro Assembler

137

.
  

zwraca negacj logiczn (funkcja .) 


 .

  K(
  

zwraca sum modulo (funkcja K(, inaczej K'/:() obu 


 .

Operatory przesuni

  @

zwraca warto powsta z przesunicia w lewo wartoci 


  zadan
 razy.

  @(

zwraca warto powsta z przesunicia w prawo wartoci 


  zadan
 razy.

Operatory porwna

  V
  

zwraca warto ,)+ (o wartoci ), jeli 


   jest rwne 
 ;
w przeciwnym przypadku zwraca warto E; (o wartoci 7).

  
  

zwraca warto ,)+ (o wartoci ), jeli 


   nie jest rwne

 ; w przeciwnym przypadku zwraca warto E; (o wartoci 7).

  W.
  

zwraca warto ,)+ (o wartoci ), jeli 


   jest wiksze od

 ; w przeciwnym przypadku zwraca warto E; (o wartoci 7).

  .
  

zwraca warto ,)+ (o wartoci ), jeli 


   jest mniejsze od

 ; w przeciwnym przypadku zwraca warto E; (o wartoci 7).

  W
  

zwraca warto ,)+ (o wartoci ), jeli 


   jest wiksze lub rwne

 ; w przeciwnym przypadku zwraca warto E; (o wartoci 7).

  
  

zwraca warto ,)+ (o wartoci ), jeli 


   jest mniejsze lub rwne

 ; w przeciwnym przypadku zwraca warto E; (o wartoci 7).

Operatory inne
  
 

powoduje, e 
  odnosi si do innego    ni domylny;   
moe by nazw rejestru, segmentu, grupy segmentw lub wyraeniem staym.

   55  66

zwraca adres bdcy sum adresu 


  i adresu  w strukturze lub
unii; w ten sposb mona odwoywa si take do struktur zagniedonych np.

     ; 
  moe by nazw rejestru lub zmiennej.

138

Win32ASM. Asembler w Windows


X X

powoduje, e   traktowany jest jako acuch tekstowy.


Y Y

powoduje, e   traktowany jest jako acuch tekstowy.


?
 

powoduje, e 
  bdce parametrem przekazywanym do makra
bdzie traktowane jako acuch tekstowy.
Z
  Z

powoduje zastpienie acucha Z


  Z wartoci 
 .
&(
 

zwraca adres 
 ; najczciej dotyczy zmiennych lokalnych.
.
 

zwraca adres (offset, przesunicie) 


 ; najczciej dotyczy zmiennych
globalnych.
[
 

zwraca rozmiar (w bajtach) 


 .

Makra zwizane z procesem asemblacji


Przyjrzymy si teraz bliej wszystkim waniejszym poleceniom, jakie mona wykorzysta w jzyku Macro Asembler. Na kocu tego rozdziau przedstawi plik OCMTQKPE,
w ktrym zawarem najczciej uywane makra, z powodzeniem moesz ich uy
w swoich programach, bez koniecznoci pisania od zera.

Makra o charakterze oglnym


Definicja rodzaju procesora
=7=>

pozwala wykorzystywa instrukcje procesora 8086 i koprocesora 8087;


ustawienie domylne.
=7=O

pozwala wykorzystywa instrukcje koprocesora 8087; ustawienie domylne.


=>

pozwala wykorzystywa instrukcje procesora 80186 i koprocesora 8087.


=>

pozwala wykorzystywa instrukcje procesora 80286 i koprocesora 80287;


nie pozwala na skorzystanie z instrukcji uprzywilejowanych (dotyczy trybu
chronionego).
=>\

pozwala wykorzystywa instrukcje procesora 80286 i koprocesora 80287;


pozwala na uycie instrukcji uprzywilejowanych (dotyczy trybu chronionego).

Rozdzia 5. Macro Assembler

139

=O

pozwala wykorzystywa instrukcje koprocesora 80287.


=>

pozwala wykorzystywa instrukcje procesora 80386 i koprocesora 80387; nie


pozwala na skorzystanie z instrukcji uprzywilejowanych (dotyczy trybu chronionego).
=>\

pozwala wykorzystywa instrukcje procesora 80386 i koprocesora 80387;


pozwala na uycie instrukcji uprzywilejowanych (dotyczy trybu chronionego).
=O

pozwala wykorzystywa instrukcje koprocesora 80387.


N=>

pozwala wykorzystywa instrukcje procesora 80486 (koprocesor jest


wbudowany w procesor); nie pozwala skorzystanie z instrukcji uprzywilejowanych
(dotyczy trybu chronionego).
N=>\

pozwala wykorzystywa instrukcje procesora 80486 (koprocesor jest


wbudowany w procesor); pozwala na uycie instrukcji uprzywilejowanych
(dotyczy trybu chronionego).
=O

nie pozwala wykorzystywa instrukcji koprocesora.

Komentarze
'%%. 

55 66
55 66
55 66),)

powoduje, e pierwsza linia (z wyraeniem '%%.  



55 66) oraz
wszystkie inne, w ktrych wystpuje  

bd traktowane przez asembler
jako komentarz.
] 

powoduje, e   traktowany bdzie jako komentarz.


]] 

powoduje, e   traktowany bdzie jako komentarz tylko w definicji


makra i nie bdzie widoczny na listingu (po rozwiniciu makra).

Listingi
.. 

definiuje   listingu programu.


/!..  

lub
/!..  

definiuje    listingu.

140

Win32ASM. Asembler w Windows

Wywietlanie informacji (w trakcie asemblacji)


'@! 

powoduje wywietlenie !  w trakcie asemblacji.


?'@! 

powoduje wywietlenie !  w trakcie asemblacji; znak ? powoduje,


e wszystkie makra tekstowe uyte w !  zostan rozwinite.
?/.! 

powoduje wywietlenie !  w trakcie asemblacji.

Doczanie kodu rdowego umieszczonego w innym pliku


'/"#

powoduje, e w miejscu wystpienia zapisu '/ "# zostanie


doczony tekst zapisany w pliku "#; "# powinna by objta par
nawiasw ostrych 34, jeli w nazwie wystpuje ktrykolwiek ze znakw: H (lewy
ukonik), ] (rednik), 4 (wikszy ni zero, nawias ostry zamykajcy), 3 (mniejszy
ni zero, nawias ostry otwierajcy), Y (apostrof), J (znak cudzysowia
w standardzie ASCII; dokadniej: znak cala).

Doczanie zewntrznej biblioteki w trakcie budowania programu


'/!"#$ 

powoduje, e w trakcie czenia (budowania) pliku wynikowego program


czcy doczy bibliotek zawart w pliku "#$ ; "#$ 
powinna by objta par nawiasw ostrych 34, jeli w nazwie wystpuje
ktrykolwiek ze znakw: H (lewy ukonik), ] (rednik), 4 (wikszy ni zero,
nawias ostry zamykajcy), 3 (mniejszy ni zero, nawias ostry otwierajcy), Y
(apostrof), J (znak cudzysowia w standardzie ASCII; dokadniej: znak cala).

Przerywanie procesu asemblacji


Konstrukcja .ERR
((55! 66

powoduje wygenerowanie bdu i przerwanie asemblacji oraz ewentualnie


wywietlenie ! ; !  powinien by objty par nawiasw ostrych
34.

Konstrukcja .ERR2
(( 55! 66

powoduje wygenerowanie bdu i przerwanie asemblacji oraz ewentualnie


wywietlenie ! ; !  powinien by objty par nawiasw ostrych
34; w przeciwiestwie do ((, bd generowany bdzie przy kadym przebiegu
asemblera (opcja \.. musi by rwna wartoci .(/).

Rozdzia 5. Macro Assembler

141

Konstrukcja .ERRB
((!%  55! 66

powoduje wygenerowanie bdu i przerwanie asemblacji oraz ewentualnie


wywietlenie ! , jeli %   jest pusty; %   i !  musz by
objte par nawiasw ostrych 34.

Konstrukcja .ERRNB
((!%  55! 66

powoduje wygenerowanie bdu i przerwanie asemblacji oraz ewentualnie


wywietlenie ! , jeli %   nie jest pusty; %   i !  musz
by objte par nawiasw ostrych 34.

Konstrukcja .ERRDEF
(("#55! 66

powoduje wygenerowanie bdu i przerwanie asemblacji oraz ewentualnie


wywietlenie ! , jeli "# bya ju wczeniej zdefiniowana jako
zmienna, etykieta lub symbol; !  powinien by objty par nawiasw
ostrych 34.

Konstrukcja .ERRNDEF
(("#55! 66

powoduje wygenerowanie bdu i przerwanie asemblacji oraz ewentualnie


wywietlenie ! , jeli "# nie bya wczeniej zdefiniowana jako
zmienna, etykieta lub symbol; !  powinien by objty par nawiasw
ostrych 34.

Konstrukcja .ERRDIF
((%  %  55! 66

powoduje wygenerowanie bdu i przerwanie asemblacji oraz ewentualnie


wywietlenie ! , jeli %   nie jest identyczny z %   ; %  
i %   musz by objte par nawiasw ostrych 34; mae i wielkie litery
s rozrniane podczas operacji porwnania.

Konstrukcja .ERRDIFI
((%  %  55! 66

powoduje wygenerowanie bdu i przerwanie asemblacji oraz ewentualnie


wywietlenie ! , jeli %   nie jest identyczny z %   ; %  
i %   musz by objte par nawiasw ostrych 34; mae i wielkie litery
nie s rozrniane podczas operacji porwnania.

Konstrukcja .ERRIDN
((%  %  55! 66

powoduje wygenerowanie bdu i przerwanie asemblacji oraz ewentualnie


wywietlenie ! , jeli %   jest identyczny z %   ; %  

142

Win32ASM. Asembler w Windows

i %   musz by objte par nawiasw ostrych 34; mae i wielkie litery


s rozrniane podczas operacji porwnania.

Konstrukcja .ERRIDNI
((%  %  55! 66

powoduje wygenerowanie bdu i przerwanie asemblacji oraz ewentualnie


wywietlenie ! , jeli %   jest identyczny z %   ; %  
i %   musz by objte par nawiasw ostrych 34; mae i wielkie litery
nie s rozrniane podczas operacji porwnania.

Konstrukcja .ERRE
((
  55! 66

powoduje wygenerowanie bdu i przerwanie asemblacji oraz ewentualnie


wywietlenie ! , jeli 
  zwraca warto &; !  musi by
objty par nawiasw ostrych 34.

Konstrukcja .ERRNZ
(([
  55! 66

powoduje wygenerowanie bdu i przerwanie asemblacji oraz ewentualnie


wywietlenie ! , jeli 
  zwraca warto .(/; !  musi by
objty par nawiasw ostrych 34.

Sterowanie przebiegiem asemblacji


Etykiety i skoki
W.%  

powoduje, e kolejn przetwarzan przez asembler lini bdzie linia,


w ktrej umieszczono zapis %   (tj. przed etykiet zawsze wystpuje
dwukropek); makroinstrukcja W. moe by wykorzystywana tylko i wycznie
wewntrz blokw: %&'(, (, (', (\&., C@.
%  

definiuje %  ; do %   mona odwoywa si w innych miejscach


programu za pomoc konstrukcji W. %  .

Ptle FOR i IRP


(
 
55(V^& ' 66()*55)*66556655)*"66+
,,,-
.
%

lub rwnowane:
(\
 
55(V^& ' 66()*55)*66556655)*"66+
,,,-
.
%

gdzie:

Rozdzia 5. Macro Assembler


(+9(\

okrelaj pocztek ptli.



 
,55(V^,& ' 66

oznacza 
 
, ktremu mona przypisa warto & ' /,
()*55)*66556655)*"66+

oznaczaj kolejne )* , na ktrych bdzie wykonana zadana -


.
w kolejnych obiegach ptli.
%

oznacza koniec bloku.

Ptle FORC i IRPC


('
,,,
 
()*+-
.
%

lub rwnowane:
(\'
,,,
 
()*+-
.
%

gdzie:
('+9(\'

okrelaj pocztek ptli.



 
()*+-
.

oznaczaj 
 
, ktremu bdzie przypisana kolejna litera z )*;
na kadej z liter bdzie wykonana zadana -
..
%

oznacza koniec bloku.

Ptla REPEAT i REPT


(\&.,
,,,!
%

lub rwnowane:
(\.,
,,,!
%

gdzie:
(\&.,+9(\.,

okrelaj pocztek ptli oraz  powtrze generowanego ! .


!

okrela ! powtarzany zadan  razy.


%

oznacza koniec bloku.

143

144

Win32ASM. Asembler w Windows

Ptla WHILE
C@,
 
,,,-
.
%

gdzie:
C@,
 

okrelaj pocztek ptli, w ktrej ! bdzie przetwarzany tak dugo, jak


dugo 
  bdzie zwracao warto prawdziw.
!

okrela ! asemblowany (w kko) tak dugo, jak dugo 


  bdzie
zwracao warto prawdziw.
%

oznacza koniec bloku.

Asemblacja warunkowa
Asemblacja warunkowa pozwala na asemblacj wybranych fragmentw kodu w zalenoci od pewnych parametrw.

Konstrukcja IF

 
,,,
 
55
 
,,,
  66
_
55
 "
,,,
  "66
55
,,,
   66


gdzie:

 
,,,
 

oznacza pocztek konstrukcji 


  zostanie poddane asemblacji po
wystpieniu okrelonego 
 .
55
 
,,,
  66
_
55
 "
,,,
  "66

oznacza kolejne bloki (


  , 
  0, , 
  ") wykonywane,
jeli spenione s odpowiednio:  
 ,  
 0, , 

 ", gdzie  moe przyjmowa wartoci:
 

jeli (uproszczona wersja zapisu ),


 ! jeli jest puste,

Rozdzia 5. Macro Assembler


 

145

jeli jest zdefiniowane,

  jeli nastpne wyraenie jest inne (mae i wielkie litery s









rozrniane),
 jeli nastpne wyraenie jest inne (mae i wielkie litery nie s
rozrniane),
 jeli jest rwne,
 jeli nastpne wyraenie jest identyczne (mae i wielkie litery
s rozrniane),
 jeli nastpne wyraenie jest identyczne (mae i wielkie litery
nie s rozrniane),
! jeli jest niepuste,
 jeli nie jest zdefiniowane.

55
,,,
   66

okrela 
   wykonywane tylko wtedy, jeli aden z powyszych
warunkw, tj.  
 ,  
 0, ,  
 ",
nie zosta speniony.


koczy konstrukcj.

Konstrukcja IFB
!%  
,,,
 
_

powoduje asemblacj 
 , jeli %   jest pusty; skadnia jest
identyczna jak w konstrukcji .

Konstrukcja IFDEF
%  
,,,
 
_

powoduje asemblacj 
 , jeli %   by wczeniej zdefiniowany
jako symbol, zmienna lub etykieta; skadnia jest identyczna jak w konstrukcji .

Konstrukcja IFE
%  
,,,
 
_

powoduje asemblacj 
 , jeli %   jest rwny 7 (warto E;);
skadnia jest identyczna jak w konstrukcji .

146

Win32ASM. Asembler w Windows

Konstrukcja IFDIF
%  %  
,,,
 
_

powoduje asemblacj 
 , jeli %   i %   s rne (mae
i wielkie litery s rozrniane); skadnia jest identyczna jak w konstrukcji .

Konstrukcja IFDIFI
%  %  
,,,
 
_

powoduje asemblacj 
 , jeli %   i %   s rne (mae
i wielkie litery nie s rozrniane); skadnia jest identyczna jak w konstrukcji .

Konstrukcja IFIDN
%  %  
,,,
 
_

powoduje asemblacj 
 , jeli %   i %   s identyczne (mae
i wielkie litery s rozrniane); skadnia jest identyczna jak w konstrukcji .

Konstrukcja IFIDNI
%  %  
,,,
 
_

powoduje asemblacj 
 , jeli %   i %   s identyczne (mae
i wielkie litery nie s rozrniane); skadnia jest identyczna jak w konstrukcji .

Konstrukcja IFNB
!%  
,,,
 
_

powoduje asemblacj 
 , jeli %   jest niepusty; skadnia jest
identyczna jak w konstrukcji .

Konstrukcja IFNDEF
%  
,,,
 
_

powoduje asemblacj 
 , jeli %   nie by wczeniej zdefiniowany;
skadnia jest identyczna jak w konstrukcji .

Rozdzia 5. Macro Assembler

147

Konstrukcja IF2
 
 
,,,
 
_

konstrukcja warunkowa  ma identyczn skadni jak ; rnica polega


na tym, e w przypadku konstrukcji  asembler interpretuje 
  tylko raz,
natomiast w przypadku  przy kadym przebiegu (opcja \..
musi by rwna wartoci .(/).

Konstrukcja ELSEIF2
 
 
,,,
 
_

konstrukcja warunkowa  ma identyczn skadni jak  ;


w przypadku konstrukcji  asembler interpretuje 
  tylko raz,
natomiast w przypadku  przy kadym przebiegu (opcja \..
musi by rwna wartoci .(/).

Operatory zwizane z programowaniem


Operatory porwna matematycznych

  
  

znaczenie: czy 
   jest rwne 
 ?

  "
  

znaczenie: czy 
   nie jest rwne 
 ?

  4
  

znaczenie: czy 
   jest wiksze od 
 ?

  4
  

znaczenie: czy 
   jest wiksze lub rwne 
 ?

  3
  

znaczenie: czy 
   jest mniejsze od 
 ?

  3
  

znaczenie: czy 
   jest mniejsze lub rwne 
 ?

Operatory porwna logicznych



  ZZ
  

znaczenie: czy 
   i 
   s prawdziwe?

  ^^
  

znaczenie: czy 
   lub 
   s prawdziwe?

148

Win32ASM. Asembler w Windows



  &
  

znaczenie: czy iloczyn logiczny 


  i 
  jest prawdziwy?
"
 

znaczenie: czy przeciwiestwo 


  jest poprawne?; negacja logiczna.
'&((P1

znaczenie: czy jest ustawiony znacznik przeniesienia ' w rejestrze


znacznikw &W?
:(C1

znaczenie: czy jest ustawiony znacznik nadmiaru  w rejestrze znacznikw


&W?
\&(.P1

znaczenie: czy jest ustawiony znacznik przepenienia \ w rejestrze


znacznikw &W?
\&(.P1

znaczenie: czy jest ustawiony znacznik znaku  w rejestrze znacznikw


&W?
[(1

znaczenie: czy jest ustawiony znacznik zera [ w rejestrze znacznikw


&W?

Podzia programu na sekcje (segmenty)


Deklaracja sekcji (segmentw)
'55"#66

okrela pocztek sekcji (segmentu) kodu; moe wystpowa wielokrotnie


w treci programu; istnieje moliwo nadania tej sekcji programu wybranej
"# ; domyln nazw dla modelu &. jest .K..
&.&

okrela pocztek sekcji (segmentu) danych zainicjowanych (z wartociami


pocztkowymi, z wartociami znanymi w momencie asemblacji); moe
wystpowa wielokrotnie w treci programu; nazw tej sekcji dla modelu
&. jest &.&.
&.&1

okrela pocztek sekcji (segmentu) danych niezainicjowanych (bez wartoci


pocztkowych, wartoci nie s znane w momencie asemblacji); moe wystpowa
wielokrotnie w treci programu; nazw tej sekcji dla modelu &. jest !.
'.

okrela pocztek sekcji (segmentu) danych zainicjowanych (z wartociami


pocztkowymi, z wartociami znanymi w momencie asemblacji); moe
wystpowa wielokrotnie w treci programu; sekcja ta posiada bdzie atrybut
tylko do odczytu; nazw tej sekcji dla modelu &. jest '..

Rozdzia 5. Macro Assembler

149

Sygnalizacja koca moduu, segmentu oraz pocztku programu




okrela koniec biecego moduu.


%  

okrela pocztek programu jako tego miejsca (tej linii kodu) w programie,
w ktrym wystpuje deklaracja %   ; typowo uywa si zapisu  
.
"#

okrela koniec segmentu o podanej "# .

Inne konstrukcje dotyczce sekcji (segmentw)


&\@&

ustawia segmenty w kolejnoci alfabetycznej.


V

ustawia segmenty w kolejnoci wystpowania w kodzie; ustawienie


domylne.
1
W(/\  55  66556655  "66

dodaje zadane segmenty   ,   , ,   " do 1


 .
&/%2 . 
"#552 . 
"#665566552 . 
""#66

pozwala kontrolowa bdy wynikajce z przypisania 2 . 



nieodpowiednich wartoci; uycie &/% powoduje, e asembler bdzie
kontrolowa wartoci przypisane danym 2 . 
 po czym, w przypadku
wykrycia prby przypisania im niepoprawnej wartoci, zgosi bd; istnieje
moliwo cakowitego zabronienia uycia danych 2 . 
3# przy uyciu
konstrukcji:
&/%2 . 
(((552 . 
(((665566552 . 
"(((66

a w celu wyczenia kontroli wartoci przypisywanej 2 . 


 naley uy
nastpujcego zapisu:
&/%2 . 
.@W552 . 
.@W665566552 . 
".@W66

Typowe konstrukcje
Definicja symboli (staych) w programie
"#
 

definicja symbolu "#; definicja moe by wielokrotnie zmieniana.


"#V/
 

definicja symbolu "# i przypisanie mu wartoci liczbowej 


  ;
definicja nie moe by zmieniana.
"#V/3 4

definicja symbolu "# i przypisanie mu wartoci tekstowej  ; definicja


moe by zmieniana.

150

Win32ASM. Asembler w Windows


"#.K.V/55 66

definicja symbolu "# i przypisanie mu wartoci  ;   moe by


acuchem tekstowym, sta poprzedzan znakiem ? lub acuchem tekstowym
zwracanym przez makro.
"#[.( 

powoduje przypisanie symbolowi "# wartoci bdcej dugoci zadanego


 .

Definicja etykiety na poziomie programu


%  

definiuje %  ; do %   mona odwoywa si w innych miejscach


programu za pomoc instrukcji zmieniajcych bieg programu (rozkazy skokw,
ptli, wywoania procedur).
%  &! 

definiuje %   o zadanym   ; do %   mona odwoywa si


w innych miejscach programu za pomoc instrukcji zmieniajcych bieg programu
(rozkazy skokw, ptli, wywoania procedur).

Ptle
Ptla .REPEAT .UNTIL
(\&.
,,,,,!
/.
 

powoduje wykonywanie zadanego !  po uruchomieniu programu tak


dugo, a zostanie speniony zadany 
 .

Ptla .REPEAT .UNTILCXZ


(\&.
,,,,,!
/.55
 66

powoduje wykonywanie zadanego !  po uruchomieniu programu tak dugo,


a warto rejestru 'K przyjmie warto 7 i ewentualnie zostanie speniony
dodatkowy 
 .

Ptla .WHILE
C@
 
,,,,,!
C

powoduje wykonywanie zadanego !  po uruchomieniu programu tak dugo,


jak dugo speniony jest zadany 
 .

Rozdzia 5. Macro Assembler

151

Przerywanie ptli za pomoc konstrukcji .BREAK


!(&`55 
 66

przerywa wykonywanie ptli C@ lub (\&.; moliwe jest przerwanie


po wystpieniu okrelonego 
 .

Kontynuacja ptli za pomoc konstrukcji .CONTINUE


'./55 
 66

kontynuuje wykonywanie ptli C@ lub (\&. od jej pocztku; moliwe


jest wykonanie skoku po wystpieniu okrelonego 
 .

Wyraenie warunkowe

 
,,,
 
55 
 
,,,
  66
_
55 
 "
,,,
  "66
55 
,,,
  66

*#

 
,,,
 

oznacza pocztek konstrukcji 


  zostanie wykonane po spenieniu
okrelonego 
 .
55 
 
,,,
  66
_
55 
 "
,,,
  "66

oznacza kolejne bloki (


  , 
  0, , 
  ") wykonywane,
jeli spenione s odpowiednie 
 , 
 0, , 
 ".
55 
,,,
  66

okrela 
  wykonywane tylko wtedy, jeli aden z powyszych
warunkw, tj. 
 , 
 , , 
 " nie zosta speniony.


koczy konstrukcj.

Operacje na acuchach
"#'&..(55 55 665566

czy kilka acuchw (operacja konkatenacji) w jedn cao; czone


acuchy mog by staymi poprzedzanymi znakiem ? lub acuchami
tekstowymi zwracanymi przez makra.

152

Win32ASM. Asembler w Windows


"#.(55 .66  

wyszukuje pierwsze wystpienie acucha tekstowego   w acuchu


 ; istnieje moliwo podania  ., od ktrej bdzie rozpoczyna si
przeszukiwanie; acuchy mog by staymi poprzedzanymi znakiem ? lub
acuchami tekstowymi zwracanymi przez makra.

Deklaracja danych
Deklaracja danych w rnych sekcjach programu
(gwnie .DATA i .DATA?)
!

deklaracja danej o rozmiarze 8 bitw dana typu !P..


C

deklaracja danej o rozmiarze 16 bitw dana typu C(.




deklaracja danej o rozmiarze 32 bitw dana typu C( (inaczej /!


C().


deklaracja danej o rozmiarze 48 bitw dana typu C( (inaczej &(C().


V

deklaracja danej o rozmiarze 64 bitw dana typu VC( (inaczej V/&


C().
.

deklaracja danej o rozmiarze 80 bitw dana typu .!P. (inaczej .!P.).

Definiowanie struktur
"#.(/'
,,,& 
.3
"#

lub
"#.(/'.
,,,& 
.3
"#

gdzie:
"#.(/'+9"#.(/'.

okrela pocztek definicji struktury o podanej "# .


& 
.3

definiuje czci skadowe struktury pola o zadanym typie (!, C, inne
struktury, itd.).
"#

okrela koniec struktury o podanej "# .

Rozdzia 5. Macro Assembler

153

Definiowanie unii
"#/
,,,& 
.3
"#

gdzie:
"#/

okrela pocztek definicji unii o podanej "# .


& 
.3

definiuje czci skadowe unii.


"#

okrela koniec unii o podanej "# ; w przypadku zagniedonych blokw


/ wystarczy pojedynczy zapis "# .

Deklaracja nowych typw


"#.P\ 

definiuje nowy typ o podanej "# , ktry jest jednoznaczny z   .

Deklaracja zmiennych lokalnych w procedurach (funkcjach)


'&4 !P.

deklaracja 4 . 8-bitowej.


'&4 !P.

deklaracja 4 . 8-bitowej ze znakiem.


'&4 C(

deklaracja 4 . 16-bitowej.


'&4 C(

deklaracja 4 . 16-bitowej ze znakiem.


'&4 C(

deklaracja 4 . 32-bitowej.


'&4 C(

deklaracja 4 . 32-bitowej ze znakiem.


'&4 C(

deklaracja 4 . 48-bitowej.


'&4 VC(

deklaracja 4 . 64-bitowej.


'&4 .!P.

deklaracja 4 . 80-bitowej.

154

Win32ASM. Asembler w Windows

Inne operacje
&W55
'566

powoduje, e adres pierwszej (nastpnej po wystpieniu konstrukcji &W)


zadeklarowanej zmiennej bdzie wyrwnany do wielokrotnoci 
'.
:

powoduje, e adres pierwszej (nastpnej po wystpieniu konstrukcji :)


zadeklarowanej zmiennej lub uytej instrukcji bdzie wyrwnany do adresu
parzystego.

Procedury i funkcje
Deklaracja procedury (funkcji) PROC i ENDP
"#\('55&66556 66554
6655
6655
66556655
"66
55/2 . 
3#6655
 
554  6666_
,,7
"#\

gdzie:
"#\('55
6655
66556655
"6655/2 . 
3#66

rozpoczyna definicj procedury o podanej "# ; procedura moe by


wywoywana z parametrami (
, 
, , 
"); procedura moe by
wywoywana w programie poleceniem :` # lub '& #; mona
okreli, ktre rejestry s niszczone przez procedur, tak e assembler
automatycznie zadba o zachowanie ich w prologu i przywrcenie w epilogu
procedury (/ 2 . 
3#).
7

kod procedury (z reguy koczcy si rozkazem (.).


"#\

koczy definicj procedury o zadanej "# .

Wywoanie procedury (funkcji) INVOKE


:`"#55
6655
66556655
"66

powoduje wywoanie procedury o podanej "# ; istnieje moliwo


przekazywania parametrw 
, 
, , 
" do procedury (funkcji); parametry
te zostan umieszczone na stosie lub w rejestrach w kolejnoci wynikajcej
z przyjtego modelu wywoywania procedur; parametrami mog by rejestry,
adresy pamici i wyraenia; asembler jest w stanie sprawdzi, czy liczba
parametrw i ich typ zgadza si z parametrami zadeklarowanymi w ciele
procedury.

Rozdzia 5. Macro Assembler

155

Deklaracja prototypu procedury (funkcji) PROTO


"#\(.55
 
66_

prototyp procedury (funkcji); informuje asembler o istnieniu procedury


(funkcji) o zadanej "# i atrybutach.

Tworzenie wasnych makr


Konstrukcja MACRO
%&'("#55
 
6655
 
66556655
 
"66
,,,! 8

%

gdzie:
%&'("#55
 
6655
 
66556655
 
"66

rozpoczyna definicj makra o podanej "# ; makro moe by wywoywane


z parametrami (
 
, 
 
, , 
 
"); w miejscu wywoania makra
zostanie ono rozwinite zgodnie z ! 8
.
%

koczy definicj makra lub blok (\&..

Konstrukcja EXITM
K.%55
'566

powoduje zakoczenie przetwarzania biecego bloku (rozpocztego


konstrukcj %&'( lub (\&.); przetwarzanie rozpocznie si od nastpnej
instrukcji po zakoczonym wanie bloku; istnieje moliwo zwrcenia
zadanej 
' do wyraenia, ktre spowodowao wywoanie makra.

You might also like