Assembly - Sintassi di base

Un programma di assemblea può essere suddiviso in tre sezioni:

  • Il data sezione,

  • Il bss sezione e

  • Il text sezione.

La sezione dati

Il dataviene utilizzata per dichiarare dati o costanti inizializzati. Questi dati non cambiano in fase di esecuzione. In questa sezione è possibile dichiarare vari valori di costanti, nomi di file o dimensioni del buffer, ecc.

La sintassi per la dichiarazione della sezione dati è:

section.data

La sezione bss

Il bssè usata per dichiarare le variabili. La sintassi per dichiarare la sezione bss è:

section.bss

La sezione di testo

Il textviene utilizzata per mantenere il codice effettivo. Questa sezione deve iniziare con la dichiarazioneglobal _start, che indica al kernel dove inizia l'esecuzione del programma.

La sintassi per dichiarare la sezione di testo è:

section.text
   global _start
_start:

Commenti

Il commento in linguaggio assembly inizia con un punto e virgola (;). Può contenere qualsiasi carattere stampabile incluso lo spazio vuoto. Può apparire su una riga da solo, come -

; This program displays a message on screen

o, sulla stessa linea insieme a un'istruzione, come -

add eax, ebx     ; adds ebx to eax

Dichiarazioni in lingua dell'Assemblea

I programmi in linguaggio assembly sono costituiti da tre tipi di istruzioni:

  • Istruzioni o istruzioni eseguibili,
  • Direttive o pseudo-operazioni dell'assemblatore e
  • Macros.

Il executable instructions o semplicemente instructionsdite al processore cosa fare. Ogni istruzione consiste in un fileoperation code(codice operativo). Ogni istruzione eseguibile genera un'istruzione in linguaggio macchina.

Il assembler directives o pseudo-opsracconta all'assemblatore i vari aspetti del processo di assemblaggio. Questi non sono eseguibili e non generano istruzioni in linguaggio macchina.

Macros sono fondamentalmente un meccanismo di sostituzione del testo.

Sintassi delle dichiarazioni in linguaggio assembly

Le istruzioni in linguaggio assembly vengono immesse una istruzione per riga. Ogni affermazione segue il seguente formato:

[label]   mnemonic   [operands]   [;comment]

I campi tra parentesi quadre sono facoltativi. Un'istruzione di base ha due parti, la prima è il nome dell'istruzione (o lo mnemonico), che deve essere eseguita, e la seconda sono gli operandi oi parametri del comando.

Di seguito sono riportati alcuni esempi di dichiarazioni tipiche del linguaggio assembly:

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

Il programma Hello World in Assemblea

Il codice del linguaggio assembly seguente mostra la stringa "Hello World" sullo schermo:

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

Quando il codice precedente viene compilato ed eseguito, produce il seguente risultato:

Hello, world!

Compilazione e collegamento di un programma di assemblaggio in NASM

Assicurati di aver impostato il percorso di nasm e ldbinari nella variabile d'ambiente PATH. Ora, segui i seguenti passaggi per compilare e collegare il programma sopra:

  • Digita il codice sopra utilizzando un editor di testo e salvalo come hello.asm.

  • Assicurati di essere nella stessa directory in cui hai salvato hello.asm.

  • Per assemblare il programma, digitare nasm -f elf hello.asm

  • In caso di errore, in questa fase ti verrà chiesto di farlo. Altrimenti, un file oggetto del programma denominatohello.o sarà creato.

  • Per collegare il file oggetto e creare un file eseguibile denominato hello, digitare ld -m elf_i386 -s -o hello hello.o

  • Eseguire il programma digitando ./hello

Se hai fatto tutto correttamente, verrà visualizzato "Hello, world!" sullo schermo.