Guest User

Untitled

a guest
Sep 12th, 2018
67
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. *PROGRAMMA - TRACCIA DI ESAME 04/07/2012
  2. *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.
  3. *Se la prima stringa ha un solo spazio, o due spazi consecutivi, o nessuno spazio, la stringa di destinazione sarà vuota.
  4.  
  5.         ORG         $8000
  6. 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.
  7.         MOVE.L  #STRINGAOUT,A1          Copia l'indirizzo della stringa in uscita STRINGAOUT nel registro indirizzi A1.
  8. *"Prima fase" del programma.
  9. LOOP        TST.B       (A0)                    Controlla l'elemento puntato da A0 tramite l'operatore TST.
  10.         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.
  11.         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)
  12.         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.
  13.         BEQ     COPY                    Se l'operazione di confronto setta il bit Z si passa al loop di copia.
  14.         BRA     LOOP                    Altrimenti si ripete il ciclo, finché non si trova uno spazio o il tappo.
  15. *"Seconda fase" del programma.
  16.         CLR     D0                  Resetta D0.
  17. 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.
  18.         CMP.B       #$20,D0             Effettua nuovamente il confronto tra D0 e $20.
  19.         BEQ     DONE                    Se è stato raggiunto lo spazio, il programma si avvia alla sua conclusione. Sono stati trovati due spazi consecutivi.
  20.         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.
  21.         TST.B       (A0)                    Si ricontrolla l'elemento puntato da A0: se è il "tappo", allora il programma si avvia verso la conclusione.
  22.         BEQ     DONE
  23.         BRA     COPY
  24. DONE        STOP        #$2700
  25.  
  26. *Area Dati
  27.         ORG     $8200
  28. STRINGAIN   DC.B        'CALCOLATORI ELETTRONICI 1',0
  29. STRINGAOUT  DS.B        20
  30.         END     START
Add Comment
Please, Sign In to add comment