PDA

View Full Version : Programma pari e dispari per assembler


ubanton
21-09-2009, 19:04
Raga aiuto domani ho l'esame e non lo so fare il prog che mi vede i numeri pari e quelli dispari:
qui ho uno fatto da un ragazzo ma non capisco la procedura, non trovo la logica:
ORG $8000
START MOVE #0,D3
MOVE #0,D4
MOVE #4,D0
MOVEA.L #N,A0
LOOP MOVE (A0)+,D1
BTST #0,D1
BNE DISPARI
ADD D1,D3
BRA SUCC
DISPARI ADD D1,D4
SUCC SUBQ #1,D0
BPL LOOP
STOP #$2000

ORG $8800
N DC 1,4,5,7,2

END START

mi aiutate a capirlo per favore aiutatemi

cdimauro
22-09-2009, 07:21
Raga aiuto domani ho l'esame e non lo so fare il prog che mi vede i numeri pari e quelli dispari:
qui ho uno fatto da un ragazzo ma non capisco la procedura, non trovo la logica:

ORG $8000 ; Definisce l'inizio del programma.
START MOVE #0,D3 ; Azzera l'accumulatore dei numeri pari.
MOVE #0,D4 ; Azzera l'accumulatore dei numeri dispari.
MOVE #4,D0 ; D0 = Numero di elementi del vettore, meno 1.
MOVEA.L #N,A0 ; a0 = indirizzo del vettore che contiene i numeri.
LOOP MOVE (A0)+,D1 ; Preleva il primo numero e lo mette in d1. Inoltre a0 si sposta automaticamente al numero successivo.
BTST #0,D1 ; Controlla il bit 0 (vale 0 se il numero è pari, e 1 se è dispari).
BNE DISPARI ; Se non è zero, è dispari, per cui salta all'etichetta DISPARI
ADD D1,D3 ; E' zero, quindi il numero è pari. Somma il numero a D3.
BRA SUCC ; Passa a controllare se c'è un altro numero nell'array.
DISPARI ADD D1,D4 ; Se arrivi qui è perché il numero è dispari, per cui lo somma a D4.
SUCC SUBQ #1,D0 ; Sottrae 1 al contatore degli elementi del vettore.
BPL LOOP ; Se ci sono ancora elementi (cioé D0 è rimasto positivo), torna al loop per controllare il prossimo.
STOP #$2000 ; No, sono finiti (D0 è diventato negativo), per cui ferma il programma.

ORG $8800 ; Definisce l'inizio dei dati.
N DC 1,4,5,7,2 ; Definisce il vettore N, con 5 elementi (word a 16 bit).

END START ; Fine del programma.

mi aiutate a capirlo per favore aiutatemi
Te l'ho commentato. ;)

Comunque il programma calcola la somma dei numeri pari e di quelli dispari, che mette rispettivamente in D3 e D4.

Non è il massimo dell'efficienza, ma l'importante è che faccia il suo lavoro.

EDIT: purtroppo i tab hanno fatto sballare i commenti. Sorry.