Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- *PROGRAMMA - TRACCIA DI ESAME 04/07/2012
- *Scrivere un programma che abbia in entrata una stringa di caratteri con tappo; scrivere in una stringa in uscita una nuova stringa con tutti i caratteri compresi tra il primo e il secondo spazio.
- *Se la prima stringa ha un solo spazio, o due spazi consecutivi, o nessuno spazio, la stringa di destinazione sarà vuota.
- ORG $8000
- START MOVE.L #STRINGAIN,A0 Copia l'indirizzo della stringa in entrata STRINGAIN nel registro indirizzi A0, al fine di iniziare la lettura della stringa da parte del programma.
- MOVE.L #STRINGAOUT,A1 Copia l'indirizzo della stringa in uscita STRINGAOUT nel registro indirizzi A1.
- *"Prima fase" del programma.
- LOOP TST.B (A0) Controlla l'elemento puntato da A0 tramite l'operatore TST.
- BEQ DONE Se è stato raggiunto il "tappo" della stringa, significa che il programma non ha trovato nemmeno uno spazio. Il processore non effettuerà la copia dei caratteri interessati e passerà alla "fase finale" del programma.
- MOVE.B (A0)+,D0 Primo loop, che ricopre le azioni composte dal prorgamma nella 'prima fase': riversa nel primo registro dati disponibile l'elemento puntato da A0 (che verrà poi incrementato)
- CMP.B #$20,D0 ed effettua un confronto tra $20 (la rappresentazione in ASCII dello spazio) e D0, al fine di individuare il primo spazio.
- BEQ COPY Se l'operazione di confronto setta il bit Z si passa al loop di copia.
- BRA LOOP Altrimenti si ripete il ciclo, finché non si trova uno spazio o il tappo.
- *"Seconda fase" del programma.
- CLR D0 Resetta D0.
- COPY MOVE.B (A0)+,D0 Sposta l'elemento successivo allo spazio in D0 (se è stato incontrato uno spazio nel ciclo precedente allora A0 è già stato incrementato di 1). A0 viene nuovamente incrementato.
- CMP.B #$20,D0 Effettua nuovamente il confronto tra D0 e $20.
- BEQ DONE Se è stato raggiunto lo spazio, il programma si avvia alla sua conclusione. Sono stati trovati due spazi consecutivi.
- MOVE.B D0,(A1)+ In caso contrario, Copia il contenuto di D0 nella locazione puntata da A1. A1 viene incrementato per un eventuale ciclo successivo.
- TST.B (A0) Si ricontrolla l'elemento puntato da A0: se è il "tappo", allora il programma si avvia verso la conclusione.
- BEQ DONE
- BRA COPY
- DONE STOP #$2700
- *Area Dati
- ORG $8200
- STRINGAIN DC.B 'CALCOLATORI ELETTRONICI 1',0
- STRINGAOUT DS.B 20
- END START
Add Comment
Please, Sign In to add comment