Asembler. Leksykon kieszonkowy - Helion

21

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

6 � Asembler. Leksykon kieszonkowy

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