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.