La mia idea è quella di usare una malloc, ovvero la system call 9 in MIPS.
Ogni volta che devi memorizzare un nuovo utente fai la malloc, la quale ti ritorna un puntatore al nuovo blocco di memoria appena allocato. Tramite questo puntatore utilizzi la syscall 4 per inserirci una nuova stringa, ovvero nome e cognome. Nel frattempo però i puntatori agli utenti li memorizzo in un array di puntatori, altrimenti non li posso ricordare. Penso ci siano anche altre soluzioni molto più eleganti ma questa è quella che mi è venuta.
Nel codice ipotizzo solo di memorizzare 3 utenti, giustamente puoi crearti una funzioncina inserisci utente o elimina utente o cerca utente.
.globl main
.data
utenti: .space 1000
str: .space 1000
nomcog: .asciiz "NOME E COGNOME : "
.text
main:
.macro malloc
li $v0, 9
li $a0, 1000
syscall
.end_macro
li $t0, 0
memorizza_utenti:
beq $t0, 3, stampo #memorizzo al max 3 utenti
sll $t6, $t0, 2
malloc #ritorna in $v0 il puntatore alla memoria appena allocata
move $t4, $v0
li $v0, 8
la $a0, ($t4) #leggo da stdin
li $a1, 1000
syscall
sw $t4, utenti($t6)
addi $t0, $t0, 1
j memorizza_utenti
stampo:
li $t0, 0
loop_stampa:
beq $t0, 3, exit #stampo i 3 utenti
sll $t6, $t0, 2
lw $t3, utenti($t6)
li $v0, 1
move $a0, $t3
syscall
li $v0, 11
li $a0, 10
syscall
li $v0, 4
la $a0, nomcog
syscall
li $v0, 4
move $a0, $t3
syscall
li $v0, 11
li $a0, 10
syscall
addi $t0, $t0, 1
j loop_stampa
exit:
li $v0, 10
syscall
Forse 1000 byte sono un pò esagerati per la malloc -.-