Questo sito utilizza cookies solo per scopi di autenticazione sul sito e nient'altro. Nessuna informazione personale viene tracciata. Leggi l'informativa sui cookies.
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.
Codice sorgente - presumibilmente C#
.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.
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.
.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
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...