Diskussion:Assembler-Programmierung für x86-Prozessoren

Seiteninhalte werden in anderen Sprachen nicht unterstützt.
Aus Wikibooks

Eingrenzung auf x86[Bearbeiten]

Den Titel Assembler ohne einen Zusatz halte ich für nicht ganz unproblematisch. Schließlich unterscheidet sich die Assemblersprache ja nach Prozessor und Betriebssystem. Wie ich dem Inhaltsverzeichnis entnehmen kann, soll sich dieses Buch auf die 80x86 Plattform beziehen. Vielleicht währe vielleicht deshalb der Titel Assembler (80x86) besser. Damit gibt es keinen Namensprobleme, wenn jemand irgendwann ein Buch über Assembler auf einem anderen Prozessor schreiben möchte. Gruß -- Daniel B 17:05, 28. Sep 2004 (UTC)

Geschehen! Danke für den Tipp! --Oliver Thomas 13:00, 29. Sep 2004 (UTC)

Mathematischer Overhead[Bearbeiten]

Hat der mathematische Overhead hier eigentlich Sinn oder soll man ihn lieber in ein anderes Buch verschieben? Der ein oder andere Benutzer wird davon vielleicht abgeschreckt, und wirklich brauchen tut man die Definition hier auch nicht. Auf der anderen Seite könnte man ins Vorwort schreiben, dass, wer keine Lust hat, sich nicht damit zu befassen braucht und die Definition einfach überspringt kann und sich nur das Beispiel ansehen braucht. Wenn wir andererseits irgendwann mal die Bibliothek der Wikiversity werden wollen macht es dann doch wieder Sinn. -- Daniel B 14:08, 10. Jan 2005 (UTC)

Denke, dass man es auf jeden Fall aus Gründen der Vollständigkeit stehen lassen sollte.
Denn wer sich wirklich interessiert mit Assembler befassen will, sollte da, auch wenn er es nicht auf anhieb versteht, etwas weiterlesen, die folgende Erklärung dürfte da klarheit bringen -- zaphod_beeblebroxx
(Der vorstehende Beitrag stammt von Zaphod (Beiträge) – 19:24, 15. Jul. 2005 (MESZ) – und wurde nachträglich vollständig – mit Zeitangabe – unterschrieben.)

Un-/Abhängigkeit vom Betriebsystem[Bearbeiten]

Die Assemblersprache unterscheidet sich nicht nach dem Betriebsystem. --Robert 15:23, 16. Jun 2005 (UTC)

Die Sprache nicht, aber versuch mal ein auf Linux geschriebenes Assemblerprogramm auf Windows zum Laufen zu bringen -- Daniel B 15:25, 16. Jun 2005 (UTC)
Da ist es doch viel einfacher ein auf Windows geschriebenes Programm unter Linux zum Laufen zu bringen. Da gebe ich dir recht. Wolfgang R 01:13, 16. Nov 2005 (UTC Whatever)
(Der vorstehende Beitrag stammt von 84.58.65.65 – 01:14, 16. Nov. 2005 (MEZ) – und wurde nachträglich vollständig – u.a. mit richtiger Nutzerkennung – unterschrieben.)

Fortsetzung?[Bearbeiten]

Wie steht es eigentlich um die Fortführung dieses Buchs? Die bereits fertigen Kapitel haben mir jedenfalls gut gefallen und ich würd mich um Fortsetzungen freuen -- zaphod_beeblebroxx
(Der vorstehende Beitrag stammt von Zaphod (Beiträge) – 19:28, 15. Jul. 2005 (MESZ) – und wurde nachträglich vollständig – mit Zeitangabe – unterschrieben.)

Momentan bin mit Buch C-Programmierung stark beschäftigt und hab deshalb für dieses Buch keine Zeit mehr. Aber vielleicht werde ich demnächst doch noch etwas ergänzen. Aber schön zu hören, dass das Buch dir soweit gefällt. Grüße -- Daniel B 17:57, 15. Jul 2005 (UTC)
Das wäre gut, denn wenn du das Buch weiterführst wie es anfängt wird daraus am Ende ein mit sicherheit ganz brauchbares Werk für den Einstieg. Kannst du vielleicht andere Bücher/Tutorials zum Thema Assembler empfehlen?
(Der vorstehende Beitrag stammt von 83.135.219.39 – 13:21, 16. Jul. 2005 (MESZ) – und wurde nachträglich unterschrieben.)
Siehe Assembler-Programmierung für x86-Prozessoren/ Literatur und Weblinks. Das Beste Buch das ich über Assembler gelesen habe ist das Buch "PC-Programmieren in Maschinensprache" von Peter Monadjemi. Leider ist das Buch nicht mehr verfügbar, ist aber vielleicht noch in der ein oder anderen Bibliothek auffindbar. (Im hab mir daraufhin mal das Buch "Jetzt lerne ich C" von Peter Monadjemi und Eckard Winkler gekauft, war da aber sehr enttäuscht. Ich sage nur void main(). Offensichtlich hat Monadjemi mehr Ahnung vom Assembler als von C.)
Momentan am Besten finde ich das Buch Assemblerprogrammierung von Wolfgang Link. Hat IMHO mit 15 Euro das beste Preis- / Leistungsverhältnis ist mir aber für ein heutiges Assemblerbuch zu DOS-lastig (arbeiten mit Dateien, absolutes Lesen von Sektoren etc.).
Im Web selbst gibt es zumindest in deutscher Sprache nicht so viel. Werde vermutlich in den nächsten Wochen ein wenig weiter machen, damit sich das ändert… Grüße -- Daniel B 09:24, 17. Jul 2005 (UTC)
Wann soll es denn mit diesem Buch weiter gehen? Inzwischen sind beinahe 3 Jahre seit dem letzten Beitrag vergangen. Würde gerne wieder etwas wirklich Neues über die „Ungefähriums“ lernen.--Wolfgang R 19:37, 9. Jul. 2008 (CEST)[Beantworten]

Mir gefällt es auch gut, denn es ist so schön ausführlich. Klaus Eifert
(Der vorstehende Beitrag stammt von Klaus Eifert – 00:31, 6. Sep. 2005 (MESZ) – und wurde nachträglich unterschrieben.)

Warum so fixiert auf 80x86?[Bearbeiten]

Noch ein Buch über 80x86-CPU's. Warum fixiert ihr euch so auf die „Ungefährium“-Rechner. Darüber gibt es genug Bücher von anderen Autoren. Interessanter wäre ein Buch zur „Sprache!!“ Assembler. Die Register und Big-Endian bzw. Little-Endian sind doch vergleichsweise ein Klacks. Aber ein Buch zur Assembler-„Sprache“ wäre m. E. viel sinnvoller.
Welcher Compiler nutzt denn die erweiterten Möglichkeiten beispielsweise der MMX-Befehle etc. und kann diese per Inline-Assembler dann auch in den richtigen Maschinencode übersetzen? Und was bringen solche Befehle, wenn dafür die eingebaute FPU nicht mehr nutzbar ist bzw. wenn jedesmal die Register komplett ausgetauscht und die CPU umkonfiguriert werden muß?
Die Geschichte der 80x86 beginnt m. E. sogar schon bei dem „ollen“ 8080. Wenn wir den Blick ein wenig über den Tellerrand erheben, können wir sehen, das der 8080 zum 8086 erweitert wurde. Deswegen war es zum Ende der 70er Jahre relativ einfach das damalige CPM auf MSDOS bzw. DRDOS umzuschreiben. Das mit der 80x86-Legende wird zu gerne „gedankenlos“ aus den obengenannten Büchern entnommen.
Trotzdem ToiToiToi bei Eurem Projekt und nehmt die Angelegenheit nicht zu persönlich. Dieser Beitrag sollte nur als Denkanstoß dienen und ein wenig die Geschichtskenntnisse auffrischen.
Mit freundlichen Grüßen
Wolfgang Rausch
(Der vorstehende Beitrag stammt von 84.58.4.27 – 01:02, 25. Aug. 2005 (MESZ) – und wurde nachträglich unterschrieben.)

Noch ein Buch über 80x86-CPU's. Warum fixiert ihr euch so auf die „Ungefährium“-Rechner. Darüber gibt es genug Bücher von anderen Autoren. Interessanter wäre ein Buch zur „Sprache!!“ Assembler. Die Register und Big-Endian bzw. Little-Endian sind doch vergleichsweise ein Klacks. Aber ein Buch zur Assembler-„Sprache“ wäre m. E. viel sinnvoller. Auf das Konzept währe ich aber mal gespannt. Wie willst du den in einem einzigen Buch verschiedene Befehlssätze unterbringen?
Welcher Compiler nutzt denn die erweiterten Möglichkeiten beispielsweise der MMX-Befehle etc. und kann diese per Inline-Assembler dann auch in den richtigen Maschinencode übersetzen? Und was bringen solche Befehle, wenn dafür die eingebaute FPU nicht mehr nutzbar ist bzw. wenn jedesmal die Register komplett ausgetauscht und die CPU umkonfiguriert werden muß? Seit der Einführung von SSE mit dem Pentium III ist eine Mischung von Fließkomm- und Integerverarbeitung sehr wohl möglich.
Die Geschichte der 80x86 beginnt m. E. sogar schon bei dem „ollen“ 8080. Wenn wir den Blick ein wenig über den Tellerrand erheben, können wir sehen, das der 8080 zum 8086 erweitert wurde. Deswegen war es zum Ende der 70er Jahre relativ einfach das damalige CPM auf MSDOS bzw. DRDOS umzuschreiben. Das mit der 80x86-Legende wird zu gerne „gedankenlos“ aus den obengenannten Büchern entnommen. Und wieso schreibst du das nicht einfach in den betreffenden Abschnitt rein, sondern auf die Diskussionsseite, wo es niemand etwas bringt?
Grüße -- Daniel B 16:10, 25. Aug 2005 (UTC)
(zu Noch ein Buch über 80x86-CPU's.) Die „Befehlssätze“ unterscheiden sich doch praktisch gar nicht. Ein Befehl zum Laden eines Registers lautet eigentlich immer:
mov Quelle, Ziel // EDX (intel) D6 (motorola) GPR17 (ibm's PowerPC)
Dieser Befehl lüde das Register EDX eines x86, bzw. D6 eines 68000er's bzw. GPR17 eines PowerPC's.
Die Registerbezeichnungen und die daraus resultierenden Maschinencodes unterscheiden sich zwar, doch von der Auswirkung lädt der Befehl ein Register. Die Mathematik gilt doch wohl für Intel, IBM, Motorola … (Eines habe ich ganz vergessen, clever wie Intel ist würde EDX gespeichert) Dies geht auch mit anderen Befehlen:
add Quelle, Ziel // EBP (intel) D3 (motorola) GPR30 (ibm's PowerPC)
sub Quelle, Ziel // EBX (intel) D7 (motorola) GPR11 (ibm's PowerPC)
(zu Welcher Compiler nutzt denn die erweiterten Möglichkeiten ..) Es geht nicht um das Mischen, sondern um das Vorbereiten der Register. Wenn du zuerst Fließkomma-Berechnungen in der FPU gemacht hast, mußt du zum Ausführen der SSE-Befehle mindestens
1. die Fließkomma-Register auslagern
2. die Fließkomma-Register für den SSE-Befehl mit den erforderlichen Daten füllen
3. die SSE-Routine ausführen
4. die SSE-Register sichern
5. Restore der Fließkomma-Register und weiter geht's …
Zum „Mischen“ von Fließkomma- und Integerverarbeitung wird doch kein SSE benötigt, das ging schon seit den ersten FPU's.
Der Punkt ist doch beispielsweise ein „C-Compiler“, der aus den Quelltexten nur Integer- bzw. Fließkommabefehle generiert. Mir fällt momentan beim besten Willen keine C-Funktion ein, die MMX- oder SSE-Befehle nutzt. Höchstens über Inline-Assembler – genau hier muß er aber den richtigen Binärcode des MMX- bzw. SSE-Befehls generieren und einsetzen können!!
(zu Die Geschichte der 80x86 beginnt m. E. sogar schon bei) Ergänze doch dein Buch mit diesen Ideen an den Stellen, wo es am besten passt. Hiermit hast du von mir die Erlaubnis. Ich bitte nur um den Verweis meiner Urheberschaft.
Hoffentlich helfen meine zusätzlichen Erklärungen. Ciao Wolfgang Rausch
(Der vorstehende Beitrag stammt von 84.58.18.30 – 09:59, 27. Aug. 2005 (MESZ) – und wurde nachträglich unterschrieben.)
Wenn du so überzeugt bist von dem Konzept, dann fang doch mal ein eigenes Buch an. Ich halte es für kein geeignetes Konzept, weil ich mich nicht auf einen Assembler, einen Befehlssatz, einen Registersatz und Assembler konzentrieren kann. Auch wenn die Ähnlichkeiten groß sind muss ich an vielen Stellen auf die Unterschiede eingehen, was das Lernen ehr erschwert als vereinfacht. Außerdem möchte ich ein Buch über den Assembler der 80x86 Architektur schreiben und nicht über irgend eine andere Architektur.
(zu Der Punkt ist doch beispielsweise ein „C-Compiler“, ..) Was ist jetzt eigentlich dein Kritikpunkt?
Es ist nicht mein Buch, das Buch steht unter der GNU FDL, du kannst es also an einer Stelle ergänzen an der du es für richtig hältst. -- Daniel B 08:31, 27. Aug 2005 (UTC)

BIOS und DOS Funktionen[Bearbeiten]

Ich könnte dir die Beschreibungen von wichtigen BIOS und DOS Funktionsaufrufen anbieten. Wenn du mal deine Gliederung erweiterst, hänge ich probeweise ein paar Texte rein, die ich mehrmals im Unterricht verwendet habe. Ich kann auch hier mal einen Link rein setzen. Wozu das Rad neu erfinden ... -- Klaus Eifert 16:39, 5. Sep 2005 (UTC)

Prima! Nur her damit. Ich werde sie dann auch verlinken. -- Daniel B 17:00, 5. Sep 2005 (UTC)
Hab die Gliederung mal erweitert. Das ist momentan das, was ich in der "Grundausbaustufe" schreiben möchte. Wie die Gliederung darüber hinaus genau aussieht, kann ich dir noch nicht sagen. -- Daniel B 17:09, 5. Sep 2005 (UTC)
Kannst du das gebrauchen? Computerhardware für Profis: Assembler: Begriff Setz einen Link oder kopier es, Nennung meines Namens ist hier und in allen anderen Fällen nicht erforderlich. Ich habe MASM verwendet, pass die Anweisungen ruhig an NASM an, falls sie abweichen. -- Klaus Eifert 22:18, 5. Sep 2005 (UTC)
Ich habe den Text jetzt im Kapitel Assembler-Programmierung für x86-Prozessoren/ Einleitung übernommen und dich als Urheber in der Versionsgeschichte genannt. Könntest du bitte noch den Abschnitt Computerhardware für Profis: Assembler: String in den Abschnitt Assembler-Programmierung für x86-Prozessoren/ Stringbefehle kopieren? Ich möchte ungern in einem Kapitel nur einen Link auf ein anders Buch haben. Grüße -- Daniel B 10:11, 6. Sep 2005 (UTC)

Habe mich entschlossen, ein neues Nachschlagewerk zu beginnen. Für gemeinsame Nutzung ist das sicher am besten. Interrupts_80x86 -- Klaus Eifert 21:16, 6. Sep 2005 (UTC)

Ich denke, daß man dieses Buch mit wenig Aufwand auch an GNU+Linux anpassen könnte. --Skypher 19:58, 10. Mär. 2007 (CET)[Beantworten]

In der Tat würde ich denken, dass das sogar einfacher wäre. Die Begründung "Der Einstieg über den Real Mode unter DOS wurde gewählt, weil damit eine seitenweise – und für Anfänger ermüdende – Beschreibung über die Adressierung im Protected Mode ganz am Anfang des Buches vermieden wird." ist, gelinde gesagt, veraltet. Alle modernen Betriebssysteme verwenden für Programme ein lineares Speichermodell, das wesentlich einfacher ist als die segmentierte Adressierung des x86 Real Mode: Das Programm muss sich überhaupt nicht um Segmentregister kümmern, weil das Programm in einem einzigen riesigen Speichersegment läuft, das vom Betriebssystem angelegt und vom Programm nicht mehr verändert wird. Die Adressierung läuft also nur über den Offset (32 Bits). Damit ist die Addressierung aus Sicht des Programms effektiv wieder so einfach, wie sie früher vor Einführung des 8086 war: Die Adresse ist einfach ein Index in den (inzwischen virtuellen) Speicher.
Protected-Mode-Details braucht man eigentlich erst, wenn man sich auf Betriebssystemebene hinabbegeben will. Anwendungsprogramme bekommen davon normalerweise praktisch nichts mit (außer der Tatsache, dass ein Zugriff auf Speicher, der einem nicht gehört, das Programm beendet). --85.176.245.243 20:02, 26. Jun. 2007 (CEST)[Beantworten]