Version 2.0 Aktualisiert: 17.09.06



Hier noch etwas zum Inhalt unseres Buches (das weit über diese immer noch veraltete Homepage hinausgeht!) und am Ende noch ein Hinweise auf ein paar kleinere Fehler der 1. Auflage die sich in unser Buch eingeschlichen haben:

Inhaltsverzeichnis der 2. Auflage:

Inhaltsverzeichnis der 2. Auflage gibt es hier als PDF!
Das Buch hat 600 Seiten und wird mit einer CD-Ausgeliefert. Neuigkeiten: Stark erweitertes Coprozessor Kapitel, neue Befehle, neue Aufgaben, Kapitel über den Befehl CPUID, Optimieren von Code, Reverse Engineering, Infos zu Linux und NASM.
Fehler in der 2. Auflage:
Bekanntermaßen ist es nicht möglich ein Buch ohne Fehler zu schreiben. Bis jetzt hab ich nur einen gefunden: Im Inhaltsverzeichnis steht NABFBFSM. Das soll wohl NASM heißen würde ich sagen. Ansonsten bis jetzt keine bekannt!

Kurze Inhaltsangabe (1. Auflage):

  1. Theoretische Grundlagen: Bits, Bytes, Register, Stack usw.
  2. Mathematisches: Hexadezimal,Dezimal,Dualsystem. Umwandlungen und Rechenoperationen. Halbaddierer usw.
  3. Erste Programmierschritte: Assembler und Linker, "Hallo Welt" etc.
  4. Möglichkeiten des Assemblers
  5. Befehle und Adressierungsarten
  6. DOS unter der Lupe: Interrupts, COM & EXE, PSP ...
  7. Programmieren - Die Grundlagen: Arbeiten mit Texten und Zahlen, externe FAR-Prozeduren, Kommandozeile, Ports, Dateien
  8. Grtafikprogramme: VGA & Co, Feuer-Demo, Geschwindikeitsoptimierung, Bildbetrachter
  9. TSR´s und Coprozessor.
  10. Fehlersuche mit dem Debugger.
  11. Assembler in Hochsprachen. Teil II des Buches (von Joachim): Assembler unter Windows.
  12. Grundlagen zur Windows-Programmierung: Was ist ein API, eine DLL? Messagebox, 32-Bit, FLAT-Modell uvm.
  13. Fenster, Dialogboxen und Ressourcen: Fenster, Handels, Nachrichten, Menüs, Steuerelemente, Standard-Dialoge...
  14. Tools: Prostart, Libraries...
  15. Debugging und Exception-Handling.
  16. Prozesse-Threads und Timer
  17. Dateien
  18. DLL´s
  19. Registry
  20. "Behind the scenes"
  21. MMX und 3DNow!
  22. Umfangreicher Anhang: Interruptfunktionen, Win32Api-Fktnen,Strukturen,Nachrichten und Lösungen der Übungsaufgaben.......

Inclusive CD-ROM! Insgesamt 474 Seiten!

Errata 1. Auflage:

  1. Feuer-Demo: Hier ist ein Fehler im Macro "WaitRet": Darin sind die beiden bedingten Sprünge falsch: Richtig ist je und nicht jne, dann braucht das Programm unter schnelleren Rechnern auch nicht mehr gebremst zu werden (damals hatte ich nur recht langsame Rechner so daß das Problem nie wirklich deutlich rauskam). Nach ändern der Sprünge kann man also das Macro Delay und dessen Aufruf im Programm entfernen! Zudem ist es bei dem Programm nötig die Prozedur "Random" mit "Random ENDP" statt nur mit "ENDP" zu beenden, sonst streikt der MASM (nicht der TASM)! Hier das Programm, mit einem Zusatzfeature beim Beenden, und den Korrekturen zum Download
  2. WinXP: Weder das Assembler-Programm Maus.com noch das Pascal Programm Mausdemo.exe funktionieren unter WinXP! Auch bei anderen Programmen sind Einschränkungen möglich. Zudem ist es günstig, wenn man bei Programmen welche eine Ausgabe (Text,Zahl usw.) tätigen und sich dann selbst beenden, den Benutzer eine Taste drücken läßt. Sonst kann es beim Ausführen von Windows aus passieren, daß der Benutzer das Ergebnis nur extrem kurz zu sehen bekommt, da nach Programmende in der Regel auch das DOS-Fenster geschlossen wird. Dafür eignet sich Funktion 7 des int 21h kurz vor Programmende (also: mov ah,07h + int 21h vor mov ah,4Ch + int 21h bzw. vor ret oder int 20h).
  3. Zur Frage "Welcher Assembler/Linker?" siehe hier!
  4. Das 10,13 bzw. 13,10 am Ende eines Strings ( also z.B. Hallo1 DB "Hallo!",10,13,"$" ) bringt den Cursor an den Anfang der nächsten Zeile (ansonten wird der nächste String direkt hinter dem vorherigen ausgegeben). Während unter DOS die Reihenfolge (also 10,13 oder 13,10) egal ist, so gilt unter Windows nur 13,10. Die Zahlen stehen für die Zeichen CR (carriage Return bzw. Wagenrücklauf, 13) und LF (line feed bzw. Zeilenvorschub, 10)
  5. S. 94: Hier muß es heißen: "So speichert mov word ptr [bx],22h ab der Adresse DS:BX die Bytes [...] wohingegen mov byte ptr [bx],23h an der Stelle DS:BX [...]" also zweimal DS:BX statt DS:DX ganz am Anfang steht es noch richtig da.
  6. S. 146: Soll natürlich 10 hoch -6 sein
  7. S. 230: Hier Fehlt in der Zeile "myDialog ...." ein Komma am Ende sowie ein Hinweis, daß alles in eine Zeile muß!
  8. S. 276: Die Texte von Paramenter 4 und 5 sind vertauscht!
  9. Folgende Befehle sollten eigentlich im Buch sein, wurden aber vergessen (sorry meine Schuld!). Zum Thema Vorzeichen siehe auch hier das oberste Programm:

    1. IDIV: Integerdivision (Vorzeichenbehaftet).
      Syntax: IDIV Operand.
      Der Befehl IDIV dividiert bei einem Byte-Operanden das AX-Register, bei einem Word-Operanden das Registerpaar DX:AX und bei einem Doubleword-Operanden (32-Bit) das Registerpaar EDX:EAX durch den Operanden. Der Operand kann ein Register oder eine Speichervariable sein. Bei einem Byte-Operanden geht das Ergebnis nach AL und der Rest nach AH. Bei einem Word- bzw. Doubleword-Operanden landet das Ergebnis in AX und der Rest in DX bzw. in EAX und EDX.

    2. IMUL: Integerdivision (Vorzeichenbehaftet).
      Syntax: IMUL Operand1 [,Operand2 [,Operand3]].
      Der Befehl IMUL kann eine vorzeichenbehaftete Multiplikation mit a.) einem, b.) zwei oder c.) drei Operanden ausführen. Im Falle von a.) wird wie bei MUL vorgegangen. Bei b.) werden beide Operanden miteinander multipliziert und das Ergebnis wird im ersten Operanden abgelegt. Der erste Operand muß dabei ein 16- oder 32-Bit Register sein, der zweite Operand kann ein Register, eine Speichervariable oder eine Konstante sein. Bei c.) wird der zweite Operand mit dem dritten multipliziert und das Ergebnis im ersten Operanden abgelegt. Der erste Operand muß dabei ein 16- oder 32-Bit Register sein, der zweite Operand kann ein Register oder eine Speichervariable sein, der dritte Operand muß eine Konstante sein.

    3. BSWAP: Byte Swap, little/big-Endian nach big/little-Endian.
      Syntax: BSWAP Operand
      Der Befehl BSWAP konvertiert von little-Endian nach big-Endian und vice versa. Der Operand ist ein 32-Bit Register.

    4. Bedingte Sprünge:
      JB: Springe wenn kleiner (below), geprüftes Flag: CF=1. JNB: Springe wenn nicht kleiner (not below), geprüftes Flag: CF=0. JBE: Springe wenn kleiner gleich (below equal), geprüfte Flags: CF=1 oder ZF=1. JNBE: Springe wenn nicht kleiner gleich (not belwo equal), geprüfte Flags: CF=0 und ZF=0.

    5. WAIT / FWAIT:
      Syntax: WAIT oder FWAIT
      Wartet bis Coprozessor fertig ist.


    Wird fortgesetzt...

Zurück!