instruction

Une définition du Jargon Français.

Image:Reviser.png Cette définition a été marquée comme étant à revoir. Si le cœur vous en dit...

nom féminin.  [programmation]. Ordre (consigne) élémentaire que le processeur peut exécuter.

L'opcode est le code numérique d'une instruction, c'est la seule version que le processeur peut comprendre. Le langage machine emploie uniquement des opcodes.

Le mnémonique est le nom de l'instruction pour les humains, plus facile à mémoriser que l'opcode et employé lorsque l'on programme en langage d'assemblage. Un compilateur spécifique, appelé assembleur, les traduit en langage machine.

Par extension le terme instruction désigne également un « ordre » élémentaire de n'importe quel langage de programmation, utilisable dans un code source.

Il en existe 5 types : arithmétique, branchement, entrées/sorties, logique et transfert.

Instruction n'est théoriquement pas synonyme de commande, car cette dernière est utilisable que de façon isolée donc hors d'un code source (par exemple sur une ligne de commande).

Image:Att.pngCouramment confondu avec une ligne de code, mais la plupart des langages permettent de placer plusieurs instructions sur une seule ligne de code source.

Voir aussi bloc.

[modifier] Langage de haut niveau, langage d'assemblage et langage machine

Voici un code source en langage C, réputé d'assez haut niveeau :

/* Ceci est un commentaire ! */
 
/* Voici de la ''cuisine interne'' */
#include <stdio.h>
 
/* Voici la principale fonction du programme */
int main()
{
  /* La fonction ''puts'' (''put string'') place son argument sur la
     sortie standard, puis y passe à la ligne suivante */
  puts("Coucou JargonF.org!");
}

Demandons à un compilateur C (il s'agit de gcc, ici utilisé sous Linux), de produire un code en langage d'assemblage correspondant : gcc -S coucou.c

Cela produit le code source en langage d'assemblage suivant :

        .file   "coucou.c"
        .section        .rodata
.LC0:
        .string "Coucou JargonF.org!"
        .text
.globl main
        .type   main, @function
main:
        leal    4(%esp), %ecx
        andl    $-16, %esp
        pushl   -4(%ecx)
        pushl   %ebp
        movl    %esp, %ebp
        pushl   %ecx
        subl    $4, %esp
        movl    $.LC0, (%esp)
        call    puts
        movl    $0, %eax
        addl    $4, %esp
        popl    %ecx
        popl    %ebp
        leal    -4(%ecx), %esp
        ret
        .size   main, .-main
        .ident  "GCC: (GNU) 4.1.2 20061115 (prerelease) (Debian 4.1.1-21)"
        .section        .note.GNU-stack,"",@progbits

Produisons un exécutable : gcc -Wall coucou.c -o coucou

Désassemblons-le sommairement grâce à objdump.

Cela produit un code binaire en langage machine dont voici le début d'une version simplifiée et flanquée d'une colonne reprenant le code en langage d'assemblage, dont ceux qui travaillent en langage machine ne profitent pas ! (La syntaxe est celle d'as, non celle d'Intel) :

Langage machine Langage d'assemblage Commentaire
8d 4c 24 04 leal 4(%esp), %ecx Load Effective Address, place une adresse dans le registre nommé ECX, qui devient un pointeur
83 e4 f0 andl $-16, %esp et binaire
ff 71 fc pushl -4(%ecx) push de la valeur placée 4 mots avant l'adresse pointée par le registre ECS
55 pushl  %ebp push ce que contient le registre EBP
89 e5 movl  %esp,%ebp Copie dans le registre EBP la valeur abritée dans le registre ESP
51 pushl  %ecx push ce que contient le registre ECX
83 ec 04 subl $0x4,%esp Soustraction
c7 04 24 88 84 04 08 movl $0x8048488,(%esp) Place une valeur dans l'adresse pointée par ESP
e8 0b ff ff ff call 804827c <puts@plt> Appel de la fonction puts
b8 00 00 00 00 movl $0x0,%eax Place 0 dans le registre EAX
83 c4 04 addl $0x4,%esp Addition
59 popl  %ecx pop
5d popl  %ebp pop
8d 61 fc leal 0xfffffffc(%ecx),%esp
c3 ret return
90 nop nop