*----------------------------------------------------------- * Title : * Written by : * Date : * Description: *----------------------------------------------------------- ORG $1000 START: *Output - Stampa a video * LEA MESSAGE,A1 MOVE.B #14,D0 TRAP #15 *Legge da tastiera (max 80 caratteri) e salva all'indirizzo indicato da A1 i caratteri *mentre in d1.w salva la lunghezza* LEA STRINGA,a1 MOVE.B #2,D0 TRAP #15 MOVE.L D1,LUNGH fine move.l #STRINGA,-(a7) *passa tramite stack la stringa letta move.l d1,-(a7) *passa tramite stack la lunghezza della stringa jsr inverti *chiama la subroutine per invertire minuscole/maiuscole move.l #irq1,$64 *inizializza la isr loopInf nop nop bra loopInf STOP #$00 inverti: movem.l d0-d2/a0,-(a7) move.l 24(a7),a0 *recupero l'indirizzo move.l 20(a7),d0 *recupero il valore clr.l d2 *lo uso per contare le minuscole ciclo: move.b (a0),d1 *leggo un carattere alla volta cmp.b #96,d1 *se è maggiore è un carattere minuscolo altrimenti è maiuscolo (stiamo supponendo che ci siano solo lettere!!!!) bgt minusc maiusc add.l #32,d1 *aggiungo 32 per convertire in minuscolo jmp agg minusc sub.l #32,d1 *sottraggo 32 per convertire in maiuscolo add.l #1,d2 agg move.b d1,(a0) *salvo il carattere invertito add #1,a0 *passo al carattere successivo sub #1,d0 *sottraggo alla lunghezza...se è zero ho terminato bne ciclo move.l d2,MINUSCOLE *salvo il numero di minuscole movem.l (a7)+,d0-d2/a0 rts irq1: movem.l d0-d1/a0-a2,-(a7) *stampo a video la nuova stringa* LEA STRINGA,A1 MOVE.B #14,D0 TRAP #15 move.l MINUSCOLE,D1 *calcolo il modulo 10 delle minuscole e lo visualizzo divu #10,d1 swap d1 jsr resettaDisplay lea digits,a0 move.l #$E00000,a2 *Indirizzo del display a segmenti move.b (a0,d1),14(a2) *la visualizza sul display MOVE.L LUNGH,D1 sub.l MINUSCOLE,D1 *calcolo il modulo 10 delle maiuscole e lo visualizzo divu #10,d1 swap d1 move.b (a0,d1),(a2) *la visualizza sul display movem.l (a7)+,d0-d1/a0-a2 rte resettaDisplay: movem.l d3/d4/a0/a2,-(a7) move.l #$E00000,a2 *Indirizzo del display a segmenti lea digits,a0 move.l #10,d3 *spegne le varie cifre move #14,d4 *il ciclo mi serve per spegnerle tutte cic: move.b (a0,d3),(a2,d4) *indirizz. indiretto con reg. indirizzo + indice + scostamento (in questo caso non c'è) sub.l #2,d4 bge cic movem.l (a7)+,d3/d4/a0/a2 rts MESSAGE DC.B 'INSERISCI UNA SERIE DI LETTERE ',0 INPUT DS.L 1 LUNGH DS.L 1 MINUSCOLE DS.L 1 STRINGA DS.B 80 digits: *dc.b $3F,$06,$5B,$4F,$66,$6D,$7D,$07,$7F,$6F,$00,$40 dc.b $3F *digit 0 dc.b $06 *digit 1 dc.b $5B *digit 2 dc.b $4F *digit 3 dc.b $66 *digit 4 dc.b $6D *digit 5 dc.b $7D *digit 6 dc.b $07 *digit 7 dc.b $7F *digit 8 dc.b $6F *digit 9 dc.b $00 *digit off dc.b $40 *dash END START *~Font name~Courier New~ *~Font size~10~ *~Tab type~1~ *~Tab size~4~