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.