Tytuł Asembler. Wykłady i ćwiczenia Autor Stanisław Kruk Język polski Wydawnictwo Wydawnictwo Naukowe PWN ISBN 978-83-01-15931-3 Rok wydania 2009 Warszawa Wydanie 1 liczba stron 304 Format pdf Spis treści
Od Autora 8
1. Podstawy Asemblera 9 1.1. Natura języka Asembler 9 1.2. Architektura sprzętowa komputera 10 1.3. Powstawanie i rozwój języka Asembler 10 1.4. O ergonomiczności programów 11 1.5. Procesory, pamięć i jej adresowanie; przechowywanie odwrotne 11 1.6. Wejście/wyjście 14 1.7. Przerwania; wektory przerwań 15
2. Rejestry 17 2.1. Rejestry powszechnego wykorzystania 18 2.2. Rejestry wskaźnikowe i indeksowe 20 2.3. Rejestry segmentowe 22 2.4. Wskaźnik rozkazów 25 2.5. Rejestr widoczników 25
3. Oprogramowanie systemowe DOS i BIOS 27 3.1. Funkcje BIOS 29
4. „Towarzysze" głównego procesora 31
5. Najróżniejsze systemy liczenia 33 5.1. Dwójkowy system liczenia 34 5.2. Szesnastkowy system liczenia 35 5.3. Elementarne operacje logiczne NOT, OR, AND;
prawa de Morgana 36 5.4. Liczby dwójkowe bez znaku i ze znakiem; uzupełnienie do dwóch; kod BCD 39 5.5. Proste działania na ilośćch szesnastkowych 42
6. Program uruchomieniowy DEBUG 44 6.1. Polecenia 44 6.2. Proste programy pod DEBUG-iem 51 6.3. Atuty, wady i możliwości programu DEBUG 55
7. Podstawy konstruowania programów w języku Asembler 57 7.1. Pole etykiety 61 7.2. Pole operacji (pole mnemonika) 62 7.3. Pole argumentów (operandów) 62 7.4. Pole komentarza 62 7.5. Tryby adresowania 62 7.6. Schemat tworzenia programu asemblerowego 66
8. Tablica wektorów przerwań 72
9. Dwa przerwania przeważnie używane w programach asemblerowych 76 INT 10H 76 INT 21H 78
10. Działania arytmetyczne na liczbach dwójkowych oraz w kodzie BCD 82 10.1. Dodawanie (ADD, ADC) 82 10.2. Odejmowanie (SUB, SBB) 85 10.3. Mnożenie (MUL, IMUL) 86 10.4. Dzielenie (DIV, IDIV; CBW, CWD) 87 10.5. Negacja albo uzupełnienie do dwóch (NEG) 91 10.6. Inkrementacja i dekrementacja (INC, DEC) 92 10.7. Porównywanie (bajtów lub słów) przeznaczenia ze źródłem, CMP 92
11. Operacje logiczne 94 11.1. Negacja logiczna (bajtu lub słowa), NOT 94 11.2. Testowanie lub porównywanie logiczne (bajtu lub słowa), TEST 94 11.3. Mnożenie logiczne (bajtu lub słowa), AND 94 11.4. Dodawanie logiczne (bajtów lub słów), OR 95 11.5. Logiczna nierównoważność (bajtów lub słów), XOR 95
12. Rotacje i przesunięcia logiczne, a także arytmetyczne 96 12.1. Rotacja w lewo (bajtu lub słowa), ROL 96 12.2. Rotacja w prawo (bajtu lub słowa), ROR 97 12.3. Rotacja w lewo (bajtu lub słowa) z przeniesieniem, RCL 98 12.4. Rotacja w prawo (bajtu lub słowa) z przeniesieniem, RCR 98 12.5. Przesunięcie logiczne lub arytmetyczne (bajtu lub słowa) w lewo, SHL/SAL 99 12.6. Przesunięcie logiczne (bajtu albo słowa) w prawo, SHR 100 12.7. Przesunięcie arytmetyczne (bajtu albo słowa) w prawo, SAR 101
13. Przetwarzanie łańcuchów 103 13.1. Kopiowanie (bajtu lub słowa) z jednego miejsca pamięci do drugiego, MOVS, MOVSB, MOVSW 103 13.2. Kopiowanie zawartości rejestru AL albo AX do pamięci, STOS, STOSB, STOSW 105 13.3. Ładowanie (bajtu lub słowa) łańcucha z pamięci do AL albo AX, LODS, LODSB, LODSW 105 13.4. Porównywanie (bajtu albo słowa) dwóch łańcuchów CMPS, CMPSB, CMPSW; przedrostki REPE i REPNE 106 13.5. Porównywanie (bajtu lub słowa) łańcucha z zawartością rejestru akumulatora, AL albo AX, SCAS, SCASB, SCASW 108
14. Rozkazy sterujące 109 14.1. Rozkazy sterujące transmisją 109 14.1.1. Bezwarunkowe rozkazy skoku 109 14.1.2. Rozkazy skoków warunkowych 113 14.1.3. Rozkazy pętli programowych, LOOP, LOOPZ, LOOPNZ 115 14.2. Rozkazy sterujące procesorem: CLC, CLD, CLI, CMC, ESC, HLT, LOCK, NOP, STC, STD, STI, WAIT 116
15. Operacje na stosie i adresowanie 119 15.1. Rozkazy PUSH, POP 119 15.2. Rozkazy operujące na wyraźnikach PUSHF, POPF, LAHF, SAHF 119 15.3. Rozkazy wejścia-wyjścia: IN, OUT 120 15.4. Adresowanie pamięci, adres fizyczny, adres logiczny; przechowywanie odwrotne 120 15.5. Przedrostki (prefiksy) CS:, DS:, ES:, SS: i LOCK 121 15.6. Rozkazy operujące na adresach LEA, LES, LDS 123
16. Niedługo o koprocesorze 8087 i jego programowaniu 124 16.1. Kilka dodatkowych uwag na temat programowania koprocesora 126
17. O ilośćch w koprocesorze i nie tylko 127
18. Narzędzia programisty 132 18.1. Turbo Debugger dla DOS 132 18.2. Turbo Librarian, Bibliotekarz (TLIB.EXE) – dla systemu DOS i Windows 138
19. Nowa era procesorów 151
20. Typy informacji 158
21. Technika MMX 160
22. Streaming SIMD Extensions (SSE) 163
23. Technologia AVX (Advanced Vector Extensions) 167
24. Asembler w środowisku Windows 168
25. Wydruk na pulpit 181 25.1. Wprowadzenie do aplikacji okienkowych w systemie Windows 185 25.2. Wybrane funkcje API – spis alfabetyczny 197
26. Świeże narzędzia programistyczne; program FASMW.EXE i OLLYDBG.EXE 199
Dodatek A. Kod ASCII 204
Dodatek B. Wpływ rozkazów na stan flag (istotników) rejestru EFLAGS 213
Dodatek C. Lista rozkazów: Intel 64 i IA-32 217 C.1. Rozkazy powszechnego użytkowania 217 C.2. X87 FPU i SIMD zachowania i odtworzenia stanu rejestru kontrolnego i statusu, MXCSR 221 C.3. Rozkazy zastosowane w technice MMX
TM 223 C.4. Rozkazy SSE 225 C.5. Rozkazy SSE2 227 C.6. Rozkazy SSE3 230 C.7. Rozkazy SSSE3 231 C.8. Rozkazy SSE4 232 C.9. Rozkazy systemowe 234 C.10. Rozkazy trybu 32: podtryb 64 235 C.11. Virtual-Machine Extensions (VMX) 236 C.12. Safer Mode Extensions (SMX) 236 C.13. Rozkazy Intel AVX, FMA i AES 237
Dodatek D. Wybrane rejestry 239 D.1. Rejestr flagowy (EFLAGS) 239 D.2. Rejestry sterujące: CR0, CR1, CR2, CR3, CR4 239 D.3. MXCSR – rejestr sterujący/statusu 242 D.4. Rejestr XFEATURE _ENABLED_MASK (XCR0;Extended Control Registers) 242
Dodatek E. Fizyczne podstawy komputera kwantowego 244
śladowy słownik asemblerowy 247
Epilog 255
Ćwiczenia 256
Odpowiedzi do ćwiczeń 271
Indeks 298