Vediamo un esempio di utilizzo di sottoprogrammi in Assembly.
Per chiamare una procedura dal programma principale si usa l’istruzione: CALL nome_procedura
Dopo la CALL il controllo passa alla procedura chiamata.
La definizione della procedura è sempre in coda al programma principale. L’istruzione RET consente l’uscita dalla procedura e il rientro al programma chiamante (l’esecuzione riprende dalla prima istruzione dopo quella di chiamata della procedura.
Problema
Voglio sviluppare, in linguaggio Assembly x86, un programma che prende in input 2 numeri interi, ne effettua la somma e fornisce in output il valore della somma. Il programma dovrà chiamare una procedura per il calcolo della somma.
Analisi e progetto
Il programma dovrà acquisire il valore di due numeri e passarli, come parametri di input, alla procedura che effettua la somma, la procedura restituisce, come parametro in output, il valore calcolato.
Dati
num1 variabile di tipo intero a 8 bit (contiene il valore del primo numero);
num2 variabile di tipo intero a 8 bit (contiene il valore del secondo numero);
tot variabile di tipo intero a 8 bit (contiene la somma dei 2 numeri).
Algoritmo in pseudocodice
Programma sommaN leggi num1; leggi num2; addizione(num1, num2, tot); scrivi tot; Fine. procedura addizione(in n1, in n2, out tot); tot ← n1 + n2; Fine.
Codice sorgente
.model small .stack 100h .data num1 db 50 num2 db 250 tot dw ? .code inizio: mov ax,@data mov ds,ax ; metti qui l'input di num1 e di num2 mov ax,0 push ax ; parametro: risultato mov al, num2 push ax ; parametro: primo num da sommare mov al, num1 push ax ; parametro: secondo num da sommare call addizione ; chiamata procedura addizione pop ax pop ax pop tot ; metti qui la stampa del risultato contenuto in tot mov ah,4Ch int 21h addizione proc ; definizione della procedura push bp mov bp,sp par1 equ [bp+4] par2 equ [bp+6] par3 equ [bp+8] mov ax,par1 add ax,par2 mov par3,ax pop bp ret addizione endp ; fine della procedura end inizio ; fine del programma |
Il programma proposto chiama una procedura passando i paramentri attraverso lo stack.
Proposte di lavoro
1. Aggiungi le istruzioni per l’input e l’output dei valori
2. Verifica il funzionamento del programma.
3. Esegui il programma passo passo: compila la tabella di traccia e uno schema dello stack durante l’esecuzione.
4. Modifica il programma in modo che effettui la somma di 3 valori.
Buon lavoro!