Asembler dla procesorów Intel. Vademecum profesjonalisty - Helion
Tytuł oryginału: Assembly Language for Intel-Based Computers
Tłumaczenie: Marcin Jędrysiak
ISBN: 83-7197-910-X
stron: 644, Format: B5, okładka: twarda
Data wydania: 2003-02-06
Księgarnia: Helion
Cena książki: 75,00 zł
Chociaż świat programowania nieodwołalnie zdominowany jest przez języki wyższego poziomu (takie jak C, C++ czy Java), znajomość asemblera jest nadal wysoko ceniona. Użycie języka maszynowego pozwala na pisanie niezwykle wydajnych programów, odwołujących się bezpośrednio do sprzętu, wykorzystujących w 100% możliwości hardware"u.
Książka "Asembler dla procesorów Intel. Vademecum profesjonalisty" to kompletny przewodnik po języku programowania najpopularniejszej rodziny procesorów. Możesz ją traktować jako podręcznik asemblera lub jako kompendium wiedzy, do którego zawsze będziesz mógł się odwołać, gdy zajdzie taka potrzeba. Znajdziesz w niej informacje dotyczące:
- architektury mikroprocesorów i zestawu rozkazów procesorów z rodziny Intel 80x86
- dyrektyw, makr i operatorów języka asembler oraz podstawowej struktury programu
- metodologii programowania oraz sposobów użycia języka asembler do tworzenia narzędzi systemowych i aplikacji
- sposobów pracy z urządzeniami sprzętowymi
- interakcji między programem napisanym w języku asembler, systemem operacyjnym a innymi aplikacjami
- śledzenia przebiegu wykonania programu za pomocą debugera
Osoby które kupowały "Asembler dla procesorów Intel. Vademecum profesjonalisty", wybierały także:
- Programowanie w asemblerze x64. Od nowicjusza do znawcy AVX 77,00 zł, (38,50 zł -50%)
- Programowanie w asemblerze x64. Od nowicjusza do znawcy AVX 77,00 zł, (46,20 zł -40%)
- Asembler. Podręcznik programisty 119,00 zł, (77,35 zł -35%)
- Asembler. Programowanie 44,89 zł, (33,67 zł -25%)
- Asembler dla procesorów ARM. Podręcznik programisty 59,00 zł, (44,25 zł -25%)
Spis treści
Asembler dla procesorów Intel. Vademecum profesjonalisty -- spis treści
Przedmowa (15)
Rozdział 1. Wprowadzenie (21)
- 1.1. Kontekst języka asembler (21)
- 1.1.1. Czym jest język asembler? (22)
- 1.1.2. Aplikacje w języku asembler (23)
- 1.1.3. Język maszynowy (25)
- 1.2. Reprezentacja danych (26)
- 1.2.1. Liczby binarne (26)
- 1.2.2. Konwersja liczb dwójkowych na dziesiętne (28)
- 1.2.3. Liczby szesnastkowe (29)
- 1.2.4. Liczby ze znakiem (30)
- 1.2.5. Przechowywanie znaków (32)
- 1.3. Wprowadzenie do języka asembler (33)
- 1.3.1. Polecenia języka asembler (33)
- 1.3.2. Prosty program napisany w Debug (34)
- 1.3.3. Polecenia narzędzia Debug (36)
- 1.4. Pytania kontrolne (37)
Rozdział 2. Architektura sprzętowa i programowa (41)
- 2.1. Architektura 16-bitowych procesorów Intel (41)
- 2.1.1. Procesor (41)
- 2.1.2. Rejestry (42)
- 2.1.3. Rejestry statusu i sterowania (45)
- 2.1.4. Znaczniki (45)
- 2.1.5. Cykl wykonania instrukcji (46)
- 2.1.6. Rodzina mikroprocesorów Intel (47)
- 2.2. Architektura 32-bitowych procesorów Intel (49)
- 2.2.1. Ulepszony cykl wykonywania rozkazów (49)
- 2.2.2. Zestaw rejestrów 32-bitowych (49)
- 2.3. System operacyjny i pamięć (50)
- 2.3.1. Historia obsługi pamięci w komputerach PC (50)
- 2.3.2. Architektura pamięci (51)
- 2.3.3. Startowa procedura systemu (52)
- 2.3.4. Obsługa grafiki (54)
- 2.3.5. Szeregowe porty komunikacyjne (54)
- 2.3.6. Pamięć tylko do odczytu (ROM) (55)
- 2.3.7. Obliczanie adresu absolutnego (55)
- 2.4. Komponenty mikrokomputera (56)
- 2.4.1. Wewnętrzne komponenty (56)
- 2.4.2. Rodzaje płyt głównych (57)
- 2.4.3. Architektura magistrali (57)
- 2.4.4. Karta graficzna (58)
- 2.4.5. Pamięć RAM (59)
- 2.4.6. Pamięć wideo (61)
- 2.4.7. Nośniki danych (61)
- 2.5. Pytania kontrolne (64)
- 2.6. Zadania programistyczne (66)
Rozdział 3. Podstawy języka asembler (71)
- 3.1. Podstawowe elementy języka asembler (71)
- 3.1.1. Stałe i wyrażenia (71)
- 3.1.2. Instrukcje (73)
- 3.1.3. Nazwy (73)
- 3.2. Przykładowy program w języku asembler (74)
- 3.3. Asemblowanie, konsolidacja oraz usuwanie błędów (76)
- 3.3.1. Borland Turbo Assembler (TASM) (78)
- 3.3.2. Microsoft Assembler (MASM) (79)
- 3.4. Dyrektywy alokacji danych (80)
- 3.4.1. Dyrektywa Define Byte (DB) (80)
- 3.4.2. Dyrektywa Define Word (DW) (82)
- 3.4.3. Dyrektywa Doubleword (DD) (83)
- 3.5. Stałe symboliczne (83)
- 3.5.1. Dyrektywa znaku równości (84)
- 3.5.2. Dyrektywa EQU (84)
- 3.5.3. Dyrektywa TEXTEQU (85)
- 3.6. Polecenia transferu danych (86)
- 3.6.1. Polecenie MOV (86)
- 3.6.2. Operandy z przemieszczeniem (88)
- 3.6.3. Polecenie XCHG (88)
- 3.7. Polecenia arytmetyczne (89)
- 3.7.1. Polecenia INC i DEC (89)
- 3.7.2. Polecenie ADD (90)
- 3.7.3. Polecenie SUB (90)
- 3.7.4. Znaczniki zmieniane przez polecenia ADD i SUB (91)
- 3.8. Podstawowe typy operandów (92)
- 3.8.1. Operandy rejestru (93)
- 3.8.2. Operandy bezpośrednie (93)
- 3.8.3. Operandy pośrednie (93)
- 3.8.4. Bezpośrednie operandy z przesunięciem (94)
- 3.9. Pytania kontrolne (95)
- 3.10. Zadania programistyczne (98)
Rozdział 4. Użycie asemblera (101)
- 4.1. Dodatkowe informacje o asemblerze i konsolidatorze (101)
- 4.1.1. Plik kodu źródłowego (101)
- 4.1.2. Plik mapy (102)
- 4.1.3. Asemblowanie i konsolidowanie aplikacji poprzez pliki wsadowe MS-DOS (103)
- 4.1.4. Modele pamięci (103)
- 4.1.5. Dyrektywy docelowego procesora (105)
- 4.2. Operatory i wyrażenia (106)
- 4.2.1. Operatory arytmetyczne (106)
- 4.2.2. Operatory OFFSET, SEG, PTR, LABEL i EVEN (108)
- 4.2.3. Operatory TYPE i SIZE (110)
- 4.2.4. Dyrektywa ENUM w Borland TASM (111)
- 4.3. Polecenia JMP i LOOP (113)
- 4.3.1. Polecenie JMP (113)
- 4.3.2. Polecenie LOOP (115)
- 4.3.3. Polecenia LOOP, LOOPW i LOOPD (116)
- 4.4. Adresowanie pośrednie (117)
- 4.4.1. Operandy pośrednie (117)
- 4.4.2. Operandy bazowe i indeksowe (120)
- 4.4.3. Operandy bazowo-indeksowe (121)
- 4.4.4. Operandy bazowo-indeksowe z przemieszczeniem (122)
- 4.5. Usuwanie błędów (123)
- 4.5.1. Wielkość operandów i błędy adresowania (124)
- 4.6. Dodatkowe polecenia 80386 i 80486 (125)
- 4.6.1. Polecenia MOVZX i MOVSX (125)
- 4.6.2. Polecenie XADD (126)
- 4.7. Użycie biblioteki konsolidowanej (126)
- 4.7.1. Wybrane procedury z dołączonej do książki biblioteki konsolidowanej (126)
- 4.7.2. Generowanie losowych wartości (130)
- 4.7.3. Zdarzenia czasowe (130)
- 4.8. Pytania kontrolne (131)
- 4.9. Zadania programistyczne (134)
Rozdział 5. Procedury i przerwania (137)
- 5.1. Operacje na stosie (137)
- 5.1.1. Polecenia PUSH i POP (139)
- 5.2. Procedury (140)
- 5.2.1. Dyrektywy PROC i ENDP (141)
- 5.2.2. Przykładowy program SUBS.ASM (141)
- 5.2.3. Zagnieżdżone wywołania procedur (143)
- 5.2.4. Procedury NEAR i FAR (144)
- 5.2.5. Użycie modeli pamięci (145)
- 5.3. Parametry procedury (147)
- 5.3.1. Przekazywanie argumentów w rejestrach (147)
- 5.4. Przerwania programowe (148)
- 5.4.1. Polecenie INT (149)
- 5.4.2. Przekierowanie wejścia-wyjścia (150)
- 5.5. Wywołania funkcji MS-DOS (151)
- 5.5.1. Funkcje wyjścia (151)
- 5.5.2. Funkcje wejścia (152)
- 5.5.3. Funkcje daty i czasu (157)
- 5.6. Obsługa klawiatury na poziomie BIOS (INT 16h) (158)
- 5.7. Sterowanie grafiką na poziomie BIOS (INT 10h) (160)
- 5.7.1. Tryby wideo i atrybuty (160)
- 5.7.2. Kolorowy tryb tekstowy (162)
- 5.7.3. Funkcje grafiki INT 10h (164)
- 5.7.4. Bezpośredni zapis do pamięci wideo (171)
- 5.8. Rekurencja (172)
- 5.9. Pytania kontrolne (174)
- 5.10. Zadania programistyczne (177)
Rozdział 6. Przetwarzanie warunkowe (181)
- 6.1. Polecenia operacji logicznych i porównania (181)
- 6.1.1. Rejestr Flags (181)
- 6.1.2. Polecenie AND (182)
- 6.1.3. Polecenie OR (183)
- 6.1.4. Polecenie XOR (185)
- 6.1.5. Polecenie NOT (186)
- 6.1.6. Polecenie NEG (186)
- 6.1.7. Polecenie TEST (186)
- 6.1.8. Polecenia BT, BTC, BTR i BTS (187)
- 6.1.9. Polecenia BSF i BSR (188)
- 6.1.10. Polecenie CMP (188)
- 6.1.11. Polecenie CMPXCHG (190)
- 6.1.12. Operatory logiczne asemblera (190)
- 6.2. Skoki warunkowe (191)
- 6.2.1. Polecenie Jwarunek (191)
- 6.2.2. Generowanie kodu dla skoków warunkowych (dla procesorów 386 i nowszych) (194)
- 6.2.3. Przykłady zastosowania skoków warunkowych (195)
- 6.2.4. Polecenie SETwarunek (200)
- 6.3. Pętle warunkowe (201)
- 6.3.1. Polecenia LOOPZ i LOOPE (201)
- 6.3.2. Polecenia LOOPNZ i LOOPNE (202)
- 6.4. Struktury logiczne wysokiego poziomu (202)
- 6.4.1. Prosta instrukcja IF (203)
- 6.4.2. Złożona instrukcja IF (203)
- 6.4.3. Struktura WHILE (204)
- 6.4.4. Struktura REPEAT-UNTIL (205)
- 6.4.5. Struktura CASE (207)
- 6.4.6. Tablica przesunięć procedur (208)
- 6.4.7. Automat o skończonej liczbie stanów (209)
- 6.5. Pytania kontrolne (213)
- 6.6. Zadania programistyczne (216)
Rozdział 7. Operacje na liczbach całkowitych (223)
- 7.1. Polecenia przesunięcia i obrotu (223)
- 7.1.1. Polecenie SHL (223)
- 7.1.2. Polecenia SHLD i SHRD (225)
- 7.1.3. Polecenie SHR (226)
- 7.1.4. Polecenia SAL i SAR (226)
- 7.1.5. Polecenie ROL (227)
- 7.1.6. Polecenie ROR (228)
- 7.1.7. Polecenia RCL i RCR (228)
- 7.2. Przykładowe zastosowania (229)
- 7.2.1. Jednoczesne przesunięcie wielu bajtów (229)
- 7.2.2. Szybkie mnożenie i dzielenie (230)
- 7.2.3. Wyświetlenie bajta w formacie binarnym (230)
- 7.2.4. Wydzielenie ciągu bitowego (231)
- 7.2.5. Dyrektywa RECORD (232)
- 7.3. Rozszerzone operacje dodawania i odejmowania (235)
- 7.3.1. Polecenie ADC (235)
- 7.3.2. Polecenie SBB (236)
- 7.4. Mnożenie i dzielenie (237)
- 7.4.1. Polecenie MUL (238)
- 7.4.2. Polecenie IMUL (239)
- 7.4.3. Polecenie DIV (240)
- 7.4.4. Polecenie IDIV (241)
- 7.4.5. Polecenia CBW, CWD, CDQ i CWDE (241)
- 7.4.6. Zapobieganie przepełnieniu dzielenia (242)
- 7.5. Zastosowanie - bezpośrednie wyjście wideo (243)
- 7.5.1. Procedura Set_videoseg (243)
- 7.5.2. Procedura Writechar_direct (243)
- 7.5.3. Procedura Writestring_direct (244)
- 7.6. Operacje na liczbach ASCII i upakowanych liczbach dziesiętnych (245)
- 7.6.1. Polecenie AAA (246)
- 7.6.2. Polecenie AAS (246)
- 7.6.3. Polecenie AAM (247)
- 7.6.4. Polecenie AAD (247)
- 7.6.5. Polecenia DAA i DAS (247)
- 7.7. Pytania kontrolne (248)
- 7.8. Zadania programistyczne (251)
- 7.8.1. Manipulacja bitami (251)
- 7.8.2. Zbiory bitowe (251)
- 7.8.3. Liczby pierwsze (253)
- 7.8.4. Operacje arytmetyczne na dużych liczbach (253)
- 7.8.5. Bezpośrednie wyjście wideo (255)
Rozdział 8. Struktury i makra (257)
- 8.1. Struktury (257)
- 8.2. Wprowadzenie do makr (260)
- 8.2.1. Makra z parametrami (261)
- 8.2.2. Definiowanie makra (262)
- 8.2.3. Przykład - makro mDisplayStr (263)
- 8.2.4. Przykład - makro mGotoRowCol (264)
- 8.2.5. Makra do alokacji przestrzeni (265)
- 8.2.6. Dyrektywa LOCAL (265)
- 8.3. Specjalne techniki użycia makr (266)
- 8.3.1. Zagnieżdżone makra (266)
- 8.3.2. Wywoływanie procedur przez makro (267)
- 8.3.3. Dyrektywy warunkowego asemblowania (268)
- 8.3.4. Dyrektywa EXITM (270)
- 8.3.5. Operatory makra (271)
- 8.4. Biblioteka prostych makr (273)
- 8.4.1. Makro mWriteliteral (zapis dosłownego ciągu) (273)
- 8.4.2. Makro mCondCall (wywołanie warunkowe) (273)
- 8.4.3. Makro mCompJmp (porównanie i skok) (274)
- 8.4.4. Makro mMult16 (rozszerzone mnożenie) (274)
- 8.4.5. Makro mMove (kopiowanie między adresami pamięci) (275)
- 8.4.6. Makro mLongLoop (rozszerzona pętla) (276)
- 8.5. Zaawansowane makra i dyrektywy (277)
- 8.5.1. Dyrektywa REPT (277)
- 8.5.2. Powiązana lista (277)
- 8.5.3. Dyrektywa IRP (279)
- 8.5.4. Makro rozszerzonego skoku (280)
- 8.5.5. Ogólne makra przesunięcia i obrotu (281)
- 8.5.6. Dodatkowe wskazówki (282)
- 8.6. Pytania kontrolne (289)
- 8.7. Zadania programistyczne (291)
Rozdział 9. Konwersje liczbowe i biblioteki (295)
- 9.1. Wprowadzenie (295)
- 9.2. Metody translacji znaków (296)
- 9.2.1. Polecenie XLAT (296)
- 9.2.2. Filtrowanie znaków (297)
- 9.2.3. Szyfrowanie tekstu (298)
- 9.3. Parametry stosu (300)
- 9.3.1. Tworzenie ramki stosu (300)
- 9.3.2. Przekazanie argumentów według odwołania (303)
- 9.3.3. Polecenia LDS, LES, LFS, LGS i LSS (305)
- 9.3.4. Polecenie ENTER (306)
- 9.3.5. Polecenie LEAVE (306)
- 9.3.6. Przekazywanie argumentów na sposób języka C (307)
- 9.3.7. Deklaracje procedur w Borland TASM (309)
- 9.3.8. Dyrektywa RETURNS (TASM) (310)
- 9.3.9. Deklaracje procedur w Microsoft MASM (310)
- 9.4. Oddzielne asemblowanie modułów (313)
- 9.4.1. Dyrektywa PUBLIC (313)
- 9.4.2. Tworzenie programu składającego się z wielu modułów (313)
- 9.5. Tworzenie biblioteki konsolidowanej (315)
- 9.6. Konwersja liczb binarnych na ASCII (318)
- 9.6.1. Procedura Writeint (319)
- 9.7. Konwersja ASCII na liczby binarne (320)
- 9.7.1. Procedura Readint (320)
- 9.8. Pytania kontrolne (323)
- 9.9. Zadania programistyczne (325)
Rozdział 10. Ciągi i tablice (331)
- 10.1. Składowanie ciągów w pamięci (331)
- 10.1.1. Wprowadzenie (331)
- 10.1.2. Typy ciągów (331)
- 10.2. Prymitywy ciągu (333)
- 10.2.1. Polecenie MOVS (336)
- 10.2.2. Potrzeba szybkości (337)
- 10.2.3. Polecenie CMPS (338)
- 10.2.4. Polecenie SCAS (340)
- 10.2.5. Polecenie STOS (342)
- 10.2.6. Polecenie LODS (342)
- 10.3. Biblioteka procedur obsługi ciągów (343)
- 10.3.1. Procedura Str_compare (344)
- 10.3.2. Procedura Str_copy (345)
- 10.3.3. Procedura Str_length (346)
- 10.3.4. Procedura Str_getline (347)
- 10.3.5. Procedura Readstring (348)
- 10.3.6. Procedura Str_ucase (349)
- 10.3.7. Procedura Writestring (349)
- 10.3.8. Procedura Str_write (350)
- 10.4. Program testujący bibliotekę procedur obsługi ciągów (351)
- 10.5. Pytania kontrolne (353)
- 10.6. Zadania programistyczne (355)
Rozdział 11. Praca z dyskami (363)
- 11.1. Podstawy pracy z dyskami (363)
- 11.1.1. Charakterystyka fizyczna i logiczna (363)
- 11.1.2. Typy dysków (366)
- 11.1.3. Katalog dysku (367)
- 11.1.4. Struktura katalogu (368)
- 11.1.5. Przykładowy katalog dyskowy (370)
- 11.1.6. Tablica alokacji plików (FAT) (371)
- 11.1.7. Odczyt i zapis sektorów dysku (372)
- 11.2. Program wyświetlający sektory dysku (374)
- 11.3. Dekodowanie tablicy alokacji plików (378)
- 11.3.1. Program wyświetlający klastry (379)
- 11.4. Funkcje plików na poziomie systemu (383)
- 11.4.1. Kody błędów DOS (384)
- 11.4.2. Wyświetlanie komunikatów o błędach (385)
- 11.4.3. Specyfikacja pliku (387)
- 11.4.4. Ogon poleceń DOS (387)
- 11.5. Manipulacja dyskami i katalogami (389)
- 11.5.1. Ustawienie domyślnego dysku (0Eh) (389)
- 11.5.2. Uzyskanie domyślnego dysku (19h) (390)
- 11.5.3. Uzyskanie informacji o dostępnej przestrzeni dyskowej (36h) (390)
- 11.5.4. Uzyskanie aktualnego katalogu (47h) (390)
- 11.5.5. Ustawienie aktualnego katalogu (3Bh) (391)
- 11.5.6. Tworzenie podkatalogu (39h) (391)
- 11.5.7. Usunięcie podkatalogu (3Ah) (392)
- 11.5.8. Uzyskanie parametrów urządzenia (44h) (392)
- 11.6. Pytania kontrolne (396)
- 11.7. Zadania programistyczne (398)
- 11.7.1. Zadania wykorzystujące program Sector Display (399)
Rozdział 12. Przetwarzanie plików (403)
- 12.1. Manipulacja plikami (403)
- 12.1.1. Wprowadzenie (403)
- 12.1.2. Uzyskanie lub ustawienie atrybutu pliku (43h) (404)
- 12.1.3. Usunięcie pliku (41h) (405)
- 12.1.4. Zmiana nazwy pliku (56h) (405)
- 12.1.5. Uzyskanie i ustawienie daty i czasu pliku (406)
- 12.1.6. Odnalezienie pierwszego szukanego pliku (4Eh) (407)
- 12.1.7. Odnalezienie kolejnego szukanego pliku (4Fh) (407)
- 12.1.8. Ustawienie adresu DTA (1Ah) (408)
- 12.2. Zastosowanie - wyświetlenie nazw plików i informacji o dacie (408)
- 12.3. Usługi wejścia-wyjścia (412)
- 12.3.1. Tworzenie pliku (3Ch) (412)
- 12.3.2. Otwarcie pliku (3Dh) (414)
- 12.3.3. Zamknięcie pliku (3Eh) (415)
- 12.3.4. Odczyt z pliku lub urządzenia (3Fh) (415)
- 12.3.5. Zapis do pliku lub urządzenia (40h) (416)
- 12.4. Bezpośredni dostęp do plików (416)
- 12.4.1. Przesunięcie wskaźnika pliku (42h) (417)
- 12.5. Odczyt pliku bitmapowego (419)
- 12.6. Pytania kontrolne (424)
- 12.7. Zadania programistyczne (425)
- 12.7.1. Manipulacja katalogami dyskowymi (427)
Rozdział 13. Interfejs do języków wysokiego poziomu (431)
- 13.1. Wprowadzenie (431)
- 13.1.1. Ogólne konwencje (431)
- 13.2. Tworzenie wbudowanego kodu asemblera (434)
- 13.2.1. Microsoft Visual C++ (434)
- 13.2.2. Zastosowanie: szyfrowanie pliku (437)
- 13.3. Konsolidacja z programami C++ (439)
- 13.3.1. Konsolidacja z Borland C++ (440)
- 13.3.2. Przykład: program ReadSector (441)
- 13.3.3. Przykład: duże liczby losowe (446)
- 13.3.4. Konsolidacja z Visual C++ w trybie chronionym (448)
- 13.4. Pytania kontrolne (454)
- 13.5. Zadania programistyczne (456)
Rozdział 14. Tematy dla zaawansowanych programistów (część I) (459)
- 14.1. Wskaźniki i pośredniość (459)
- 14.1.1. Polecenie LEA (459)
- 14.1.2. Skoki i wywołania pośrednie (460)
- 14.1.3. Tablica wskaźników 32-bitowych (462)
- 14.2. Sterowanie procesorem i porty wejścia-wyjścia (462)
- 14.2.1. Polecenia ESC, HLT, LOCK i WAIT (462)
- 14.2.2. Porty wejścia-wyjścia (463)
- 14.2.3. Polecenia do manipulacji znacznikami (465)
- 14.3. Definiowanie segmentów (466)
- 14.3.1. Jawne definicje segmentów (467)
- 14.3.2. Składnia definicji segmentu (468)
- 14.3.3. Dyrektywa ASSUME (470)
- 14.3.4. Zastępowanie segmentów (471)
- 14.3.5. Łączenie segmentów (472)
- 14.4. Dynamiczna alokacja pamięci (473)
- 14.4.1. Modyfikacja bloków pamięci (473)
- 14.4.2. Alokacja pamięci (474)
- 14.4.3. Zwolnienie alokowanej pamięci (474)
- 14.5. Struktura pliku wykonywalnego (475)
- 14.5.1. Programy COM (476)
- 14.5.2. Programy EXE (477)
- 14.6. Pytania kontrolne (478)
- 14.7. Zadania programistyczne (481)
Rozdział 15. Tematy dla zaawansowanych programistów (część II) (483)
- 15.1. Urządzenia systemowe (483)
- 15.1.1. Zegar czasu rzeczywistego (483)
- 15.1.2. Procesor (485)
- 15.1.3. Obliczanie czasu wykonania rozkazów (485)
- 15.1.4. Odczyt z pamięci (486)
- 15.2. Kodowanie poleceń (procesory 8086 i 8088) (488)
- 15.2.1. Rozkazy jednobajtowe (489)
- 15.2.2. Operandy bezpośrednie (490)
- 15.2.3. Rozkazy trybu rejestru (490)
- 15.2.4. Rozkazy trybu pamięci (491)
- 15.3. Obsługa przerwań (494)
- 15.3.1. Przerwania sprzętowe (496)
- 15.3.2. Rozkazy sterowania przerwaniami (498)
- 15.3.3. Tworzenie procedury obsługi przerwania (498)
- 15.3.4. Programy rezydujące w pamięci (501)
- 15.3.5. Zastosowanie: program No_Reset (502)
- 15.4. Definiowanie liczb rzeczywistych (506)
- 15.4.1. Dyrektywa Define Doubleword (DD) (507)
- 15.4.2. Dyrektywa Define Quadword (DQ) (507)
- 15.4.3. Dyrektywa Define Tenbyte (DT) (507)
- 15.5. Polecenia zmiennoprzecinkowe (508)
- 15.5.1. Koprocesor zmiennoprzecinkowy (508)
- 15.5.2. Formaty rozkazów (509)
- 15.5.3. Przykład - obliczanie wyrażenia (511)
- 15.5.4. Zastosowanie: program do obliczania wynagrodzeń (513)
- 15.6. Pytania kontrolne (515)
- 15.7. Zadania programistyczne (516)
Dodatek A Przewodnik po liczbach dwójkowych i szesnastkowych (521)
- A.1. Liczby dwójkowe (521)
- A.1.1. Przykłady dodawania (521)
- A.1.2. Konwersja liczb dwójkowych na dziesiętne (522)
- A.1.3. Konwersja liczb dziesiętnych na dwójkowe (524)
- A.2. Liczby szesnastkowe (525)
- A.2.1. Konwersja liczb dwójkowych na szesnastkowe (525)
- A.2.2. Konwersja liczb szesnastkowych na dziesiętne (526)
- A.2.3. Wartości poszczególnych cyfr szesnastkowych (527)
- A.2.4. Konwersja liczb dziesiętnych na szesnastkowe (527)
- A.3. Operacje arytmetyczne (528)
- A.3.1. Liczby ze znakiem i bez znaku (528)
- A.3.2. Notacja z uzupełnieniem dwójkowym (528)
- A.3.3. Odejmowanie liczb dwójkowych (530)
- A.3.4. Dodawanie i odejmowanie liczb szesnastkowych (530)
- A.4. Pytania kontrolne (531)
- A.5. Odpowiedzi na pytania kontrolne (533)
Dodatek B Użycie narzędzia Debug (535)
- B.1. Wprowadzenie do programu Debug (535)
- B.2. Podsumowanie poleceń programu Debug (537)
- B.2.1.Parametry poleceń (538)
- B.3. Omówienie wszystkich poleceń programu Debug (540)
- B.3.1. Pomoc (?) (540)
- B.3.2. Polecenie A (asembluj) (540)
- B.3.3. Polecenie C (porównaj) (541)
- B.3.4. Polecenie D (zrzut) (541)
- B.3.5. Polecenie E (wprowadź) (543)
- B.3.6. Polecenie F (wypełnij) (543)
- B.3.7. Polecenie G (uruchom) (543)
- B.3.8. Polecenie H (operacje arytmetyczne na liczbach szesnastkowych) (544)
- B.3.9. Polecenie I (wprowadź) (544)
- B.3.10. Polecenie L (załaduj) (544)
- B.3.11. Polecenie M (przenieś) (545)
- B.3.12. Polecenie N (nazwij) (545)
- B.3.13. Polecenie P (wykonaj) (546)
- B.3.14. Polecenie Q (wyjdź) (546)
- B.3.15. Polecenie R (rejestr) (547)
- B.3.16. Polecenie S (szukaj) (548)
- B.3.17. Polecenie T (śledź) (548)
- B.3.18. Polecenie U (deasembluj) (548)
- B.3.19. Polecenie W (zapisz) (549)
- B.4. Domyślne segmenty (549)
- B.5. Użycie skryptów w programie Debug (550)
Dodatek C Microsoft CodeView (553)
- C.1. Wprowadzenie (553)
- C.2. Wyrażenia (553)
- C.3. Polecenia klawiszowe (555)
- C.4. Sterowanie wykonaniem programu (556)
- C.5. Kontrola i modyfikacja danych (556)
- C.5.1. Kontrola i modyfikacja danych oraz wyrażeń (556)
- C.5.2. Kontrola zmiennych w czasie wykonywania programu (558)
- C.5.3. Bezpośrednie wyjście komunikatów do pliku i drukarki (558)
- C.6. Krótki przewodnik po programie CodeView (558)
Dodatek D Borland Turbo Debugger (561)
- D.1. Przygotowywanie programów do debugowania (561)
- D.2. Wybrane opcje wiersza poleceń (561)
- D.3. Śledzenie programów (562)
- D.3.1. Okno Stack (View, Stack) (562)
- D.3.2. Okno Execution History (View, Execution) (562)
- D.3.3. Menu Run (562)
- D.4. Punkty kontrolne (562)
- D.5. Wyrażenia asemblera (564)
- D.6. Kontrola i modyfikacja danych (564)
- D.6.1. Okno Variables (View, Variables) (564)
- D.6.2. Okno Watch (View, Watches) (565)
- D.6.3. Zrzut pamięci (566)
- D.6.4. Okno Inspector (566)
- D.6.5. Okno dialogowe Evaluate, Modify (567)
- D.7. Konfiguracja programu Turbo Debugger (567)
Dodatek E Przewodnik po przykładowych programach (569)
- E.1. Informacje o dołączonych do książki plikach (569)
- E.2. Zawartość pliku MACROS.INC (571)
- E.3. Procedury w bibliotece konsolidowanej (572)
- E.4. Przykładowe programy z poszczególnych rozdziałów (574)
Dodatek F Zestaw rozkazów procesora Intel (577)
- F.1. Wprowadzenie (577)
- F.1.1. Znaczniki (577)
- F.1.2. Opisy rozkazów i zastosowane formaty (578)
- F.2. Zestaw rozkazów (579)
Dodatek G Przerwania BIOS i DOS (605)
- G.1. Ogólna lista przerwań (605)
- G.2. Funkcje przerwania 21h (usługi DOS) (607)
- G.3. Funkcje przerwania 10h (obsługa grafiki) (610)
- G.4. Funkcje przerwania 16h (klawiatura) (612)
Dodatek H Kody ASCII i kody klawiszy (613)
- H.1. Znaki sterujące ASCII (613)
- H.2. Kombinacje Alt-klawisz (614)
- H.3. Kody klawiszy (615)
- H.3.1. Klawisze funkcyjne (615)
- H.3.2. Inne klawisze specjalne (615)
- H.4. Normalne i rozszerzone znaki ASCII (616)
Skorowidz (617)