Professional Documents
Culture Documents
Win32ASM. Asembler W Windows
Win32ASM. Asembler W Windows
PRZYKADOWY ROZDZIA
SPIS TRECI
KATALOG KSIEK
KATALOG ONLINE
Win32ASM.
Asembler w Windows
Autor: Adam Baszczyk
ISBN: 83-7361-022-7
Format: B5, stron: 360
TWJ KOSZYK
DODAJ DO KOSZYKA
CENNIK I INFORMACJE
ZAMW INFORMACJE
O NOWOCIACH
ZAMW CENNIK
CZYTELNIA
FRAGMENTY KSIEK ONLINE
Wydawnictwo Helion
ul. Chopina 6
44-100 Gliwice
tel. (32)230-98-63
e-mail: helion@helion.pl
Spis treci
Od Autora.......................................................................................... 9
Wstp ............................................................................................. 11
Rozdzia 1. Zanim zaczniemy na powanie.......................................................... 15
Platform SDK, MSDN ......................................................................................................15
Pakiet Masm32..................................................................................................................16
Narzdziownia...................................................................................................................17
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
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 5.
Macro Assembler
Niniejsza cz ksiki powicona jest cakowicie przyblieniu podstawowych i najwaniejszych z punktu widzenia programisty informacji na temat jzyka Macro Assembler.
132
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.
133
Dla przykadu makro, ktrego celem jest wstawienie do kodu funkcji tzw. epilogu zwracajcego dan warto w rejestrze , moe mie posta:
(./(%&'(#$)#$)),
%
a za warto
zostanie podstawiona warto , dajc finaln wersj kodu:
),
134
Znaki specjalne
0
Zapis liczb
135
2.
136
Operatory
Operatory matematyczne
S
zwraca
ze znakiem zmienionym na przeciwny.
%
Operatory logiczne
&
137
.
Operatory przesuni
@
Operatory porwna
V
Operatory inne
powoduje, e
odnosi si do innego
ni domylny;
moe by nazw rejestru, segmentu, grupy segmentw lub wyraeniem staym.
55
66
138
powoduje, e
bdce parametrem przekazywanym do makra
bdzie traktowane jako acuch tekstowy.
Z
Z
zwraca adres
; najczciej dotyczy zmiennych lokalnych.
.
139
=O
Komentarze
'%%.
5566
5566
5566),)
Listingi
..
lub
/!..
140
Konstrukcja .ERR2
((55!
66
141
Konstrukcja .ERRB
((!%
55!
66
Konstrukcja .ERRNB
((!%
55!
66
Konstrukcja .ERRDEF
(("#55!
66
Konstrukcja .ERRNDEF
(("#55!
66
Konstrukcja .ERRDIF
((%
%
55!
66
Konstrukcja .ERRDIFI
((%
%
55!
66
Konstrukcja .ERRIDN
((%
%
55!
66
142
Konstrukcja .ERRIDNI
((%
%
55!
66
Konstrukcja .ERRE
((
55!
66
Konstrukcja .ERRNZ
(([
55!
66
lub rwnowane:
(\
55(V^& '
66()*55)*66556655)*"66+
,,,-
.
%
gdzie:
oznacza
, ktremu mona przypisa warto & '
/,
()*55)*66556655)*"66+
lub rwnowane:
(\'
,,,
()*+-
.
%
gdzie:
('+9(\'
oznaczaj
, ktremu bdzie przypisana kolejna litera z )*;
na kadej z liter bdzie wykonana zadana -
..
%
lub rwnowane:
(\.,
,,,!
%
gdzie:
(\&.,+9(\.,
143
144
Ptla WHILE
C@,
,,,-
.
%
gdzie:
C@,
Asemblacja warunkowa
Asemblacja warunkowa pozwala na asemblacj wybranych fragmentw kodu w zalenoci od pewnych parametrw.
Konstrukcja IF
,,,
55
,,,
66
_
55
"
,,,
"66
55
,,,
66
gdzie:
,,,
145
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
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 .
147
Konstrukcja IF2
,,,
_
Konstrukcja ELSEIF2
,,,
_
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
?
znaczenie: czy
i
s prawdziwe?
^^
znaczenie: czy
lub
s prawdziwe?
148
149
okrela pocztek programu jako tego miejsca (tej linii kodu) w programie,
w ktrym wystpuje deklaracja % ; typowo uywa si zapisu
.
"#
Typowe konstrukcje
Definicja symboli (staych) w programie
"#
150
Ptle
Ptla .REPEAT .UNTIL
(\&.
,,,,,!
/.
Ptla .WHILE
C@
,,,,,!
C
151
Wyraenie warunkowe
,,,
55
,,,
66
_
55
"
,,,
"66
55
,,,
66
*#
,,,
okrela
wykonywane tylko wtedy, jeli aden z powyszych
warunkw, tj.
,
, ,
" nie zosta speniony.
koczy konstrukcj.
Operacje na acuchach
"#'&..(5555665566
152
Deklaracja danych
Deklaracja danych w rnych sekcjach programu
(gwnie .DATA i .DATA?)
!
Definiowanie struktur
"#.(/'
,,,&
.3
"#
lub
"#.(/'.
,,,&
.3
"#
gdzie:
"#.(/'+9"#.(/'.
definiuje czci skadowe struktury pola o zadanym typie (!, C, inne
struktury, itd.).
"#
153
Definiowanie unii
"#/
,,,&
.3
"#
gdzie:
"#/
154
Inne operacje
&W55
'566
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
155
gdzie:
%&'("#55
6655
66556655
"66
Konstrukcja EXITM
K.%55
'566