Was ist Assembler?
What is Assembler?
An assembler program creates object code by translating combinations of mnemonics and syntax for operations and addressing modes into their numerical equivalents. This representation typically includes an operation code ("opcode") as well as other control bits and data. The assembler also calculates constant expressions and resolves symbolic names for memory locations and other entities. The use of symbolic references is a key feature of assemblers, saving tedious calculations and manual address updates after program modifications. Most assemblers also include macro facilities for performing textual substitution – e.g., to generate common short sequences of instructions as inline, instead of called subroutines.

Some assemblers may also be able to perform some simple types of instruction set-specific optimizations. One concrete example of this may be the ubiquitous x86 assemblers from various vendors. Called jump-sizing, most of them are able to perform jump-instruction replacements (long jumps replaced by short or relative jumps) in any number of passes, on request. Others may even do simple rearrangement or insertion of instructions, such as some assemblers for RISC architectures that can help optimize a sensible instruction scheduling to exploit the CPU pipeline as efficiently as possible.
Ein Assemblerprogramm erstellt Objektcode, indem es Kombinationen von Mnemonics und Syntax für Operationen und Adressierungsarten in ihre numerischen Entsprechungen übersetzt. Diese Darstellung umfasst in der Regel einen Operationscode ("Opcode") sowie andere Steuerbits und Daten. Der Assembler berechnet auch konstante Ausdrücke und löst symbolische Namen für Speicherplätze und andere Einheiten auf. Die Verwendung von symbolischen Referenzen ist eine wichtige Funktion von Assemblern, die mühsame Berechnungen und manuelle Adressaktualisierungen nach Programmänderungen erspart. Die meisten Assembler verfügen auch über Makrofunktionen zur Textersetzung, z. B. um häufige kurze Befehlssequenzen als Inline-Anweisungen anstelle von aufgerufenen Unterprogrammen zu erzeugen.

Einige Assembler sind auch in der Lage, einfache anweisungssatzspezifische Optimierungen vorzunehmen. Ein konkretes Beispiel dafür sind die allgegenwärtigen x86-Assembler verschiedener Hersteller. Die meisten dieser Assembler sind in der Lage, Sprungbefehle (lange Sprünge durch kurze oder relative Sprünge) in einer beliebigen Anzahl von Durchläufen auf Anfrage zu ersetzen. Andere können sogar einfache Umordnungen oder Einfügungen von Anweisungen vornehmen, wie z. B. einige Assembler für RISC-Architekturen, die dabei helfen können, eine sinnvolle Befehlsplanung zu optimieren, um die CPU-Pipeline so effizient wie möglich zu nutzen.
open_qa
de