Qu'est-ce que l'assembleur ?
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.
Un programme assembleur crée un code objet en traduisant des combinaisons de mnémoniques et de syntaxes pour les opérations et les modes d'adressage en leurs équivalents numériques. Cette représentation comprend généralement un code d'opération ("opcode") ainsi que d'autres bits de contrôle et des données. L'assembleur calcule également des expressions constantes et résout des noms symboliques pour des emplacements de mémoire et d'autres entités. L'utilisation de références symboliques est une caractéristique essentielle des assembleurs, qui permet d'éviter des calculs fastidieux et des mises à jour manuelles des adresses après modification du programme. La plupart des assembleurs comprennent également des macros permettant d'effectuer des substitutions textuelles, par exemple pour générer de courtes séquences d'instructions courantes en ligne, au lieu d'appeler des sous-programmes.

Certains assembleurs peuvent également être en mesure d'effectuer certains types simples d'optimisations spécifiques au jeu d'instructions. Les assembleurs x86 omniprésents chez différents fournisseurs en sont un exemple concret. La plupart d'entre eux sont capables d'effectuer des remplacements d'instructions de saut (sauts longs remplacés par des sauts courts ou relatifs) en un nombre quelconque de passes, à la demande, ce que l'on appelle le jump-sizing. D'autres peuvent même effectuer un simple réarrangement ou une insertion d'instructions, comme certains assembleurs pour les architectures RISC qui peuvent aider à optimiser un ordonnancement d'instructions raisonnable pour exploiter le pipeline de l'unité centrale aussi efficacement que possible.
open_qa
fr