Che materia stai cercando?

Ricerca di token in una stringa

Appunti con esercitazione di Calcolatori elettronici I del prof. Canonico sulla ricerca di token in una stringa di caratteri: le variabili, il terminatore, le istruzioni, tre fasi (start, ciclo di confronti ed esito), i codici operativi, i cicli di confronti.

Esame di Calcolatori elettronici I docente Prof. A. Mazzeo

Anteprima

ESTRATTO DOCUMENTO

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.

Per prima cosa occorre definire tutto il necessario per costruire il nostro algoritmo in assembler. Guardando alle ipotesi

dell’esercizio v’è 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

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 Con la seconda istruzione avviene in modo del tutto analogo la copia dell’indirizzo della

A0.

variabile all’interno del registro dopo essere stato reso costante. Idem, per la terza istruzione.

TOKEN, D0,

Domanda – I codici operativi della prima e della seconda istruzione sembrano diversi, perché hanno lo

stesso effetto?

Nel primo caso l’indirizzo della variabile viene mosso all’interno di un registro indirizzi, invece nel secondo caso

STRING

l’indirizzo della variabile viene copiato all’interno di un registro dati. Pertanto nel primo caso occorre usare il

TOKEN

(move address), nel secondo un semplice

MOVEA MOVE.

CICLO DI CONFRONTI

A questo punto deve avvenire il confronto 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 è il terminatore della stringa. Il ragionamento da fare è: prendiamo il primo

indirizzo di memoria della stringa e confrontiamo il primo carattere con il primo token e poi con il secondo. Se è uguale

ad uno di questi, si procede con la fase finale, altrimenti incrementiamo l’indirizzo di memoria della stringa ed

effettuiamo un altro confronto. Traducendo in linguaggio assembler abbiamo:

LOOP (A0)+,D0

CMP.B (A0),D1

CMP.B LOOP

BNE

Con la prima istruzione prendiamo il contenuto di (vale a dire l’indirizzo di memoria della stringa, dove vi è

A0

memorizzato il valore della stringa, a cui punta), lo compariamo con (contenente la rappresentazione numerica

A0 D0

dei due punti) ed incrementiamo il valore dell’indirizzo di memoria della stringa. Con la seconda istruzione prendiamo il

contenuto di e lo compariamo con Se una delle due condizioni è soddisfatta, si esce dal ciclo tramite la terza

A0 D1.

istruzione e si procede con l’ultima fase.

ESITO

L’ultima fase consisterà unicamente nel ricopiare il valore del token all’interno del registro finale Se non vi è il

TOKENA.

token all’interno della stringa il valore della memoria rimarrà inalterato e dunque pari a zero.


PAGINE

2

PESO

41.85 KB

PUBBLICATO

+1 anno fa


DETTAGLI
Corso di laurea: Corso di laurea in ingegneria informatica
SSD:
A.A.: 2013-2014

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à Napoli Federico II - Unina o del prof Mazzeo Antonino.

Acquista con carta o conto PayPal

Scarica il file tutte le volte che vuoi

Paga con un conto PayPal per usufruire della garanzia Soddisfatto o rimborsato

Recensioni
Ti è piaciuto questo appunto? Valutalo!

Altri appunti di Calcolatori elettronici i

Quaderno appunti presi a lezione con esercizi esame svolti
Appunto
Calcolatori elettronici I - Esercizi sugli Automi
Esercitazione
Calcolatori Elettronici I - Appunti e esercizi
Appunto
Calcolatori elettronici I - analisi
Appunto