Ist Assemblersprache "Assembler" auch spezifisch? Welcher Assembler ist am besten?

StackOverflow https://stackoverflow.com/questions/1995472

  •  22-09-2019
  •  | 
  •  

Frage

Ich lerne die Versammlungssprache. Ich begann mit Paul A. Carters PC Assembly Language Das verwendet Nasm (den netzweiten Assembler). Dann wechselte ich in der Mitte und begann zu lesen Introduction to 80×86 Assembly Language and Computer Architecture das verwendet Masm.

In Nasm habe ich früher geschrieben, um ein Byte zu initialisieren

DB 110101B

In Masm benutze ich

Byte 110101b

Ich bin mitten im Lesen. Da dies Assembler -Richtlinien sind, werden sie für jeden Assembler unterschiedlich sein. Rechts? Befolgen diese Assembler -Entwickler nicht einen Standard für diese Richtlinien? Weil sie wissen, dass Mnemonics CPU -spezifisch sind. Sein Schmerz im Arsch zu lernen und in der Montagesprache zu codieren.

Wenn sie nun unterschiedlichen Richtlinien folgen, ist es mehr Schmerzen, wenn Sie Assembler wechseln oder das Betriebssystem wechseln (Masm Developer ist in großen Schwierigkeiten, wenn er unter Linux geht).

Meine Verwirrung ist, sollte ich mich mit Nasm oder Masm vertraut machen? Ich bin Fan von Windows, aber ich muss vielleicht auch (in Zukunft) unter Linux arbeiten.

Jedes Buch sollte den Titel "_________ Assemblersprache mit __________ Assembler" tragen.

War es hilfreich?

Lösung

Leider gab es noch nie einen Standard für die Montagesprache. Sie müssen nur die Richtlinien lernen, die Ihr Assembler unterstützt. Glücklicherweise sind die meisten Richtlinien, obwohl sie unterschiedliche Namen haben, semantisch ähnlich wie DB und Byte.

Aber warte! Es wird schlimmer, besonders für den x86. Sie haben (mindestens) zwei Codeformen, die Assembler akzeptieren können: Intel und AT & T -Format. Das AT & T-Format kehrt die Reihenfolge der meisten Operanden in Anweisungen um (oder ist es gegen Versa ;-).

Nasm ist wahrscheinlich eine bessere Wahl für die Portabilität, aber Sie können sich auch den GNU -Assembler ansehen.

Andere Tipps

Intel Syntax / AT & T -Syntax

Insbesondere mit X86 stammten die ersten Assembler von Intel und dann weitgehend kompatible Assembler von Microsoft einen Zweig.

Diese Assembler organisieren Quell- und Zieloperanden von rechts nach links und haben eine ungewöhnliche (und für meine Augen, irgendwie verrückte) Abstraktionsschicht, die eine einzelne Mnemonik für 8, 16 und 32-Bit-OPs verwendet und dann den tatsächlichen Maschinenopcode zum Verwenden abgeleitet basierend auf Eigenschaften des Operanden. Modifikatoren existieren (an Operanden), um eine bestimmte Größe zu erzwingen.

Aber UNIX war auch wichtig und hatte eine völlig andere Assembler -Linie mit unterschiedlichen Traditionen und Konventionen.

Der ursprüngliche Unix -Anbieter war AT & T, dem das in Bell Labs entwickelte geistige Eigentum gehörte. Eine Reihe von BSD -Projekten und dann ließ Linux mit dieser Tradition fort. Diese Assembler verarbeiten in der Vergangenheit Operanden von links nach rechts, haben ein für Geschwindigkeit optimiertes Ersatzdesign. Wenn sie von Menschen verwendet werden, verwenden sie im Allgemeinen CPP für Makros und Bedingungen, auch wenn der Assembler auch parallele Funktionen aufweist.

Heutzutage verwenden Sie wahrscheinlich VS auf MS oder GNU unter Linux oder Mac, aber deshalb sagen wir immer noch AT & T gegen Intel. Der GNU Assembler hat die Möglichkeit, in beide Richtungen zu versammeln, obwohl es sich immer noch im AT & T -Camp befindet.

Im Allgemeinen ja. Sie sind jedoch größtenteils feature-kompatibel, daher ist es normalerweise nicht besonders schwierig, von einer Assembler-Syntax zur Syntax zu einer Assembler-Syntax zu konvertieren, wenn Sie beides wissen.

Prozessoren sind alle in einem Hersteller geliefert, der Referenzhandbuch geliefert wird. Dies entwickelte sich normalerweise zu der normativen Syntax (zusammen mit dem vom Anbieter bereitgestellten Assembler) für Montageprogramme auf einer bestimmten Plattform. Folglich haben viele Prozessoren aus einem einzelnen Anbieter eine ähnliche Syntax.

Die Situation wurde mit der zweiten Beschaffung von Prozessoren und der eventuellen Entwicklung von Multi-Targeting-Assembern komplexer, die aus historischen Gründen meist konsistente Syntax auf allen Plattformen verwenden. Dies bietet auch einige argzeugbare Vorteile beim Portieren von Code über Plattformen hinweg.

Ihre beste Wahl sind: Wählen Sie eine Notation aus, mit der Sie sich wohl fühlen, und akzeptieren Sie Bücher mit unterschiedlicher Syntax. Sehen Sie, ob Sie Cross-System-Makrobibliotheken oder Übersetzungswerkzeuge suchen oder die Kugel beißen und mehrere Dialekte lernen können. Der dritte ist normalerweise erträglich, obwohl er private Bibliotheken arbeitsintensiv macht.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top