Assembly Programming Tutorial #10 – Procedure e Macro

120 Views 0 Comment

PROCEDURE

Le procedure sono porzioni di programma che possono essere richiamate per svolgere un determinato compito ed hanno alcuni vantaggi:

  • Rendono il programma più strutturato;
  • Rendono il programma più semplice da comprendere in quanto più chiaro;
  • Consentono di risparmiare tempo e spazio.

L’esecuzione di una procedura si effettua con un’apposita istruzione di chiamata di procedura simile al salto incondizionato. La definizione inizia e termina con una direttiva.

Sintassi: <nome_procedura> PROC

;corpo della procedura

<nome_procedura> ENDP

Dove <nome_procedura> rappresenta il nome assegnato alla procedura e va specificato in apertura ed in chiusura, PROC e ENDP rappresentano direttive.

La chiamata di una procedura viene effettuata tramite l’istruzione CALL e la sintassi è la seguente: CALL <nome_procedura>, mentre il ritorno da una procedura viene effettuato tramite l’ istruzione RET.

Vediamo un piccolo esempio:

procedure

PASSAGGIO DI PARAMETRI

La procedura chiamante può passare in entrata alla procedura chiamata alcuni valori, detti parametri mentre procedura chiamata può passare in uscita alcuni parametri alla procedura chiamante.

I possibili metodi con cui i parametri vengono trasferiti alle procedure si caratterizzano in due categorie fondamentali:

  • Trasferimento per valore: la procedura chiamante passa a quella chiamata una copia del valore del parametro;
  • Trasferimento per riferimento: la procedura chiamante passa alla procedura chiamata l’indirizzo di memoria del parametro.

Vediamo un esempio di trasferimento per valore:

valore

Vediamo ora un esempio di trasferimento per riferimento:

riferimento

PASSAGGIO DI PARAMETRI TRAMITE STACK

Lo stack è un’area di memoria utilizzata per immagazzinare informazioni temporanee come ad esempio:

  • Risultati parziali di un calcolo;
  • Indirizzo di ritorno di una procedura;
  • Parametri di una procedura.

Lo stack ha un accesso di tipo LIFO (Last In First Out), ciò vuol dire che l’ultimo dato inserito è il primo ad essere estratto. Per scrivere o leggere dallo stack si usano due istruzioni aspposite, ovvero PUSH  e POP.

Sintassi: PUSH<op1>, POP<op1>, dove OP1 è un registro a 16 bit.  Per passare i parametri tramite lo stack occorre effettuare le istruzioni PUSH subito prima della chiamata della procedura, vediamo un pratico esempio:

stack

MACRO

La macro è un nome simbolico che il programmatore assegna ad una sequenza di istruzioni, sono simili alle procedure, ma esistono solo in tempo di compilazione.

Quando il codice viene compilato, il codice della macro viene inserito solo laddove la macro viene richiamata, i vantaggi sono:

  • Maggiore efficienza;
  • Poco spreco di spazio;
  • Aumenta la leggibilità.

 

A differenza delle procedure, le macro vanno dichiarate all’ inizio del programma ed inoltre non hanno bisogno di istruzioni di chiamata. La sintassi per dichiarare una macro è la seguente:

<nome_macro> MACRO [parametri]

;corpo della macro

ENDM

Ora esaminiamo due spezzoni di codici equivalenti, con e senza dichiarazione di macro:

NOMACRO           macro

 

Siamo arrivati alla fine di questo corso di programmazione in Assembly, grazie per averci seguito!  Se ti sei perso lo scorso articolo, si è parlato del Flusso di esecuzione.

Stai cercando altre guide? Allora dai uno sguardo alla nostra raccolta dedicata alla Programmazione Assembly.

Alla prossima!


Continua a seguirci su:

Facebook Instagram Telegram Rss