Asembler. Leksykon kieszonkowy - Helion
Transcript of Asembler. Leksykon kieszonkowy - Helion
Wszelkie prawa zastrzeżone. Nieautoryzowane rozpowszechnianie całości lub fragmentu niniejszej publikacji w jakiejkolwiek postaci jest zabronione. Wykonywanie kopii metodą kserograficzną, fotograficzną, a także kopiowanie książki na nośniku filmowym, magnetycznym lub innym powoduje naruszenie praw autorskich niniejszej publikacji.
Wszystkie znaki występujące w tekście są zastrzeżonymi znakami firmowymi bądź towarowymi ich właścicieli.
Autor oraz Wydawnictwo HELION dołożyli wszelkich starań, by zawarte w tej książce informacje były kompletne i rzetelne. Nie biorą jednak żadnej odpowiedzialności ani za ich wykorzystanie, ani za związane z tym ewentualne naruszenie praw patentowych lub autorskich. Autor oraz Wydawnictwo HELION nie ponoszą również żadnej odpowiedzialności za ewentualne szkody wynikłe z wykorzystania informacji zawartych w książce.
Redaktor prowadzący: Michał Mrowiec
Projekt okładki: Maciek Pasek
Wydawnictwo HELION ul. Kościuszki 1c, 44-100 GLIWICE tel. 32 231 22 19, 32 230 98 63 e-mail: [email protected] WWW: http://helion.pl (księgarnia internetowa, katalog książek)
Drogi Czytelniku! Jeżeli chcesz ocenić tę książkę, zajrzyj pod adres http://helion.pl/user/opinie?asemlkMożesz tam wpisać swoje uwagi, spostrzeżenia, recenzję.
Kody źródłowe wybranych przykładów dostępne są pod adresem:ftp://ftp.helion.pl/przyklady/asemlk.zip
ISBN: 978-83-246-4347-9
Copyright © Helion 2012
Printed in Poland.
• Kup książkę• Poleć książkę • Oceń książkę
• Księgarnia internetowa• Lubię to! » Nasza społeczność
3
Spis tre�ci
1. Podstawowe informacje 71.1. S�owem wst�pu 71.2. Architektura x86 — podstawowe informacje 101.3. Budowa programu dla podsystemu DOS (16-bitowego) 131.4. Budowa programu dla systemu Windows (32-bitowego) 15
2. Podstawowe instrukcje procesora 182.1. Instrukcja kopiowania i instrukcje arytmetyczne 182.2. Instrukcje logiczne i przesuni�� bitowych 202.3. Instrukcje wywo�ania procedury i powrotu 262.4. Instrukcja porównania i instrukcje skoku 292.5. Instrukcje do operacji na �a�cuchach znaków 30
3. Makroinstrukcje 353.1. Makroinstrukcje kontroli przep�ywu 353.2. Makroinstrukcje do tworzenia p�tli 36
4. Praca z danymi 394.1. Adresowanie i wska�niki 394.2. Zmienne i sta�e 414.3. Praca ze strukturami 42
5. Programowanie w systemie Windows 455.1. Konsola w systemie Windows 455.2. Proste okno dialogowe 475.3. Odczyt myszki i klawiatury 515.4. Operacje na plikach i alokacja bloków pami�ci 525.5. Tworzenie menu 555.6. Kontrolka przycisku (Button) 565.7. Kontrolka pola tekstowego (Edit) 575.8. Kontrolka wielokrotnego wyboru (CheckBox) 60
4 � Asembler. Leksykon kieszonkowy
5.9. Kontrolka pojedynczego wyboru (RadioButton) 625.10. Kontrolka listy rozwijanej (ComboBox) 625.11. Kontrolka listy (ListBox) 645.12. Kontrolka paska post�pu (ProgressBar) 655.13. Kontrolka widoku drzewa (TreeView) 665.14. Kontrolka widoku listy (ListView) 685.15. Kontrolka suwaka (TrackBar) 705.16. Kontrolka podpowiedzi (Tooltip) 715.17. Kontrolka do wprowadzania adresu IP (IPAddress) 785.18. Kontrolka tekstu o bogatym formatowaniu (RichEdit) 835.19. Kontrolki w nowym stylu (pliki .manifest) 855.20. Podpi�cia do systemu Windows (Hooks) 875.21. Ekran powitalny (Splashscreen) 895.22. Ikona w zasobniku systemowym (Tray) 915.23. Podmiana procedury obs�ugi okna 935.24. Programowanie aplikacji wielow�tkowych 955.25. Tworzenie bibliotek DLL 975.26. Pliki odwzorowane w pami�ci 995.27. Pobieranie adresu IP lokalnego komputera 99
6. Dodatkowe zestawy instrukcji 1026.1. Korzystanie z instrukcji koprocesora (FPU) 1026.2. Korzystanie z rozszerze� MMX i SSE 1106.3. Nowe rozszerzenie — Advanced Vector Extensions (AVX) 118
7. Asembler 64-bitowy (x86-64) 1207.1. Wst�p do Asemblera dla architektury 64-bitowej 120
8. Opis rozkazów procesorów z rodziny 80x86 1258.1. Instrukcje na liter� A 1258.2. Instrukcje na liter� B 1288.3. Instrukcje na liter� C 1328.4. Instrukcje na liter� D 1378.5. Instrukcje na liter� E 1398.6. Instrukcje na liter� H 1398.7. Instrukcje na liter� I 1408.8. Instrukcje na liter� J 1438.9. Instrukcje na liter� L 1448.10. Instrukcje na liter� M 1488.11. Instrukcje na liter� N 151
Spis tre�ci � 5
8.12. Instrukcje na liter� O 1528.13. Instrukcje na liter� P 1548.14. Instrukcje na liter� R 1568.15. Instrukcje na liter� S 1608.16. Instrukcje na liter� T 1688.17. Instrukcje na liter� V 1698.18. Instrukcje na liter� W 1698.19. Instrukcje na liter� X 170
9. Dyrektywy asemblera MASM 1729.1. Etykiety kodu 1729.2. Warunkowa kontrola przep�ywu 1739.3. Alokacja danych 1759.4. Przyrównania 1779.5. Makra 1779.6. Procedury 1789.7. Rodzaj zestawu instrukcji procesora 1799.8. Bloki powtórze� 1829.9. Zakres 1839.10. Segmenty 1849.11. Uproszczone segmenty 1859.12. �a�cuchy znaków 1879.13. Struktury i rekordy 1889.14. Róne 189
Dodatki 192
A. Tablica kodów ASCII 192
B. Pot�gi liczby dwa 193
C. Lista opkodów procesora 80x86 196
Skorowidz 202
Rozdzia� 4. Praca z danymi � 39
Rozdzia� 4. Praca z danymiW tym rozdziale nauczysz si�, jak pracowa� z danymi, takimi jak naprzyk�ad zmienne czy struktury. Dowiesz si� te, czym jest adresdanych w pami�ci i jak go pobiera�.
4.1. Adresowanie i wskanikiW Asemblerze bardzo wane jest to, aby wiedzie�, czym róni si�adres zmiennej (OFFSET) od jej wartoci. Adres to miejsce, gdzie znaj-duje si� zmienna, natomiast wartoci� s� dane umieszczone pod tymadresem.
Operator OFFSETOperator OFFSET s�uy do pobierania adresu zmiennej.
Oto przyk�ad jego uycia:
.386
.model flat, stdcalloption casemap: none
include windows.incinclude kernel32.incinclude user32.inc
includelib user32.libincludelib kernel32.lib
.datazmienna db "Witaj!", 0
.codestart: mov eax, offset zmienna ; do rejestru EAX skopiuj adres zmiennej invoke MessageBox, NULL, eax, NULL, NULL ; wy�wietl komunikat invoke ExitProcess, NULL ; koniec programuend start
Operatora OFFSET uywamy równie, gdy pobieramy adres zmiennej,odk�adaj�c j� na stos przed wywo�aniem procedury, na przyk�ad:
push NULLpush NULLpush offset zmienna ; pobieramy adres zmiennej i odk�adamy na stospush NULLcall MessageBox
40 � Asembler. Leksykon kieszonkowy
Warto zaznaczy�, e operator OFFSET nie dzia�a na zmiennych lokalnych.
Zmienne lokalneZmienne lokalne moemy zadeklarowa� na przyk�ad wewn�trz ja-kiej procedury. Aby to zrobi�, podajemy najpierw s�owo LOCAL, dalejnazw� zmiennej, a po dwukropku jej rodzaj.
Na przyk�ad:
myProc proc LOCAL zmienna1: DWORD ; deklaracja zmiennej lokalnej o rozmiarze podwójnego s�owa ; jaki� kod Ret ; powrótmyProc EndP
Operator ADDROperatora ADDR uywamy najcz�ciej przy przekazywaniu argumen-tów do funkcji wywo�ywanej za pomoc� sk�adni INVOKE, na przyk�ad:
invoke MessageBox, NULL, addr MsgText, addr MsgCaption, NULL
Dereferencja (operator [ ])Pos�uymy si� tutaj prostym przyk�adem:
mov eax, lpvar ; skopiuj adres do EAXmov eax, [eax] ; dereferencjamov nuvar, eax ; skopiuj EAX do nowej zmiennej
Nawiasy kwadratowe s�u� do wydobycia wartoci spod adresu w EAX.Operacja ta jest nazywana dereferencj�.
Instrukcja LEAInstrukcja ta jest skrótem angielskiego wyraenia: Load Effective Address.S�uy ona do pobierania adresu i kopiowania go do pierwszego ope-randu, na przyk�ad:
lea eax, zmiennainvoke MessageBox, NULL, eax, NULL, NULL
Rozdzia� 4. Praca z danymi � 41
4.2. Zmienne i sta�eW j�zyku Asembler prócz operacji na rejestrach moemy definiowa�zmienne oraz sta�e, by wykonywa� na nich róne operacje.
Sta�eSta�e umieszczamy w sekcji .CONST.
Pos�u� si� tutaj prostym przyk�adem:
.const ; sta�ejeden equ 1 ; definicja sta�ejosiem equ 2*4 ; warto�� wyliczona
ZmienneZmienne moemy podzieli� na zainicjowane jak� wartoci� orazniezainicjowane. Zmienne zainicjowane deklarujemy z wartoci� po-cz�tkow� z prawej strony, niezainicjowane natomiast maj� z prawejstrony znak zapytania. Zmienne zainicjowane deklarujemy w sekcji.DATA, a niezainicjowane w — .DATA?. Obie te sekcje wyst�puj� przedsekcj� kodu (.CODE).
Zmienne o rozmiarze jednego bajtu/ci�gu bajtów
Zmienne te deklarujemy dyrektyw� BYTE (lub krótko: DB; ang. Define Byte).
.data ; dane zainicjowane warto�ci� podan� z prawej stronyb1 BYTE 0 ; jeden bajtb2 db 0 ; równie� jeden bajtb3 db 100 dup(0) ; sto bajtówb4 db "asd", 0 ; cztery bajty (ci�g znaków ASCII zako�czony zerem)b5 SBYTE 0 ; jeden bajt ze znakiemt1 dt 0 ; dziesi�� bajtów
Zmienne o rozmiarze jednego s�owa
Zmienne te deklarujemy przy uyciu dyrektywy WORD (lub krótko: DW;ang. Define Word).
w1 word 0 ; s�owow2 dw 0 ; równie� s�owo
Zmienne o rozmiarze podwójnego s�owa
Zmienne te deklarujemy za pomoc� dyrektywy DWORD (lub krótko: DD;ang. Define Double Word).
42 � Asembler. Leksykon kieszonkowy
d1 dword 0 ; podwójne s�owod2 dd 0 ; równie� podwójne s�owod3 sdword 0 ; podwójne s�owo ze znakiem
Zmienne o rozmiarze poczwórnego s�owa
Zmienne te deklarujemy za pomoc� dyrektywy QWORD (lub krótko: DQ;ang. Define Quad Word).
q1 qword 0 ; poczwórne s�owoq2 dq 0 ; równie� poczwórne s�owoq3 sqword 0 ; poczwórne s�owo ze znakiem
Zmienne o rozmiarze 6 bajtów
Zmienne te deklarujemy przy uyciu dyrektywy FWORD (lub krótko:DF; ang. Define Fword).
f1 fword 0 ; zmienna 6-bajtowaf2 df 0 ; równie� zmienna 6-bajtowa
Zmienne u�ywane w instrukcjach MMX i SSE
Zmienne te deklarujemy za pomoc� dyrektyw: MMWORD i XMMWORD. Pierwszama 64 bity, a druga — 128.
m1 mmword 0.0 ; 64-bitowa zmienna u�ywana w instrukcjach MMX i SSEx1 xmmword 0.0 ; 128-bitowa zmienna u�ywana w instrukcjach MMX i SSE
Zmienne do przechowywania liczb rzeczywistych
Zmienne te deklarujemy przy uyciu dyrektyw: REAL4, REAL8 i REAL10.
n1 real4 0.0 ; liczba zmiennoprzecinkowa pojedynczej precyzji (4 bajty)n2 real8 0.0 ; liczba zmiennoprzecinkowa podwójnej precyzji (8 bajtów)n3 real10 0.0 ; liczba zmiennoprzecinkowa 10-bajtowa
4.3. Praca ze strukturamiW poprzednim rozdziale by�a mowa o zmiennych i sta�ych. Terazopisz� typ danych, jakim jest struktura.
Deklaracja przyk�adowej struktury dla asemblera MASM wygl�danast�puj�co (deklaracj� t� umieszczamy PRZED SEKCJ� .DATA):
Rect STRUCT left dword ? top dword ? right dword ? bottom dword ?Rect ENDS
Rozdzia� 4. Praca z danymi � 43
Najpierw pojawia si� nazwa struktury (Rect), po niej s�owo STRUCT, a ni-ej s� umieszczone pola struktury. Kade z nich jest podwójnym s�o-wem (DWORD), niezainicjowanym adn� wartoci� (znak ?). Na ko�cumamy znów nazw� struktury i s�owo ko�cz�ce deklaracj� ENDS.
Teraz utwórzmy zmienn� typu Rect. Robimy to w ten sposób:
.dataRct Rect <>
Do pól struktury odwo�ujemy si�, pisz�c nazw� struktury i po kropcejej pole, na przyk�ad:
mov Rct.left, 12mov Rct.top, 24mov Rct.right, 31mov Rct.bottom, 10
Jeeli jaka funkcja wymaga od nas adresu struktury jako argumen-tu, uywamy operatora ADDR, na przyk�ad:
invoke Func1, param1, param2, addr Rct
Moemy równie tworzy� struktury zawieraj�ce w sobie inne struktury,na przyk�ad:
Rect STRUCT left dword ? top dword ? right dword ? bottom dword ?Rect ENDS
Point STRUCT x dword ? y dword ?Point ENDS
MyStruct STRUCT item1 Rect <> ; struktura Rect item2 Point <> ; struktura PointMyStruct ENDS
.dataStruct1 MyStruct <>
Wtedy do pól odwo�ujemy si� w nast�puj�cy sposób:
mov Struct1.item1.left, 10
Do pól struktury moemy si� take odnosi� poprzez adres w reje-strze z dodanym przesuni�ciem, na przyk�ad:
44 � Asembler. Leksykon kieszonkowy
mov eax, lpRct ; adres struktury do EAXmov [eax], DWORD PTR 10mov [eax+4], DWORD PTR 12mov [eax+8], DWORD PTR 14mov [eax+12], DWORD PTR 16
Mona to równie zrobi� przy uyciu dyrektywy ASSUME:
ASSUME eax:PTR RECT mov eax, lpRct mov [eax].left, 10 mov [eax].top, 12 mov [eax].right, 14 mov [eax].bottom, 16ASSUME eax: nothing
202 � Asembler. Leksykon kieszonkowy
Skorowidz
386, 179386P, 180387, 180486, 180486P, 180586, 180586P, 181686, 181686P, 181
AAAA, 125AAD, 125AAM, 126AAS, 126AC, 12ADC, 126ADD, 19, 127ADDR, 40adres IP, Patrz IPAddress
lokalnego komputera, 99adres zmiennej, 39adresowanie x64, 124Advanced Vector
Extensions, Patrz AVXAF, 11AH, 10akumulator, 10AL, 10ALIAS, 189ALIGN, 172Alignment Check, 12alokacja
bloków pami�ci, 52danych, 175
ALPHA, 184alternatywa, 21alternatywa wykluczaj�ca,
21AMD64 Assembly
Debugger, 124AND, 20, 127aplikacje wielow�tkowe, 95architektura
64-bitowa, Patrz x64x86, 10
ARPL, 128
ASCII, 192asembler, 7Asembler, 7
64-bitowy, 120ASSUME, 44, 184Auxillary Flag, 11AVX, 118
instrukcje, 119AX, 10
Bbajt, 9biblioteki DLL, 97bit, 9bloki
pami�ci, 52powtórze�, 182
BOUND, 128BREAK, 36, 173BS_3STATE, 60BS_AUTO3STATE, 60BS_FLAT, 57BSF, 129BSR, 129BST_CHECKED, 60, 61BST_INDETERMINATE, 60,
61BST_UNCHECKED, 60, 61BSWAP, 130BT, 130BTC, 130BTR, 131BTS, 131budowa programu
DOS, 13, 14Windows, 15
Button, 56BYTE, 41, 175
CCALL, 17, 26, 132CallNextHookEx, 88
hhk, 89lParam, 89nCode, 89wParam, 89
CallWindowProc, 76, 95Carry Flag, 11, 22CARRY?, 36CATSTR, 187CB_ADDSTRING, 63CB_DELETESTRING, 63CB_GETCOUNT, 63CB_GETCURSEL, 63CB_SETCURSEL, 63CBW, 133CDQ, 133CF, 11, 22CHARFORMAT, 84CHARRANGE, 83CheckBox, 60
przyk�adowy program,61
sprawdzanie stanu, 60ustawianie stanu, 61
CheckDlgButton, 61hDlg, 61nIDButton, 61uCheck, 61
CLC, 134CLD, 134CLI, 134CloseHandle, 99CLTS, 135CMC, 135CMP, 29, 135CMPS, 31, 136CODE, 41, 50, 185Code Segment, 11ComboBox, 62
komunikaty, 63przyk�adowy program,
63COMM, 183COMMENT, 189CONST, 41, 186CONTINUE, 173CPL, 12CreateFile, 99CreateFileMapping, 99CreateThread, 95
dwCreationFlags, 96dwStackSize, 96lpParameter, 96
Skorowidz � 203
lpStartAddress, 96lpThreadAttributes, 95lpThreadId, 96
CreateWindowEx, 72CS, 11Current Priority Level, 12CW_USEDEFAULT, 72CWD, 136CWDE, 137
DDAA, 137DAS, 137DATA, 41, 186Data Segment, 11DATA?, 41, 186DB, 41, 175DD, 41debuggery, 7
aplikacji x64, 124Debugging Tools for
Windows 64-bit Version,124
DEC, 20, 138dekrementacja, 20dereferencja, 40DF, 12, 30, 42DI, 10DialogBoxParam, 50Direction Flag, 12, 30DIV, 19, 138DLL, 97dodawanie, 19DOS
budowa programu, 13,14
szablony aplikacji, 14DOSSEG, 184double word, 9DQ, 42DS, 11DW, 41DWORD, 41, 175dyrektywy asemblera
MASM, 172dzielenie
bez znaku, 19ze znakiem, 20
EEAX, 10EBP, 10EBX, 10
ECHO, 189ECX, 10EDI, 10Edit, 57
pobieranie liczby, 58pobieranie tekstu, 58przyk�adowy program,
60ustawianie liczby, 59ustawianie tekstu, 59
EDX, 10EFLAGS, 11, 13EIP, 13ekran powitalny,
Patrz SplashscreenELSE, 35, 173ELSEIF, 35, 173EM_EXSETSEL, 83, 84EM_FINDTEXTEX, 83, 84EM_SETCHARFORMAT, 84EM_SETSEL, 84EM_SETTEXTEX, 84END, 184EndDialog, 50ENDIF, 35, 173ENDM, 177ENDP, 27, 178ENDS, 43, 185ENDW, 36, 174ENTER, 139EQU, 177ES, 11ESI, 10ESP, 10etykiety, 29
kodu, 172EVEN, 172exe, 7EXIT, 186EXITM, 177ExitProcess, 16, 50EXTERN, 183EXTERNDEF, 183Extra Segment, 11
FFARDATA, 186FARDATA?, 186FASM, 124FASTCALL, 123FDBG, 124FINDTEXTEX, 83FIRST_IPADDRESS, 78flagi, 11
FloatToStr, 103FloatToStr2, 103FOR, 182FORC, 182FOURTH_IPADDRESS, 78FPU, 102FS, 11funkcje
powrót, 27tworzenie, 27wywo�anie, 26
FWORD, 42, 175
GGetDlgItem, 72GetDlgItemInt, 58
bSigned, 58hDlg, 58lpTranslated, 58nIDDlgItem, 58
GetDlgItemText, 58hDlg, 58lpString, 58nIDDlgItem, 58nMaxCount, 58
gethostbyname, 100gethostname, 100GetModuleHandle, 50GetProcAddress, 98
hModule, 99lpProcName, 99
GetStdHandle, 45GoAsm, 124GOTO, 178GROUP, 185GroupBox, 62GS, 11GWL_EXSTYLE, 94GWL_HINSTANCE, 94GWL_ID, 94GWL_STYLE, 94GWL_USERDATA, 94GWL_WNDPROC, 94
HHIGH-WORD, 10HLT, 139Hooks, 87
instalowanie, 88klawiatura, 89rodzaje, 87
hostent, 100
204 � Asembler. Leksykon kieszonkowy
II/O Privilege Level, 12ID, 12Identification, 12IDIV, 20, 140IF, 12, 35, 174IMUL, 19, 140IN, 141INC, 20, 141INCLUDE, 189INCLUDELIB, 183inet_ntoa, 100InitCommonControls, 50inkrementacja, 20INS, 142INSTR, 187instrukcje
arytmetyczne, 18AVX, 119kopiowania, 18koprocesora, 105logiczne, 20MMX, 110operuj�ce na
�a�cuchach, 30porównania, 29przesuni�� bitowych, 21rodzaje zestawów, 179skoku, 29SSE, 111SSE2, 113SSE3, 115SSE4, 117SSSE3, 116zmiany w x64, 122zwi�zane
z procedurami, 26INT, 14, 142Interrupt Flag, 12INVOKE, 17, 179IOPL, 12IPAddress, 78
czyszczenie zawartoci,81
pobieranie adresu, 78powiadomienia, 81przyk�adowy program,
82ustawianie adresu, 80ustawianie focusu, 81
IPM_CLEARADDRESS, 81IPM_GETADDRESS, 78IPM_SETADDRESS, 80, 81IPM_SETFOCUS, 81IPN_FIELDCHANGED, 81
IRET, 143IRETD, 143IsDlgButtonChecked, 60
hDlg, 60nIDButton, 60
JJA, 30JAE, 30JB, 30JBE, 30Jcc, 143JE, 30JG, 30JGE, 29, 30JL, 30JLE, 30JNE, 30JNZ, 30jWasm, 124JZ, 30
KK3D, 181kernel32.dll, 16kilobajt, 10klawiatura, 52kody ASCII, 192kompilatory Asemblera
x64, 124komunikacja mi�dzy
w�tkami, 96koniunkcja, 20konsola w Windows, 45
kolory, 46pobieranie danych, 45przyk�adowy program,
47tworzenie aplikacji, 45wywietlanie danych, 45
konsolidator, 7kontrola przep�ywu, 35, 173kontrolki
listy, Patrz ListBoxlisty rozwijanej,
Patrz ComboBoxnowoczesne, 85paska post�pu,
Patrz ProgressBarpodpowiedzi,
Patrz Tooltippola tekstowego,
Patrz Editprzycisku, Patrz Button
suwaka, Patrz TrackBartekstu sformatowanego,
Patrz RichEditwidoku
drzewa,Patrz TreeView
listy, Patrz ListViewwprowadzania adresu
IP, Patrz IPAddresswyboru
pojedynczego,Patrz RadioButton
wielokrotnego,Patrz CheckBox
konwencja wywo�ania x64,123
kopiowanie, 18koprocesor, 102
instrukcje, 105przyk�adowy program,
109rejestry, 102
LLABEL, 172LAHF, 144LAR, 145LB_ADDSTRING, 64LB_GETCOUNT, 64LB_GETCURSEL, 64LB_SETCURSEL, 64LEA, 40, 145LEAVE, 145LGDT, 146LGS, 146liczby
zmiennoprzecinkowe, 103licznik, 10LIDT, 146linker, 7lista, Patrz ListBoxlista rozwijana,
Patrz ComboBoxListBox, 64
komunikaty, 64przyk�adowy program,
64ListView, 68
elementy, 69kolumny, 68przyk�adowy program, 69
LLDT, 147LMSW, 147LoadIcon, 50
Skorowidz � 205
LoadLibrary, 98lpLibFileName, 98
LOCAL, 40, 178LOCK, 147LODS, 32, 148lokalny adres IP, 99LOOP, 148LOW-WORD, 10LVCF_FMT, 68LVCF_SUBITEM, 68LVCF_TEXT, 68LVCF_WIDTH, 68LVCFMT_CENTER, 68LVCFMT_LEFT, 68LVCFMT_RIGHT, 68LVCOLUMN, 68
cchTextMax, 69fmt, 68imask, 68iSubItem, 69lx, 69pszText, 69
LVIF_IMAGE, 69LVIF_PARAM, 69LVIF_STATE, 69LVIF_TEXT, 69LVITEM, 69
cchTextMax, 69iItem, 69imask, 69iSubItem, 69pszText, 69
LVM_INSERTCOLUMN, 68LVM_INSERTITEM, 69LVM_SETITEM, 69LVS_REPORT, 68
L�a�cuchy znaków, 30, 187
MM_LBUTTONDBCLK, 51MACRO, 178makroinstrukcje, 35, 177
do tworzenia p�tli, 36kontroli przep�ywu, 35
manifest, 85MapViewOfFile, 99MASM, 8MASM64, 124megabajt, 10menu, 55
przyk�adowy program,56
MessageBox, 16MF_BITMAP, 56MF_CHECKED, 56MF_DISABLED, 56MF_GRAYED, 56MF_MENUBREAK, 56MF_OWNERDRAW, 56MF_STRING, 56m�odsze s�owo, 10MMWORD, 42, 190MMX, 13, 42, 110, 181
instrukcje, 110mnoenie
bez znaku, 19ze znakiem, 19
MODEL, 187MOV, 18, 148MOVS, 30, 149MOVSX, 150MOVZX, 150MSDN, 16MUL, 19, 151mysz, 51
NNASM, 124NEG, 151Nested Task, 12nibble, 9NIM_DELETE, 93NMHDR, 82
code, 82hwndFrom, 82idFrom, 82
NMIPADDRESS, 81hdr, 81iField, 81iValue, 81
NOP, 152NOT, 21, 152NOTIFYICONDATA, 92nowoczesne kontrolki, 85NT, 12
Oobj, 7obs�uga okna, 93odczyt
klawiatury, 52myszy, 51
odejmowanie, 19odpluskwiacz, 7odwzorowanie plików
w pami�ci, 99
OF, 12OFFSET, 39okno dialogowe, 47
w�aciwoci, 48Olly Debugger, 8opcode, 196operacje na plikach, 52
przyk�adowy program,54
operatory porównania, 36opkody procesora 80x86,
196OPTION, 190OR, 21, 152ORG, 172OUT, 153OUTS, 153Overflow Flag, 12OVERFLOW?, 36
PParity Flag, 11PARITY?, 36pasek post�pu,
Patrz ProgressBarPBM_GETPOS, 65PBM_GETRANGE, 65PBM_GETSTEP, 65PBM_SETPOS, 65PBM_SETRANGE, 65PBM_SETSTEP, 66PBM_STEPIT, 66PBRANGE, 65p�tle, 36PF, 11pliki
.manifest, 86odwzorowane
w pami�ci, 99operacje, 52
pobieranie lokalnegoadresu IP, 99
poczwórne s�owo, 10podmiana procedury
obs�ugi okna, 93przyk�adowy program,
95podpi�cia do Windows,
Patrz Hookspodpowied�, Patrz Tooltippodwójne s�owo, 9pole tekstowe, Patrz EditPOP, 13, 18, 154
206 � Asembler. Leksykon kieszonkowy
POPA, 154POPAD, 154POPCONTEXT, 190POPF, 155POPFD, 155porównanie, 29
operatory, 36pot�gi liczby dwa, 193powrót
z funkcji/procedury, 27powtórzenia, 182pó�bajt, 9PROC, 27, 179procedury, 178
powrót, 27tworzenie, 27wywo�anie, 26
programowaniew Windows, 45
ProgressBar, 65komunikaty, 65przyk�adowy program,
66PROTO, 179przerwania, 14przesuni�cia
arytmetyczne, 21, 22bitowe, 21logiczne, 21, 22logiczne podwójnego
rejestru, 24przycisk, Patrz Buttonprzyrównania, 177PUBLIC, 184PURGE, 178PUSH, 13, 17, 18, 155PUSHA, 155PUSHAD, 155PUSHCONTEXT, 190PUSHF, 156PUSHFD, 156
Qquad word, 10QWORD, 42, 175
RRadioButton, 62
przyk�adowy program, 62RADIX, 190RCL, 23, 156RCR, 24, 157ReadFile, 45
REAL10, 42, 176REAL4, 42, 176REAL8, 42, 176RECORD, 188rejestry, 10
bazowy, 10danych, 10flag, 11indeksowe, 10koprocesora, 13, 102MMX, 13ogólnego
przeznaczenia, 10procesora x64, 121segmentowe, 11SSE, 13wska�nikowe, 10
rekordy, 188REP, 157REPE, 158REPEAT, 37, 174, 182REPNE, 158REPNZ, 158REPZ, 158Resume Flag, 12RET, 27, 158RF, 12RichEdit, 83
formatowanie, 84przejcie do
okrelonego wiersza,84
przyk�adowy program,85
wyszukiwanie tekstu, 83zamienianie wybranego
tekstu, 84zaznaczanie ca�ego
tekstu, 83rodzaje zestawów
instrukcji, 179ROL, 23, 159ROR, 24, 159rotacja
bez uycia flagi CF, 23,24
z uyciem flagi CF, 23,24
SSAFESEH, 191SAHF, 160SAL, 21, 160SAR, 22, 161
SBB, 162SBYTE, 175SCAS, 33, 162SCF_ALL, 84SDWORD, 175SECOND_IPADDRESS, 78SEGMENT, 185segmenty, 184
uproszczone, 185SendMessage, 62
hWnd, 63lParam, 63Msg, 63wParam, 63
SEQ, 185SETcc, 163SetConsoleTextAttribute, 46SetDlgItemInt, 59
bSigned, 59hDlg, 59nIDDlgItem, 59uValue, 59
SetDlgItemText, 59hDlg, 59lpString, 59nIDDlgItem, 59
SetWindowLong, 93dwNewLong, 94hWnd, 94nIndex, 94
SetWindowsHookEx, 88, 89dwThreadId, 88hMod, 88idHook, 88lpfn, 88
SF, 12SGDT, 164Shell_NotifyIcon, 92SHL, 21, 160SHLD, 24, 164SHR, 22, 161SHRD, 24, 165SI, 10SIDT, 164Sign Flag, 12SIGN?, 36SIZESTR, 188skok, 29SLDT, 165s�owo, 9
m�odsze, 10poczwórne, 10podwójne, 9starsze, 10
Skorowidz � 207
SMSW, 166Splashscreen, 89
przyk�adowy program,91
wykonanie, 90SS, 11SSE, 13, 42, 110
instrukcje, 111SSE2, 113SSE3, 115SSE4, 117SSSE3, 116STACK, 187Stack Segment, 11sta�e, 41starsze s�owo, 10STARTUP, 187STC, 166STD, 166STI, 167stos, 13STOS, 33, 167STR, 167StrToFloat, 104STRUCT, 43, 188struktury, 42, 188SUB, 19, 168SUBSTR, 188suwak, Patrz TrackBarSWORD, 176systemy liczbowe, 9
binarny, 9heksadecymalny, 9
szablony aplikacji DOS, 14
Ttablica kodów ASCII, 192TBM_GETPOS, 71TBM_SETRANGEMAX, 70TBM_SETRANGEMIN, 70TBYTE, 176tekst sformatowany,
Patrz RichEditTEST, 168TEXTEQU, 177TF, 12THIRD_IPADDRESS, 78TOOLINFO, 73, 75, 76Tooltip, 71
dostosowywaniewygl�du, 73
hiper��cza, 76
podmiana proceduryobs�ugi okna, 74
przyk�adoweprogramy, 77
tworzenie, 72TrackBar, 70
pobieranie pozycjisuwaka, 71
przyk�adowy program,71
ustawianie zakresu, 70TranslateMessage, 52Trap Flag, 12Tray, 91
przyk�adowy program,93
TreeView, 66dodawanie elementów,
66przyk�adowy program,
67sprawdzanie
klikni�tego elementu,67
TTF_PARSELINKS, 76TTI_ERROR, 74TTI_INFO, 74TTI_NONE, 74TTI_WARNING, 74TTM_ADDTOOL, 73TTM_POP, 76TTM_SETMAXTIPWIDTH,
74TTM_SETTITLE, 74TTS_BALLOON, 74TTS_CLOSE, 74TV_INSERTSTRUCT, 66
hInsertAfter, 66hParent, 66item, 67
TVI_FIRST, 66TVI_LAST, 66TVI_ROOT, 67TVI_SORT, 67TVITEM, 67TVM_INSERTITEM, 66TVN_SELCHANGED, 67tworzenie
bibliotek DLL, 97funkcji, 27menu, 55procedur, 27
TYPEDEF, 188
UUnhookWindowsHookEx,
89UNION, 189UnmapViewOfFile, 99UNTIL, 37, 174UNTILCXZ, 174uproszczone segmenty, 185
VVERR, 169VERW, 169VIF, 12VIP, 12Virtual 8086 Mode, 12Virtual Interrupt Flag, 12Virtual Interrupt Pending,
12VM, 12
WWAIT, 169warto� zmiennej, 39warunkowa kontrola
przep�ywu, 173WH_CALLWNDPROC, 87WH_CALLWNDPROCRET,
87WH_CBT, 87WH_DEBUG, 87WH_FOREGROUNDIDLE,
87WH_GETMESSAGE, 87WH_JOURNALPLAYBACK,
87WH_JOURNALRECORD,
87WH_KEYBOARD, 87WH_KEYBOARD_LL, 87, 89WH_MOUSE, 87WH_MOUSE_LL, 88WH_MSGFILTER, 88WH_SHELL, 88WH_SYSMSGFILTER, 88WHILE, 36, 174, 183widok
drzewa, Patrz TreeViewlisty, Patrz ListView
wielow�tkowo�, 95komunikacja, 96przyk�adowy program,
97
208 � Asembler. Leksykon kieszonkowy
Win32 Programmer’sReference, 16WIN32.HLP, 16WinAPI, 15WinAsm, 8cieki do katalogów, 8Windowsadres IP, Patrz IPAddresslokalnego komputera, 99alokacja bloków pami�ci, 52aplikacje wielow�tkowe,
95biblioteki DLL, 97budowa programu, 15ekran powitalny,
Patrz Splashscreenkonsola, 45lista, Patrz ListBoxlista rozwijana,
Patrz ComboBoxnowoczesne kontrolki, 85Windowsodczytklawiatury, 52myszy, 51okno dialogowe, 47operacje na plikach, 52pasek post�pu,
Patrz ProgressBarpliki odwzorowane
w pami�ci, 99podmiana procedury
obs�ugi okna, 93podpi�cia do systemu,
Patrz Hookspodpowied�, Patrz Tooltippole tekstowe, Patrz Editprogram Witaj, wiecie!,
16programowanie, 45przycisk, Patrz Buttonsuwak, Patrz TrackBartekst sformatowany,
Patrz RichEdittworzenie menu, 55widokdrzewa, Patrz TreeViewlisty, Patrz ListView
wybórpojedynczy,
Patrz RadioButton
wielokrotny,Patrz CheckBox
zasobnik systemowy,Patrz Tray
Windows on Windows 64,120
WM_CHAR, 52, 93WM_CLOSE, 50WM_COMMAND, 50, 57,
92WM_INITDIALOG, 50, 53,
90WM_KEYDOWN, 52WM_KEYUP, 52WM_LBUTTONDOWN,
51, 76WM_LBUTTONUP, 51WM_MBUTTONDOWN,
51WM_MBUTTONUP, 51WM_MOUSEMOVE, 51, 76WM_NOTIFY, 67WM_RBUTTONDBCLK, 51WM_RBUTTONDOWN, 51,
76WM_RBUTTONUP, 51WM_SHELLNOTIFY, 92word, 9
double, 9high, 10low, 10quad, 10
WORD, 41, 176WOW64, 120WriteFile, 45WS_EX_CLIENTEDGE, 57WS_EX_DLGMOD�ALFRAME, 57
WS_EX_STATICEDGE, 57WS_GROUP, 62WSAStartup, 100wska�nik
bazowy, 10stosu, 10
wybórpojedynczy,
Patrz RadioButtonwielokrotny,
Patrz CheckBox
wywietlanie liczbzmiennoprzecinkowych,103
wywo�aniefunkcji, 26konwencja dla x64, 123procedury, 26
Xx64, 120
adresowanie, 124debuggery, 124format plików
wykonywalnych, 120kompilatory
Asemblera, 124konwencja wywo�ania,
123rejestry procesora, 121zmiany w instrukcjach,
122x86, 10XCHG, 170XLAT, 170XLATB, 170XMM, 182XMMWORD, 42, 191XOR, 21, 171
YYMMWORD, 191
Zzakres, 183zaokr�glanie, 104zaprzeczenie, 21zasobnik systemowy,
Patrz TrayZero Flag, 12ZERO?, 36ZF, 12zmienne, 41
adres, 39lokalne, 40rozmiar, 41, 42warto�, 39
znaczniki, 11