Ricerca di token in una stringa di caratteri
Lo scopo di quest’esercizio è quello di ricercare un token all’interno di una sequenza di caratteri. Se il token è presente, allora memorizzare in una variabile l’indirizzo del registro in cui è presente il token; se il token non è presente, terminare il ciclo ed uscire dal programma.
Definizione iniziale
Per prima cosa occorre definire tutto il necessario per costruire il nostro algoritmo in assembler. Guardando alle ipotesi dell’esercizio vi è necessità di avere:
- Una variabile che contenga il carattere che dobbiamo ricercare all’interno della stringa;
- Una variabile che contenga il carattere che fungerà da terminatore della stringa;
- Una stringa su cui effettuare la ricerca;
- Una variabile in cui memorizzare l’indirizzo del nostro token.
Ecco allora ciò di cui abbiamo bisogno tradotto in assembler:
$8100 ORG
*Assegnazione tramite il codice operativo del valore rappresentante il carattere : alla
EQU *variabile TOKEN
TOKEN ‘:’ EQU
TOKEN2 EQU ‘<’
*Definizione tramite il codice operativo di un array di caratteri
DEFINE CONSTANT STRING ‘ab:cd’
DC.B
*Definizione di una variabile non inizializzata delle dimensioni di una longword di nome
*TOKENA
TOKENA 1 DS.L
Progettazione dell'algoritmo
Una volta definito tutto il necessario per lavorare sulla stringa, passiamo a progettare quale sarà il comportamento del nostro algoritmo. Date le premesse, si potrebbe pensare che il nostro algoritmo si possa suddividere in tre fasi: start, ciclo di confronti ed esito, che contrassegneremo opportunamente con delle label. Nella prima fase faremo tutte le assegnazioni utili all’algoritmo, nella seconda verrà implementato il vero e proprio ciclo di confronti, che permetterà la determinazione della presenza o dell’assenza del token richiesto, infine un’ultima fase che ci restituirà, a patto che il carattere che cerchiamo sia all’interno della stringa, l’indirizzo in cui è memorizzato.
Start
In questa fase ci preoccuperemo di assegnare i valori utili al nostro algoritmo in opportune variabili. E dunque:
START #STRING, A0
MOVEA.L #TOKEN, D0
MOVE.B #TOKEN2, D1
MOVE.B
Con la prima istruzione viene prelevato l’indirizzo della variabile reso costante tramite e infine copiato STRING, #all’interno del registro A0. Con la seconda istruzione avviene in modo del tutto analogo la copia dell’indirizzo della variabile all’interno del registro dopo essere stato reso costante. Idem, per la terza istruzione.