Questo sito utilizza cookies solo per scopi di autenticazione sul sito e nient'altro. Nessuna informazione personale viene tracciata. Leggi l'informativa sui cookies.
Username: Password: oppure
Altri Linguaggi - Vettori con assembly
Forum - Altri Linguaggi - Vettori con assembly

Avatar
djark (Normal User)
Newbie


Messaggi: 4
Iscritto: 31/08/2010

Segnala al moderatore
Postato alle 16:24
Martedì, 31/08/2010
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#

  1. .data
  2. elem:                   .word           7, 2, 3, 4, 5, 6, 7, 8, 9, 0
  3. dim_vett:               .word           10
  4. num_ricerc:             .word           7
  5.                        
  6.                         .text
  7.                         .global main
  8. main:
  9.         lw      r1, elem                                ;carico vettore in r1
  10.         lw      r7, dim_vett                    ;carico dimensione del vettore in r7
  11.         lw      r6, #0                                  ;avanzamento vettore
  12.         lw      r15, num_ricerc                 ;carico il valore contenuto di num_ricerc in r15       
  13.        
  14. Loop_ctrl:
  15.         seq     r11, r6, r7                             ;controlla se r6 e r2 contengono lo stesso valore e restituisce in r11 il valore 1 se true
  16.         bnez    r11, fine                               ;se r11 è uguale a 1, quindi valore true, termina l'esecuzione del ciclo
  17.         nop
  18.         sge     r10, elem($r6), r15             ;confronta valore dell'array con il valore dato e se true restituisce 1 a r10
  19.         beqz    r10, re_ciclo                   ;controllo se il valore di r10 è uguale a zero, se vero ricomincio il ciclo
  20.         bnez    r10, somma                              ;controllo se il valore di r10 è diverso da 0, se vero vado a somma
  21. re_ciclo:
  22.         addi    r6, r6, 8                               ;incremento il valore dell'indice
  23.         jal     Loop_ctrl                               ;salto ad inizio ciclo
  24.  
  25. somma:
  26.         add     r8, r8, r16                             ;sommo i valori degli elementi >= al valore dato e li memorizzo in r8
  27.         addi    r6, r6, 8                               ;incremento il valore dell'indice
  28.         jal     Loop_ctrl
  29.  
  30. fine:
  31.         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 :)

PM
Avatar
pierotofy (Admin)
Guru^2


Messaggi: 6230
Iscritto: 04/12/2003

Up
0
Down
V
Segnala al moderatore
Postato alle 17:44
Martedì, 31/08/2010
Butta via windlx e scarica MARS: http://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.

http://www.d.umn.edu/~gshute/spimsal/home.html

http://www.pierotofy.it/pages/sorgenti/MIPS_Assembly/


Il mio blog: https://piero.dev
PM
Avatar
djark (Normal User)
Newbie


Messaggi: 4
Iscritto: 31/08/2010

Up
0
Down
V
Segnala al moderatore
Postato alle 17:07
Martedì, 07/09/2010
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

PM
Avatar
djark (Normal User)
Newbie


Messaggi: 4
Iscritto: 31/08/2010

Up
-1
Down
V
Segnala al moderatore
Postato alle 18:07
Martedì, 31/08/2010
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...

:-))


PM