Anteprima
Vedrai una selezione di 1 pagina su 2
Ricerca di token Pag. 1
1 su 2
D/illustrazione/soddisfatti o rimborsati
Disdici quando
vuoi
Acquista con carta
o PayPal
Scarica i documenti
tutte le volte che vuoi
Estratto del documento

RICERCA DI TOKEN IN UNA STRINGA DI CARATTERI E MEMORIZZAZIONE DELL'INDIRIZZO DEI TOKEN TROVATI

Con questo esercizio vogliamo ricercare un determinato token all'interno di una stringa, constatarne la presenza o l'assenza all'interno di essa ed eventualmente scrivere in memoria l'indirizzo in cui il token, che stiamo cercando, è stato registrato. Date le nostre premesse, iniziamo a definire tutto ciò di cui necessitiamo per risolvere il problema. Dunque abbiamo bisogno di: - una variabile che contenga il token che dobbiamo ricercare all'interno della stringa; - una variabile che contenga il token che fungerà da terminatore della stringa; - un array di caratteri su cui effettuare l'operazione; - una variabile che contenga gli indirizzi di memoria degli eventuali token trovati. Questo è ciò che ci occorre tradotto in linguaggio assembler: *Valore del carattere da memorizzare nella variabile TOKEN, il codice operativo usato.

è EQU*che permette non solo di memorizzare il valore, ma di renderlo anche costante.

TOKEN ':'EQUTOKEN2 '<'EQU*Definizione tramite il codice operativo di un array di caratteri

DEFINE CONSTANTSTRING 'ab:c:de<'

DC.B*Dichiarazione di spazio non allocato per memorizzare gli indirizzi degli eventuali token trovati*all’interno del programma. In questo caso possiamo registrare al più 4 indirizzi.

TOKENA 4DS.L

START

END

Stabiliti gli elementi sui quali agire e con i quali andare ad operare, dobbiamo implementare il codice. L’algoritmo consterà di tre parti: una prima in cui verranno effettuate tutte le operazioni preliminari (assegnazioni), quindi si passerà alla fase del loop e della ricerca, infine una terza che provvederà all’eventuale memorizzazione dell’indirizzo del token.

Come preannunciato questa sarà la fase in cui ci si preoccuperà di effettuare tutte le assegnazioni utili

Il funzionamento del nostro codice è il seguente:

START - indica l'inizio del programma

TOKENA, A1 - utilizzati per memorizzare gli indirizzi di memoria delle variabili nei registri indirizzo

LEA #STRING,A0 - carica l'indirizzo della stringa da cercare nel registro A0

MOVEA.L #TOKEN,D0 - carica l'indirizzo del token trovato nel registro D0

MOVE.B #TOKEN2,D1 - carica l'indirizzo del token2 nel registro D1

Tutte le istruzioni sopra provvedono a trasferire gli indirizzi di memoria in cui sono memorizzate le variabili nei rispettivi registri indirizzo.

In vi verrà registrato l'indirizzo del token trovato, in vi è la stringa su cui effettuare la ricerca, in vi è il carattere da ricercare, infine in c è il carattere terminatore della stringa.

TOKEN e TOKEN2 sono variabili che contengono gli indirizzi di memoria.

Domanda - I primi tre codici operativi sembrano essere diversi tra di loro. Perché ognuno di essi produce un'azione che in sostanza è uguale a quelle delle altre due?

Il codice operativo LEA è l'acronimo di "load effective address" e ha la funzione di prelevare l'indirizzo effettivo della variabile e di porlo nel registro indirizzi. La seconda istruzione MOVEA carica l'indirizzo di TOKENA dopo averlo reso costante.

I primi due codici operativi, per questo utilizzo, sono totalmente equivalenti. Avremmo infatti potuto scrivere indifferentemente:

#TOKENA,A1MOVEA.L

oppure

STRING,A0LEA

proprio in virtù di questa uguaglianza. Ma anche la terza istruzione ha lo scopo di prendere l’indirizzo di e di TOKEN porlo in un registro, la differenza sta nel fatto che i primi due avevano come destinazione un registro indirizzi, questa istruzione ha come destinazione un registro dati. Dunque nella seconda istruzione occorre usare (move MOVEA address), nella terza MOVE.LOOP

In questo secondo passaggio dobbiamo preoccuparci dello sviluppo del codice che verrà utilizzato per i confronti dei caratteri e in particolare per il riconoscimento del token. Il primo problema è determinato dal raffronto. Deve avvenire, infatti, tra i vari elementi della stringa e i due caratteri che abbiamo definito all’inizio, vale a dire i due punti : e il minore <. Il primo è l’elemento di cui

dobbiamo verificare la presenza ed eventualmente l'indirizzo, il secondo è ilterminatore della stringa. Il ragionamento da fare è: prendiamo il primo indirizzo di memoria della stringa econfrontiamo il primo carattere con il primo token e poi con il secondo. Se è uguale ad uno di questi, si procede con lafase finale, altrimenti incrementiamo l'indirizzo di memoria della stringa ed effettuiamo un altro confronto.

*compara il contenuto di A0 con il contenuto di D0, quindi incrementa A0

LOOP (A0)+,D0

CMP.B

*se i due elementi sono uguali, passa a FOUND

FOUNDBEQ

*altrimenti compara A0 con D1

Dettagli
Publisher
A.A. 2012-2013
2 pagine
SSD Ingegneria industriale e dell'informazione ING-INF/05 Sistemi di elaborazione delle informazioni

I contenuti di questa pagina costituiscono rielaborazioni personali del Publisher valeria0186 di informazioni apprese con la frequenza delle lezioni di Calcolatori elettronici I e studio autonomo di eventuali libri di riferimento in preparazione dell'esame finale o della tesi. Non devono intendersi come materiale ufficiale dell'università Università degli studi di Napoli Federico II o del prof Mazzeo Antonino.