*----------------------------------------------------------- * Title : * Written by : * Date : * Description: *----------------------------------------------------------- ORG $1000 START: * Stampa a video* LEA messaggio,A1 MOVE.B #14,D0 TRAP #15 *Leggi la lunghezza del vettore* MOVE.B #4,D0 TRAP #15 move.l d1,lunghezza *salva in memoria clr.l d5 *lo uso come contatore lea vettore,a0 move.l lunghezza,d6 ciclo LEA elemento,A1 *Stampa a video* MOVE.B #14,D0 TRAP #15 *Legge un numero e lo salva in d1* MOVE.B #4,D0 TRAP #15 move.l d1,(a0)+ *Salva in memoria add.l #1,d5 *Conta cmp.b d6,d5 *confronta beq fine jmp ciclo fine move.l #vettore,-(a7) *passa tramite stack l'indirizzo del vettore move.l lunghezza,-(a7) *passa tramite stack il valore della lunghezza jsr paridispari *chiamo la subroutine move.l #irq1,$64 *inizializzo loopInf nop nop bra loopInf STOP #$00 paridispari: movem.l d1-d3/a0,-(a7) move.l 20(a7),d0 *lunghezza del vettore move.l 24(a7),a0 *indirizzo del vettore clr.l d1 *lo uso come contatore clr.l d2 *mi indica la posizione in cui andare a spostare i numeri pari clr.l d3 ciclo1 move.b d1,d3 mulu #4,d3 *Perché li ho letti come longword move.l (a0,d3),d4 *sposta di volta in volta i singoli elementi del vettore in d4 btst #0,d4 *verifica se è pari bne dispari pari move.b d2,d3 mulu #4,d3 move.l d4,(a0,d3) *sposto il valore pari alla posizione corretta add.b #1,d2 *incremento la posizione dispari add #1,d1 *contatore cmp.l d1,d0 *verifico se ho scansionato tutto il vettore beq fine1 jmp ciclo1 fine1 move.l d2,lunghezza *salva la nuova lunghezza movem.l (a7)+,d1-d3/a0 rts segment7: movem.l d3-d4/a0-a2,-(a7) lea digits,a0 jsr resettaDisplay move.l #$E00000,a2 *Indirizzo del display a segmenti move.l lunghezza,d2 move.l #14,d1 move.b (a0,d2),(a2,d1) movem.l (a7)+,d3-d4/a0-a2 rts resettaDisplay: movem.l d3/d4/a2,-(a7) move.l #$E00000,a2 *Indirizzo del display a segmenti 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/a2 rts irq1: clr.l d2 lea vettore,a0 move.l lunghezza,d3 cmp.b #0,d3 beq nessuno loop *Stampa a video di un numero* move.l (a0)+,d1 MOVE.B #3,D0 TRAP #15 add.b #1,d2 *conta cmp.l lunghezza,d2 bne loop nessuno jsr segment7 rte SIMHALT ; halt simulator * Put variables and constants here 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 messaggio dc.b 'Inserisci la lunghezza del vettore ',0 elemento dc.b 'Inserisci l''elemento del vettore ',0 lunghezza ds.l 1 *Spazio in cui salvare la lunghezza appoggio ds.l 1 vettore ds.l 10 END START *~Font name~Courier New~ *~Font size~16~ *~Tab type~1~ *~Tab size~4~