Oppure

Loading
31/08/10 14:24
djark
Ciao sono nuovo di questo forum e vorrei illustrarvi il mio problema. Devo scrivere un programma in assembly che, scorrendo un vettore di interi, mi restituisca la somma di tutti i numeri maggiori o uguali a un numero dato.

Ho trovato molti codici che potrebbero andare bene il problema è il compilatore. Il programma utilizzato è windlx e quindi il codice che scrivo mi da errore.
Di seguito allego il codice e l'errore che mi dà il programma quando vado a caricare il codice.
			.data
elem:			.word		7, 2, 3, 4, 5, 6, 7, 8, 9, 0
dim_vett:		.word		10
num_ricerc:		.word		7
			
			.text
			.global main
main:
	lw 	r1, elem 				;carico vettore in r1
	lw	r7, dim_vett			;carico dimensione del vettore in r7
	lw 	r6, #0    				;avanzamento vettore
	lw	r15, num_ricerc			;carico il valore contenuto di num_ricerc in r15	
	
Loop_ctrl:
	seq 	r11, r6, r7				;controlla se r6 e r2 contengono lo stesso valore e restituisce in r11 il valore 1 se true
	bnez	r11, fine				;se r11 è uguale a 1, quindi valore true, termina l'esecuzione del ciclo
	nop
	sge	r10, elem($r6), r15		;confronta valore dell'array con il valore dato e se true restituisce 1 a r10
	beqz	r10, re_ciclo			;controllo se il valore di r10 è uguale a zero, se vero ricomincio il ciclo
	bnez	r10, somma				;controllo se il valore di r10 è diverso da 0, se vero vado a somma
re_ciclo:
	addi 	r6, r6, 8				;incremento il valore dell'indice
	jal	Loop_ctrl				;salto ad inizio ciclo

somma:
	add 	r8, r8, r16				;sommo i valori degli elementi >= al valore dato e li memorizzo in r8
	addi 	r6, r6, 8				;incremento il valore dell'indice
	jal	Loop_ctrl

fine:
	trap 0					;termine del programma


spero di essere stato chiaro e spero di aver un aiuto, visto che il mio docente se ne fotte.

Ciao :)
aaa
31/08/10 15:44
pierotofy
Butta via windlx e scarica MARS: courses.missouristate.edu/KenVollmar/MARS/

Se dici di aver "trovato molti codici" presumo che tu non abbia provato a scriverlo per conto tuo, e in questo forum non troverai qualcuno che scrivera' il codice per te. Ti consiglio di studiare le basi del linguaggio prima di provare a scrivere una bozza del codice.

d.umn.edu/~gshute/spimsal/…

pierotofy.it/pages/sorgenti/MIPS_Assembly/
Il mio blog: piero.dev
31/08/10 16:07
djark
No il codice lo scritto con le poche nozioni che ho e soprattutto che mi hanno insegnato...cmq non voglio uno che scriva il codice...vorrei una persona che mi spieghi dove sbaglio e se può farmi capire l'errore...Il programma, per mia sfortuna, è stato scelto dal docente...comunque grazie per i link ora mi metto a leggerli...

:-))

aaa
07/09/10 15:07
djark
Vi posto il codice se può essere d'aiuto a qualcuno :)


            .data

elem:            .word        1, 2, 3, 4, 5, 6, 7, 8, 9, 0
dim_vett:        .word        24
num_ricerc:        .word        7
            
            .text
            .global main
main:
    lw     r1, elem                 ;carico vettore in r1
    lw    r7, dim_vett            ;carico dimensione del vettore in r7 in bit
    lw     r6, #0                 ;avanzamento vettore
    lw    r15, num_ricerc            ;carico il valore contenuto di num_ricerc in r15    
    
Loop_ctrl:
    lw    r9, elem(r6)            ;carico elemento del vettore in f0
    seq     r11, r6, r7                ;controlla se r6 e r7 contengono lo stesso valore e restituisce in r11 il valore 1 se true. Quindi vettore finito
    bnez    r11, fine                ;se r11 è uguale a 1, quindi valore true, termina l'esecuzione del ciclo
    sge    r10, r9, r15            ;confronta valore dell'array con il valore dato e se true restituisce 1 a r10
    beqz    r10, re_ciclo            ;controllo se il valore di r10 è uguale a zero, se vero ricomincio il ciclo
    bnez    r10, somma                ;controllo se il valore di r10 è diverso da 0, se vero vado a somma
    
    
re_ciclo:
    addi     r6, r6, #4                ;incremento il valore dell'indice
    jal    Loop_ctrl                ;salto ad inizio ciclo

somma:
    add     r8, r8, r9                ;sommo i valori degli elementi >= al valore dato e li memorizzo in r8
    addi     r6, r6, #4                ;incremento il valore dell'indice
    jal    Loop_ctrl

fine:
    trap 0                    ;termine del programma


P.s. il codice è ancora da ottimizzare....ti ringrazio Pierotofy
aaa