GOTO – CALL – RETURN


GOTO


Questa istruzione permette di saltare da un punto a un altro del programma in modo incondizionato (cioè si salta senza identificare la posizione di partenza). Prima di spiegare la sintassi va spiegato che cos'è una label. Le istruzioni assembler vanno scritte nella seconda colonna del video (con il cursore lampeggiante attaccato al lato sinistro della finestra in cui si scrive il codice premere il tasto Tab in alto a sinistra della tastiera). Perchè, quando serve, nella prima colonna si scrivono le label, che rappresentano i nomi di punti ben precisi del programma. Sicuramente con gli esempi sotto sarà tutto più chiaro. La sintassi è




rappresentano tante istruzioni.




In pratica la label, scritta nella prima colonna, è riconoscibile perché termina con i due punti ':'. Quando viene eseguito l'istruzione GOTO in alto, questa salta tutte le istruzioni intermedie (può anche raggiungere una LABEL posizionata prima dell'istruzione GOTO) ed esegue il codice che segue la LABEL. Vediamo un esempio più completo che richiama le istruzioni già viste.


Ipotizziamo che sul pin RB1, settato come ingresso, ci sia '1' logico (per esempio causato da un pulsante premuto). Vogliamo che il led collegato sul pin RB2, settato come uscita (ipotizziamo che il led sia collegato per accendersi quando RB2 è a '1' logico), si accenda. E vogliamo anche che, se il pin RB1 è a '0' (quindi viene rilasciato il pulsante in precedenza premuto), il led su RB2 si spenga.




rappresentano tante istruzioni.




CALL E RETURN


E' un istruzione di salto, ma a differenza del GOTO è di tipo condizionato, cioè memorizza la riga dell'istruzione, perché al termine della subroutine chiamata, bisogna eseguire l'istruzione successiva a quella della CALL che ha chiamato. L'ultima istruzione delle subroutine chiamate con l'istruzione CALL deve essere RETURN, questa istruzione torna alla istruzione successiva a quella dell'ultima CALL che ha chiesto di saltare (ho specificato l'ultima perché è possibile avere fino a 8 chiamate annidate). La sintassi è




rappresentano tante istruzioni.



La subroutine LABEL: può essere chiamata da una o più posizioni. Nel nostro esempio posso chiamarla con l'istruzione CALL della riga 27 oppure 35, la differenza è che dopo l'istruzione RETURN il programma salta rispettivamente all'istruzione della riga 28 oppure 36 e continua il programma.


Facile vero !!!