Programma in Mips

di il
1 risposte

Programma in Mips

Utilizzando QtSpim, scrivere e provare un programma che richieda all’utente l’inserimento di un vettore di caratteri contenente al massimo 20 elementi e visualizzi i caratteri del vettore che compaiono un numero dispari di volte (1,3,5,…).

ne sarei grato !

quello che ho fatto io : dopo l'inserimento non termina

data
inserisci: .asciiz "\nInserisci al più 20 interi per istanziare il vettore, 0 per terminare: \n"
array: .word 0:21

.text
.globl main

main:
li $v0, 4
la $a0, inserisci
syscall

move $t0, $zero #lo uso per calcolare l'offset per salvare gli interi nell'array
move $t3, $zero #contatore per sapere qanti valori sono già stati inseriti
li $t7, 1
li $t9, 2
move $t5, $zero

inserimento:
beq $t3, 20, avanti #se $t3 è uguale a 20, non si può più inserire alcun valore
li $v0, 5 #altrimenti leggo l'intero
syscall

beq $v0, $zero, avanti #se è stato inserito zero si deve concludere
add $t3, $t3, 1 #altrimenti si incrementa il contatore
sw $v0, array($t0) #si memorizza l'intero a partire dall'indirizzo in cui è allocato l'array con l'offset indicato da $t0
addi $t0, $t0, 4 #$t0 si incrementa di quattro in modo da memorizzare al prossimo passaggio l'intero successivo (dato che ogni word è di 4 byte)
j inserimento

avanti:
move $t0, $zero #contatore che mi fa spostare nell'array
move $t4, $zero #contatore che mi indica la posizione in cui si trova la prima occorrenza dell'intero nel vettore
move $t6, $zero
lw $t2, array($t0)
addi $t0, $t0, 4 #altrimenti aggiorno il registro che mi permette di spostarmi nell'array sommando quattro al suo valore
j loop_interno

loop: addi $t7,$t7,1
move $t4, $t7
addi $t6,$t6,4
move $t0,$t6
loop2: lw $s1, array($t0)
bne $s1, $zero, loop_interno
addi $t0, $t0, 4 #altrimenti aggiorno il registro che mi permette di spostarmi nell'array sommando quattro al suo valore
addi $t4,$t4,1
beq $t4,$t3,control
j loop2

loop_interno:
beq $t4,$t3,control
lw $t1, array($t0) #carico il valore dall'array e lo memorizzo in $t1
addi $t0, $t0, 4 #altrimenti aggiorno il registro che mi permette di spostarmi nell'array sommando quattro al suo valore
addi $t4, $t4, 1 #incremento il contatore della posizione
beq $t1, $t2, trovato #se $t1 si ripete nel vettore incremento un contatore
j loop_interno

trovato:
addi $t5, $t5,1
sw $zero, array($t0)
beq $t4,$t3, controllo
j loop_interno

controllo:
div $t4, $t9 # dividi il numero per 2
mfhi $t8 # Hi = HI contiene il resto e lo porto nel registro $t2
bne $t8, $zero, stampa
control: beq $t7,$t3,exit
j loop


exit:
li $v0, 10 #exit
syscall

1 Risposte

  • Re: Programma in Mips

    Nessuno mi può aiutare.. almeno dire come calcolare le occorenze in un vettore... grazie mille !
Devi accedere o registrarti per scrivere nel forum
1 risposte