praktyczny kurs asemblera. wydanie ii helion.pdf

(20499 KB) Pobierz
887779425.001.png
Spis treci
Ostatni wykad Eugeniusza Wróbla ................................................. 7
Wprowadzenie do drugiego wydania ................................................ 9
Rozdzia 1.
Wprowadzenie ............................................................................. 11
1.1.
Co to jest asembler? ........................................................................................ 11
1.2.
Dlaczego programowa w jzyku asemblera? ................................................ 14
1.3.
Dlaczego warto pozna jzyk asemblera? ....................................................... 16
1.4.
Wymagane umiejtnoci ................................................................................. 16
1.5.
Konwencje stosowane w ksice .................................................................... 17
Rozdzia 2.
Pierwszy program w asemblerze ................................................... 21
2.1.
„Hello, world!” pod kontrol systemu operacyjnego MS DOS ....................... 22
2.2.
„Hello, world!” pod kontrol systemu operacyjnego Windows ...................... 25
Rozdzia 3.
Architektura procesorów rodziny x86-32
widziana oczami programisty ........................................................ 33
3.1.
Rejestry procesora 8086 .................................................................................. 34
3.2.
Zwikszamy rozmiar rejestrów — od procesora 80386 do Intel Core i7 ........ 38
Zwikszamy liczb rejestrów — od procesora i486 do Intel Core i7 .............. 39
3.3.
3.4.
Segmentowa organizacja pamici ................................................................... 44
3.5.
Adresowanie argumentów ............................................................................... 48
3.6.
Adresowanie argumentów w pamici operacyjnej .......................................... 49
3.7.
Architektura x86-32e ...................................................................................... 52
Rozdzia 4.
Narzdzia ..................................................................................... 55
4.1.
Asembler MASM ............................................................................................ 56
4.2.
Program konsolidujcy — linker .................................................................... 60
4.3.
Programy uruchomieniowe ............................................................................. 62
Microsoft CodeView ....................................................................................... 64
Microsoft WinDbg .......................................................................................... 67
OllyDbg .......................................................................................................... 68
4.4.
rodowiska zintegrowane ............................................................................... 70
Microsoft Programmer’s WorkBench (PWB) ................................................. 70
rodowisko zintegrowane MASM32 SDK ..................................................... 71
rodowisko zintegrowane RadASM ............................................................... 74
WinAsm Studio ............................................................................................... 74
4.5.
Microsoft Visual Studio .................................................................................. 75
4
Praktyczny kurs asemblera
Rozdzia 5.
Lista instrukcji procesorów x86-32 ............................................... 81
5.1.
Instrukcje ogólne — jednostki staoprzecinkowej ........................................... 84
5.2.
Koprocesor arytmetyczny — instrukcje jednostki zmiennoprzecinkowej ...... 87
5.3.
Instrukcje rozszerzenia MMX ......................................................................... 90
5.4.
Instrukcje rozszerzenia SSE ............................................................................ 93
5.5.
Instrukcje rozszerzenia SSE2 .......................................................................... 97
5.6.
Instrukcje rozszerzenia SSE3, SSSE3 oraz SSE4 ......................................... 100
5.7.
Instrukcje systemowe .................................................................................... 101
5.8.
Planowane rozszerzenie AVX ....................................................................... 102
Rozdzia 6.
Ogólna struktura programu asemblerowego ................................ 105
6.1.
Uproszczone dyrektywy definiujce segmenty ............................................. 105
6.2.
Pene dyrektywy definiowania segmentów ................................................... 111
6.3.
Dyrektywy pomocnicze ................................................................................ 114
Rozdzia 7.
Definiowanie i stosowanie zmiennych ......................................... 123
7.1.
Zmienne cakowite ........................................................................................ 124
7.2.
Zmienne zmiennoprzecinkowe ..................................................................... 127
7.3.
Definiowanie tablic i acuchów ................................................................... 128
7.4.
Struktury zmiennych ..................................................................................... 130
7.5.
Dyrektywa definiujca pola bitowe ............................................................... 133
Rozdzia 8.
Podprogramy ............................................................................. 137
8.1.
Stos ............................................................................................................... 137
8.2.
Wywoanie i organizacja prostych podprogramów ....................................... 140
8.3.
Dyrektywa PROC – ENDP ........................................................................... 141
8.4.
Parametry wywoania podprogramu ............................................................. 146
8.5.
Zmienne lokalne ............................................................................................ 155
Rozdzia 9.
Makroinstrukcje oraz dyrektywy asemblacji warunkowej ............. 157
9.1.
Makroinstrukcja definiowana ........................................................................ 157
9.2.
Dyrektywa LOCAL ...................................................................................... 162
9.3.
Dyrektywy asemblacji warunkowej .............................................................. 163
9.4.
Makroinstrukcje niedefiniowane ................................................................... 166
9.5.
Makroinstrukcje tekstowe ............................................................................. 167
9.6.
Makroinstrukcje operujce na acuchach (na tekstach) ............................... 168
Rozdzia 10.
Funkcje systemu MS DOS oraz BIOS .......................................... 171
10.1.
Co ma prawo przerwa wykonanie naszego programu? ............................... 171
10.2.
Obsuga klawiatury oraz funkcje grafiki na poziomie BIOS ......................... 174
10.3.
Wywoywanie podprogramów systemu operacyjnego MS DOS .................. 180
Rozdzia 11.
Programowanie w asemblerze w rodowisku Windows ................ 187
11.1.
Systemowe programy biblioteczne ............................................................... 188
11.2.
Pierwsze okno ............................................................................................... 191
11.3.
Struktury programowe typu HLL .................................................................. 197
11.4.
Program generatora okien Prostart ................................................................ 199
Rozdzia 12.
Wybrane zagadnienia optymalizacji programu .............................. 207
12.1.
Kiedy i co powinnimy optymalizowa w programie? ................................. 209
12.2.
Optymalizujemy program przygotowany dla procesora x86-32 ................... 211
Modele pamici — mieszanie kodów 16- i 32-bitowych .............................. 211
Wyrównywanie danych ................................................................................. 212
Pami podrczna ......................................................................................... 213
Unikanie rozgazie (skoków) ..................................................................... 215
Opónienia wynikajce z pierwszego wykonania oraz rozwijanie ptli ........ 216
Opónienia zwizane z zapisywaniem i odczytywaniem .............................. 217
Spis treci
5
12.3.
Wspieramy proces optymalizacji za pomoc programu Vtune ..................... 218
12.4.
Na ile rónych sposobów moemy zakodowa kopiowanie tablic? .............. 219
Metoda 1.: Z wykorzystaniem instrukcji MOVSB ........................................ 221
Metoda 2.: Z wykorzystaniem instrukcji MOVSD ....................................... 221
Metoda 3.: Jawna ptla z instrukcjami MOV ................................................ 222
Metoda 4.: Ptla z instrukcj MOV, rozwinita ............................................ 222
Metoda 5.: Ptla rozwinita, grupowanie operacji odczytu i zapisu .............. 223
Metoda 6.: Wykorzystujemy rejestry MMX ................................................. 223
Metoda 7.: Modyfikujemy metod 6., stosujc instrukcje MOVNTQ
i SFENCE ............................................................................................... 224
Metoda 8.: Na pocztku ptli z poprzedniej metody wprowadzamy
instrukcj pobrania wstpnego do pamici podrcznej ........................... 225
Metoda 9.: Wykorzystujemy 128-bitowe rejestry rozszerzenia SSE ............. 225
Rozdzia 13.
Podzia programu na moduy i czenie moduów
zakodowanych w rónych jzykach programowania ..................... 227
13.1.
Jak realizowa poczenia midzymoduowe? .............................................. 228
13.2.
Mieszamy moduy przygotowane w rónych jzykach ................................. 232
Rozdzia 14.
Tworzenie projektu asemblerowego w rodowisku
Microsoft Visual Studio .............................................................. 239
14.1.
Wstawki asemblerowe w programie uruchamianym w jzyku C++ ............. 239
14.2.
Asemblerowa biblioteka dll w rodowisku Microsoft Visual Studio ............ 245
Rozdzia 15.
Przykadowe programy dla systemu operacyjnego MS DOS .......... 251
15.1.
Pierwsze kroki w prostym trybie graficznym ................................................ 252
15.2.
Pozorujemy gbi ........................................................................................ 255
15.3.
Generowanie fraktali ..................................................................................... 258
Rozdzia 16.
Przykadowe programy dla systemu operacyjnego Windows ......... 265
16.1.
Zegarek ......................................................................................................... 265
16.2.
Wykorzystanie biblioteki OpenGL ............................................................... 270
16.3.
Prosty edytor graficzny ................................................................................. 273
Rozdzia 17.
Biblioteki asemblerowe w rodowisku Microsoft Visual Studio .... 293
17.1.
Tworzenie projektu asemblerowego dla rodowiska Visual Studio 2008 ..... 293
17.2.
Szyfrowanie .................................................................................................. 301
17.3.
Edytor graficzny ............................................................................................ 307
17.4.
Steganografia ................................................................................................ 312
Zacznik 1.
Interesujce strony w internecie ................................................ 317
Zacznik 2.
Lista dyrektyw i pseudoinstrukcji jzyka MASM .......................... 319
Z2.1. Dyrektywy okrelajce list instrukcji procesora .......................................... 319
Z2.2. Organizacja segmentów ................................................................................ 321
Z2.3. Definiowanie staych oraz dyrektywy zwizane z nazwami
symbolicznymi .............................................................................................. 323
Z2.4. Definiowanie zmiennych .............................................................................. 324
Z2.5. Dyrektywy asemblacji warunkowej .............................................................. 326
Z2.6. Makroinstrukcje i dyrektywy z nimi zwizane .............................................. 327
Z2.7. Pseudoinstrukcje typu HLL ........................................................................... 329
Z2.8. Dyrektywy zwizane z podprogramami ........................................................ 329
Z2.9. Dyrektywy wpywajce na ksztat listingu asemblacji .................................. 330
Z2.10. Poczenia midzymoduowe ........................................................................ 332
Z2.11. Dyrektywy zwizane z diagnostyk procesu asemblacji ............................... 333
Z2.12. Inne dyrektywy i pseudoinstrukcje ............................................................... 334
6
Praktyczny kurs asemblera
Zacznik 3.
Operatory stosowane w jzyku MASM ........................................ 337
Z3.1.
Operatory stosowane w wyraeniach obliczanych w czasie asemblacji ........ 337
Z3.2.
Operatory stosowane w wyraeniach obliczanych w czasie wykonywania
programu ....................................................................................................... 341
Zacznik 4.
Symbole predefiniowane ............................................................. 343
Zacznik 5.
Przegld instrukcji procesora x86-32 .......................................... 347
Z5.1.
Instrukcje ogólne (jednostki staoprzecinkowej) ............................................. 347
Z5.2.
Instrukcje jednostki zmiennoprzecinkowej (koprocesora arytmetycznego) .... 354
Z5.3.
Instrukcje rozszerzenia MMX .......................................................................... 357
Z5.4.
Instrukcje rozszerzenia SSE ............................................................................. 360
Z5.5.
Instrukcje rozszerzenia SSE2 ........................................................................... 363
Z5.6.
Instrukcje rozszerzenia SSE3 ........................................................................... 367
Z5.7.
Instrukcje systemowe ....................................................................................... 368
Zacznik 6. Opis wybranych przerwa systemu BIOS ..................................... 371
Z6.1. Funkcje obsugi klawiatury wywoywane przerwaniem programowym
INT 16h ......................................................................................................... 371
Z6.2. Funkcje obsugi karty graficznej wywoywane przerwaniem programowym
INT 10h ......................................................................................................... 373
Zacznik 7. Wywoania funkcji systemu operacyjnego MS DOS ...................... 379
Z7.1. Funkcje realizujce odczyt lub zapis znaku z ukadu wejciowego
lub wyjciowego ........................................................................................... 379
Z7.2. Funkcje operujce na katalogach .................................................................. 381
Z7.3. Operacje na dysku ......................................................................................... 381
Z7.4. Operacje na plikach (zbiorach) dyskowych .................................................. 383
Z7.5. Operacje na rekordach w pliku ..................................................................... 385
Z7.6. Zarzdzanie pamici operacyjn ................................................................. 386
Z7.7. Funkcje systemowe ....................................................................................... 387
Z7.8. Sterowanie programem ................................................................................. 388
Z7.9. Funkcje zwizane z czasem i dat ................................................................. 389
Z7.10. Inne funkcje .................................................................................................. 390
Zacznik 8. Opis wybranych funkcji API ........................................................ 391
Z8.1. CheckDlgButton ........................................................................................... 391
Z8.2. CloseHandle .................................................................................................. 392
Z8.3. CopyFile ....................................................................................................... 393
Z8.4. CreateFile ...................................................................................................... 394
Z8.5. CreateWindowEx .......................................................................................... 396
Z8.6. DeleteFile ...................................................................................................... 399
Z8.7. ExitProcess .................................................................................................... 399
Z8.8. GetFileSize .................................................................................................... 400
Z8.9. MessageBox .................................................................................................. 400
Z8.10. ShowWindow ................................................................................................ 403
Zacznik 9. Tablica kodów ASCII oraz kody klawiszy ..................................... 405
Z9.1. Kody ASCII .................................................................................................. 405
Z9.2. Kody klawiszy .............................................................................................. 405
Zacznik 10. FTP wydawnictwa ...................................................................... 411
Skorowidz .................................................................................. 413
Zgłoś jeśli naruszono regulamin