Non riesco a venirne fuori.. mips assembly

di il
1 risposte

Non riesco a venirne fuori.. mips assembly

Ciao..
dovrei risolvere questo problema: dato un vettore di dimensione n ed un valore k, devo effettuare la ricerca lineare nel vettore restituendo la posizione in cui si trova oppure -1 se non è presente:
la mia idea era quella di confrontare uno a uno ogni elemento del vettore con il valore k solo che non riesco a passare all'elemento successivo nel vettore(o meglio riesco solo che essendo lungo n dovrei trovare un metodo che richiamando se stesso va avanti) vi posto quello che ho fatto finora:
.data
array: .word 1,2,3,-1,-2,-3 (dato valori solo per un esempio tipo)
dim: .word 6

.text
la $t0, array #carico array $t0
lw $t1, dim #dimensione array in $t1
li $t2, 0 #contatore posizione
li $t3, 0 #se non trovato da -1 altrimenti 0
li $t4, 3 #valore da ricercare nel vettore (es. prendo il numero 3)
beq $t1, $zero, nontrovato #dimensione è 0 va diretto a nontrovato dando -1
addi $t1, $t1 , -1
lw $s0, 0($t0)
lw $s1, 4($t0)
beq $s0, $t4, fine
loop:
beq $s1, $t4, fine
lw $s0, 4($s1) #qui son in difficolatà perchè non so come far passare all'elemento
sucessivo senza ogni volta dover scrivere 4-8-12-16...v
addi $t2, $t2, 1
bne $s0, $t4, loop

nontrovato:
li $t3, -1

fine:
addi $t2, $t2, 1


qualcuno riuscirebbe a darmi qualche dritta???
grazie in anticipo
ciao

1 Risposte

  • Re: Non riesco a venirne fuori.. mips assembly

    Ok sono riuscito a risolvere da solo.. lo metto magari qualcuno in futuro serve...

    .data
    array: .word 1,2,3,-1,-2,-3
    dim: .word 6

    .text
    la $t0, array #carico array
    lw $t1, dim #carico dimensione array
    li $t2, 0 #MOSTRA LA POSIZIONE DEL VALORE NEL VETTORE, OPPURE -1 SE NON E' PRESENTE
    li $t4, 1 #valore da ricercare nel vettore
    loop:
    beq $t1, $t2, nontrovato
    lb $s0, ($t0)
    beq $t0, $t4, fine
    addi $t2, $t2, 1
    addi $t0, $t0, 4
    bne $s0, $t4, loop
    j fine

    nontrovato:
    move $t2, $zero
    add $t2, $t2, -1

    fine:
Devi accedere o registrarti per scrivere nel forum
1 risposte