Macro in assembly

Macro in assembly
Una macro è un nome simbolico che il programmatore dà ad una serie di caratteri (il testo della macro) o ad una serie di istruzioni. Quando l’assemblatore pre-processa il programma, ricerca i nomi delle macro precedentemente definite e quando ne trova una, sostituisce al nome della macro il relativo testo. In questo modo il programmatore può evitare di ripetere lo stesso pezzo di codice più volte nel suo programma.

Sintassi:
nome MACRO
(codice)
ENDM

Esempio macro per andare a

ACAPO MACRO
mov ah,02
mov dl,13
int 21h
mov dl,10
int 21h
ENDM

ACAPO MACRO ; Definizione della macro, con nome simbolico ACAPO
mov ah,2
mov dl, 13
int 21h
mov dl, 10
int 21h
ENDM ; terminazione del blocco macro
.MODEL SMALL
.DATA
.STACK
.CODE
inizio:
mov ah,02
mov dl,’*’
int 21h
ACAPO ; Uso della macro. In questo punto la macro ACAPO verrà espansa nelle 5 istruzioni che la compongono
mov ah,02
mov dl,’#’
int 21h
ACAPO ; Uso della macro. Altre 5 istruzioni espanse
mov ah,02
mov dl,’*’
int 21h
ACAPO ; Uso della macro. Altre 5 istruzioni espanse
mov ah,02
mov dl,’#’
int 21h
mov AX,4C00h
end inizio
end

Macro con parametri e etichette

Le macro di codice diventano veramente interessanti se utilizzate con parametri, ovvero se dotate di argomenti che possono essere variabili nel momento dell’uso.

La seguente è una macro che stampa un carattere sullo schermo, indicato al momento dell’uso:

PUTCHAR MACRO carattere
mov ah,02
mov dl, carattere
int 21h
ENDM

Quando si vuole scrivere un carattere sullo schermo basta scrivere

PUTCHAR ‘A’

Se invece una macro dovesse contenere una o più etichette, visto che il suo codice viene copiato all’interno del programma, si presenterebbe il problema dell’uso ripetuto dell’etichetta, dato che il nome dell’etichetta verrà ripetuto tante volte quante volte la macro è usata.
Per ovviare a questo problema si usa una direttiva dedicata LOCAL che consente di dichiarare le etichette utilizzate nella macro, lasciando il compito all’assemblatore di gestirne correttamente la ripetizione.
Direttiva LOCAL

Sintassi: LOCAL nome

Scopo: Impone all’assemblatore di trasformare il simbolo nome usato in una macro in un simbolo univoco per ogni espansione della macro.
Nota: La direttiva va posta all’inizio del blocco di codice della macro.

Please follow and like us:

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *

Questo sito usa Akismet per ridurre lo spam. Scopri come i tuoi dati vengono elaborati.

Commenti recenti

Working Hours

  • Monday9am - 6pm
  • Tuesday9am - 6pm
  • Wednesday9am - 6pm
  • Thursday9am - 6pm
  • Friday9am - 6pm
  • SaturdayClosed
  • SundayClosed
Latest Posts

Teachers

Facebook
Twitter
LinkedIn
Contatti

Commenti recenti

Wordpress Social Share Plugin powered by Ultimatelysocial
error

Enjoy this blog? Please spread the word :)

%d blogger hanno fatto clic su Mi Piace per questo: