Assembly - Syntaxe de base
Un programme d'assemblage peut être divisé en trois sections -
le data section,
le bss section, et
le text section.
La section des données
le dataLa section est utilisée pour déclarer des données ou des constantes initialisées. Ces données ne changent pas au moment de l'exécution. Vous pouvez déclarer diverses valeurs constantes, noms de fichiers ou taille de tampon, etc., dans cette section.
La syntaxe pour déclarer la section de données est -
section.data
La section bss
le bssLa section est utilisée pour déclarer des variables. La syntaxe pour déclarer la section bss est -
section.bss
La section texte
le textLa section est utilisée pour conserver le code réel. Cette section doit commencer par la déclarationglobal _start, qui indique au noyau où commence l'exécution du programme.
La syntaxe pour déclarer la section de texte est -
section.text
global _start
_start:
commentaires
Le commentaire du langage d'assemblage commence par un point-virgule (;). Il peut contenir n'importe quel caractère imprimable, y compris le blanc. Il peut apparaître seul sur une ligne, comme -
; This program displays a message on screen
ou, sur la même ligne avec une instruction, comme -
add eax, ebx ; adds ebx to eax
Instructions de langage d'assemblage
Les programmes en langage d'assemblage se composent de trois types d'instructions -
- Instructions exécutables ou instructions,
- Directives d'assembleur ou pseudo-opérations, et
- Macros.
le executable instructions ou simplement instructionsdites au processeur quoi faire. Chaque instruction se compose d'unoperation code(opcode). Chaque instruction exécutable génère une instruction en langage machine.
le assembler directives ou pseudo-opsinformer l'assembleur des différents aspects du processus d'assemblage. Ceux-ci ne sont pas exécutables et ne génèrent pas d'instructions en langage machine.
Macros sont essentiellement un mécanisme de substitution de texte.
Syntaxe des instructions du langage d'assemblage
Les instructions en langage d'assemblage sont entrées une instruction par ligne. Chaque instruction suit le format suivant -
[label] mnemonic [operands] [;comment]
Les champs entre crochets sont facultatifs. Une instruction de base comporte deux parties, la première est le nom de l'instruction (ou le mnémonique), qui doit être exécutée, et la seconde sont les opérandes ou les paramètres de la commande.
Voici quelques exemples d'instructions typiques du langage assembleur -
INC COUNT ; Increment the memory variable COUNT
MOV TOTAL, 48 ; Transfer the value 48 in the
; memory variable TOTAL
ADD AH, BH ; Add the content of the
; BH register into the AH register
AND MASK1, 128 ; Perform AND operation on the
; variable MASK1 and 128
ADD MARKS, 10 ; Add 10 to the variable MARKS
MOV AL, 10 ; Transfer the value 10 to the AL register
Le programme Hello World en assemblée
Le code de langage d'assemblage suivant affiche la chaîne «Hello World» à l'écran -
section .text
global _start ;must be declared for linker (ld)
_start: ;tells linker entry point
mov edx,len ;message length
mov ecx,msg ;message to write
mov ebx,1 ;file descriptor (stdout)
mov eax,4 ;system call number (sys_write)
int 0x80 ;call kernel
mov eax,1 ;system call number (sys_exit)
int 0x80 ;call kernel
section .data
msg db 'Hello, world!', 0xa ;string to be printed
len equ $ - msg ;length of the string
Lorsque le code ci-dessus est compilé et exécuté, il produit le résultat suivant -
Hello, world!
Compilation et liaison d'un programme d'assemblage dans NASM
Assurez-vous d'avoir défini le chemin de nasm et ldbinaires dans votre variable d'environnement PATH. Maintenant, suivez les étapes suivantes pour compiler et lier le programme ci-dessus -
Tapez le code ci-dessus à l'aide d'un éditeur de texte et enregistrez-le sous hello.asm.
Assurez-vous que vous êtes dans le même répertoire que celui où vous avez enregistré hello.asm.
Pour assembler le programme, tapez nasm -f elf hello.asm
S'il y a une erreur, vous en serez informé à ce stade. Sinon, un fichier objet de votre programme nomméhello.o sera créé.
Pour lier le fichier objet et créer un fichier exécutable nommé hello, tapez ld -m elf_i386 -s -o hello hello.o
Exécutez le programme en tapant ./hello
Si vous avez tout fait correctement, il affichera "Hello, world!" sur l'écran.