Praktyczny_kurs_asemblera_Wydanie_II_pkase2.pdf

(695 KB) Pobierz
Idź do
• Spis treści
• Przykładowy rozdział
• Skorowidz
Katalog książek
• Katalog online
• Zamów drukowany
katalog
Twój koszyk
• Dodaj do koszyka
Cennik i informacje
• Zamów informacje
o nowościach
• Zamów cennik
Czytelnia
• Fragmenty książek
online
Praktyczny kurs
asemblera. Wydanie II
Autor: Eugeniusz Wróbel
ISBN: 978-83-246-2732-5
Format: 158×235, stron: 424
Kontakt
Helion SA
ul. Kościuszki 1c
44-100 Gliwice
tel. 32 230 98 63
e-mail: helion@helion.pl
© Helion 1991–2011
• Dowiedz się, do czego może Ci się przydać asembler
• Poznaj architekturę i sposób działania procesorów Intel
• Naucz się pisać wydajne programy dla systemów DOS i Windows
Zobacz, na co Cię stać z asemblerem!
Programowanie w języku niskiego poziomu – choć czasem nieco uciążliwe – daje bardzo dużą
swobodę w kwestii wykorzystania sprzętowych zasobów komputera i oferuje niemal
nieograniczoną kontrolę nad sposobem działania programu. Aplikacje napisane za pomocą
asemblera są bardzo szybkie i wydajne, a ponadto wymagają o wiele mniejszej ilości pamięci
operacyjnej niż analogiczny kod, opracowany w językach wysokiego poziomu, takich jak C++,
Java czy Visual Basic. Jeśli jesteś zainteresowany poszerzeniem swoich umiejętności
programistycznych, z pewnością nadszedł czas, aby sięgnąć po asembler.
Książka „Praktyczny kurs asemblera. Wydanie II” wprowadzi Cię w podstawowe zagadnienia
związane z zastosowaniem języka niskiego poziomu do programowania komputerów opartych
na architekturze x86-32 procesorów Intel (oraz AMD). Poznasz sposoby wykorzystania zasobów
sprzętowych, zasadę działania procesora i listę jego instrukcji. Nauczysz się też, jak używać
różnych trybów adresowania w celu optymalnego zarządzania zawartością rejestrów i pamięci.
Dowiesz się, jak prawidłowo pisać, łączyć, kompilować i uruchamiać programy, a także poznasz
praktyczne przykłady zastosowania asemblera.
• Podstawowe informacje na temat asemblera i architektury x86-32 procesorów Intel (oraz AMD)
• Przegląd narzędzi przydatnych przy tworzeniu i uruchamianiu kodu
• Sposoby adresowania pamięci i korzystanie z rejestrów procesora
• Lista instrukcji procesorów o architekturze x86-32
• Definiowanie i używanie zmiennych
• Tworzenie podprogramów i makroinstrukcji
• Korzystanie z funkcji systemu MS DOS i BIOS-a oraz windowsowych bibliotek typu API
• Stosowanie asemblera do tworzenia programów uruchamianych pod systemem Windows
• Tworzenie asemblerowych bibliotek typu dll z wykorzystaniem środowiska Microsoft
Visual Studio
• Przegląd metod optymalizacji kodu
• Praktyczne przykłady programów wykorzystujących język asemblera
Wykorzystaj w pełni potencjał asemblera!
Spis tre ci
Ostatni wykäad Eugeniusza Wróbla ................................................. 7
Wprowadzenie do drugiego wydania ................................................ 9
Rozdziaä 1.
Wprowadzenie ............................................................................. 11
1.1.
1.2.
1.3.
1.4.
1.5.
Co to jest asembler? ........................................................................................ 11
Dlaczego programowaü w j zyku asemblera? ................................................ 14
Dlaczego warto poznaü j zyk asemblera? ....................................................... 16
Wymagane umiej tno ci ................................................................................. 16
Konwencje stosowane w ksi ce .................................................................... 17
„Hello, world!” pod kontrol systemu operacyjnego MS DOS ....................... 22
„Hello, world!” pod kontrol systemu operacyjnego Windows ...................... 25
Rozdziaä 2.
Pierwszy program w asemblerze ................................................... 21
2.1.
2.2.
Rozdziaä 3.
Architektura procesorów rodziny x86-32
widziana oczami programisty ........................................................ 33
3.1.
3.2.
3.3.
3.4.
3.5.
3.6.
3.7.
Rejestry procesora 8086 .................................................................................. 34
Zwi kszamy rozmiar rejestrów — od procesora 80386 do Intel Core i7 ........ 38
Zwi kszamy liczb rejestrów — od procesora i486 do Intel Core i7 .............. 39
Segmentowa organizacja pami ci ................................................................... 44
Adresowanie argumentów ............................................................................... 48
Adresowanie argumentów w pami ci operacyjnej .......................................... 49
Architektura x86-32e ...................................................................................... 52
Asembler MASM ............................................................................................ 56
Program konsoliduj cy — linker .................................................................... 60
Programy uruchomieniowe ............................................................................. 62
Microsoft CodeView ....................................................................................... 64
Microsoft WinDbg .......................................................................................... 67
OllyDbg .......................................................................................................... 68
rodowiska zintegrowane ............................................................................... 70
Microsoft Programmer’s WorkBench (PWB) ................................................. 70
rodowisko zintegrowane MASM32 SDK ..................................................... 71
rodowisko zintegrowane RadASM ............................................................... 74
WinAsm Studio ............................................................................................... 74
Microsoft Visual Studio .................................................................................. 75
Rozdziaä 4.
Narzödzia ..................................................................................... 55
4.1.
4.2.
4.3.
4.4.
4.5.
4
Praktyczny kurs asemblera
Rozdziaä 5.
Lista instrukcji procesorów x86-32 ............................................... 81
5.1.
5.2.
5.3.
5.4.
5.5.
5.6.
5.7.
5.8.
Instrukcje ogólne — jednostki staáoprzecinkowej ........................................... 84
Koprocesor arytmetyczny — instrukcje jednostki zmiennoprzecinkowej ...... 87
Instrukcje rozszerzenia MMX ......................................................................... 90
Instrukcje rozszerzenia SSE ............................................................................ 93
Instrukcje rozszerzenia SSE2 .......................................................................... 97
Instrukcje rozszerzenia SSE3, SSSE3 oraz SSE4 ......................................... 100
Instrukcje systemowe .................................................................................... 101
Planowane rozszerzenie AVX ....................................................................... 102
Uproszczone dyrektywy definiuj ce segmenty ............................................. 105
Peáne dyrektywy definiowania segmentów ................................................... 111
Dyrektywy pomocnicze ................................................................................ 114
Zmienne caákowite ........................................................................................ 124
Zmienne zmiennoprzecinkowe ..................................................................... 127
Definiowanie tablic i áa cuchów ................................................................... 128
Struktury zmiennych ..................................................................................... 130
Dyrektywa definiuj ca pola bitowe ............................................................... 133
Stos ............................................................................................................... 137
Wywoáanie i organizacja prostych podprogramów ....................................... 140
Dyrektywa PROC – ENDP ........................................................................... 141
Parametry wywoáania podprogramu ............................................................. 146
Zmienne lokalne ............................................................................................ 155
Makroinstrukcja definiowana ........................................................................ 157
Dyrektywa LOCAL ...................................................................................... 162
Dyrektywy asemblacji warunkowej .............................................................. 163
Makroinstrukcje niedefiniowane ................................................................... 166
Makroinstrukcje tekstowe ............................................................................. 167
Makroinstrukcje operuj ce na áa cuchach (na tekstach) ............................... 168
Co ma prawo przerwaü wykonanie naszego programu? ............................... 171
Obsáuga klawiatury oraz funkcje grafiki na poziomie BIOS ......................... 174
Wywoáywanie podprogramów systemu operacyjnego MS DOS .................. 180
Systemowe programy biblioteczne ............................................................... 188
Pierwsze okno ............................................................................................... 191
Struktury programowe typu HLL .................................................................. 197
Program generatora okien Prostart ................................................................ 199
Kiedy i co powinni my optymalizowaü w programie? ................................. 209
Optymalizujemy program przygotowany dla procesora x86-32 ................... 211
Modele pami ci — mieszanie kodów 16- i 32-bitowych .............................. 211
Wyrównywanie danych ................................................................................. 212
Pami ü podr czna ......................................................................................... 213
Unikanie rozgaá zie (skoków) ..................................................................... 215
Opó nienia wynikaj ce z pierwszego wykonania oraz rozwijanie p tli ........ 216
Opó nienia zwi zane z zapisywaniem i odczytywaniem .............................. 217
Rozdziaä 6.
Ogólna struktura programu asemblerowego ................................ 105
6.1.
6.2.
6.3.
Rozdziaä 7.
Definiowanie i stosowanie zmiennych ......................................... 123
7.1.
7.2.
7.3.
7.4.
7.5.
Rozdziaä 8.
Podprogramy ............................................................................. 137
8.1.
8.2.
8.3.
8.4.
8.5.
Rozdziaä 9.
Makroinstrukcje oraz dyrektywy asemblacji warunkowej ............. 157
9.1.
9.2.
9.3.
9.4.
9.5.
9.6.
10.1.
10.2.
10.3.
11.1.
11.2.
11.3.
11.4.
12.1.
12.2.
Rozdziaä 10. Funkcje systemu MS DOS oraz BIOS .......................................... 171
Rozdziaä 11. Programowanie w asemblerze w rodowisku Windows ................ 187
Rozdziaä 12. Wybrane zagadnienia optymalizacji programu .............................. 207
Spis tre ci
12.3.
12.4.
5
Wspieramy proces optymalizacji za pomoc programu Vtune ..................... 218
Na ile ró nych sposobów mo emy zakodowaü kopiowanie tablic? .............. 219
Metoda 1.: Z wykorzystaniem instrukcji MOVSB ........................................ 221
Metoda 2.: Z wykorzystaniem instrukcji MOVSD ....................................... 221
Metoda 3.: Jawna p tla z instrukcjami MOV ................................................ 222
Metoda 4.: P tla z instrukcj MOV, rozwini ta ............................................ 222
Metoda 5.: P tla rozwini ta, grupowanie operacji odczytu i zapisu .............. 223
Metoda 6.: Wykorzystujemy rejestry MMX ................................................. 223
Metoda 7.: Modyfikujemy metod 6., stosuj c instrukcje MOVNTQ
i SFENCE ............................................................................................... 224
Metoda 8.: Na pocz tku p tli z poprzedniej metody wprowadzamy
instrukcj pobrania wst pnego do pami ci podr cznej ........................... 225
Metoda 9.: Wykorzystujemy 128-bitowe rejestry rozszerzenia SSE ............. 225
Rozdziaä 13. Podziaä programu na moduäy i äñczenie moduäów
zakodowanych w ró nych jözykach programowania ..................... 227
13.1.
13.2.
Jak realizowaü poá czenia mi dzymoduáowe? .............................................. 228
Mieszamy moduáy przygotowane w ró nych j zykach ................................. 232
Rozdziaä 14. Tworzenie projektu asemblerowego w rodowisku
Microsoft Visual Studio .............................................................. 239
14.1.
14.2.
15.1.
15.2.
15.3.
16.1.
16.2.
16.3.
17.1.
17.2.
17.3.
17.4.
Wstawki asemblerowe w programie uruchamianym w j zyku C++ ............. 239
Asemblerowa biblioteka dll w rodowisku Microsoft Visual Studio ............ 245
Pierwsze kroki w prostym trybie graficznym ................................................ 252
Pozorujemy gá bi ........................................................................................ 255
Generowanie fraktali ..................................................................................... 258
Zegarek ......................................................................................................... 265
Wykorzystanie biblioteki OpenGL ............................................................... 270
Prosty edytor graficzny ................................................................................. 273
Tworzenie projektu asemblerowego dla rodowiska Visual Studio 2008 ..... 293
Szyfrowanie .................................................................................................. 301
Edytor graficzny ............................................................................................ 307
Steganografia ................................................................................................ 312
Rozdziaä 15. Przykäadowe programy dla systemu operacyjnego MS DOS .......... 251
Rozdziaä 16. Przykäadowe programy dla systemu operacyjnego Windows ......... 265
Rozdziaä 17. Biblioteki asemblerowe w rodowisku Microsoft Visual Studio .... 293
Zaäñcznik 1. Interesujñce strony w internecie ................................................ 317
Zaäñcznik 2. Lista dyrektyw i pseudoinstrukcji jözyka MASM .......................... 319
Z2.1.
Z2.2.
Z2.3.
Dyrektywy okre laj ce list instrukcji procesora .......................................... 319
Organizacja segmentów ................................................................................ 321
Definiowanie staáych oraz dyrektywy zwi zane z nazwami
symbolicznymi .............................................................................................. 323
Z2.4. Definiowanie zmiennych .............................................................................. 324
Z2.5. Dyrektywy asemblacji warunkowej .............................................................. 326
Z2.6. Makroinstrukcje i dyrektywy z nimi zwi zane .............................................. 327
Z2.7. Pseudoinstrukcje typu HLL ........................................................................... 329
Z2.8. Dyrektywy zwi zane z podprogramami ........................................................ 329
Z2.9. Dyrektywy wpáywaj ce na ksztaát listingu asemblacji .................................. 330
Z2.10. Poá czenia mi dzymoduáowe ........................................................................ 332
Z2.11. Dyrektywy zwi zane z diagnostyk procesu asemblacji ............................... 333
Z2.12. Inne dyrektywy i pseudoinstrukcje ............................................................... 334
Zgłoś jeśli naruszono regulamin