.data

str_welcome: .asciiz "Welcome to facedoor, il primo programma che ti insegna a programmare

in Assembly!"

str_Errore: .asciiz "\n\n Hai sbagliato ad inserire la scelta ! \n\n"

str_Errore_Max_public_user: .asciiz "\n\n Mi dispiace, e' stato raggiunto il limite di

profili pubblici!\n Se vuoi puoi creare un profilo privato ...\n\n"

str_Errore_Max_private_user: .asciiz "\n\n Mi dispiace, e' stato raggiunto il limite di

profili privati!\n Se vuoi puoi creare un profilo pubblico ...\n\n"

str_Errore_Max_user: .asciiz "\n\n Mi dispiace, e' stato raggiunto il limite di profili!\n

Torna tra qualche settimana :( ...\n\n"

str_Spazio: .asciiz " "

str_ACapo: .asciiz "\n"

str_Pubblico: .asciiz "111111"

str_Privato: .asciiz "0000000"

str_MenuPrincipale: .asciiz "\n\n -- MENU PRINCIPALE -- \n\n0-Crea Profilo\n1-Cerca

Profilo\n2-Cancella Profilo\n3-Mostra tutti Profili\n4-Esci\n\n"

str_MenuCreaProfilo: .asciiz "\n\n -- CREA PROFILO --\n\n"

str_MenuCercaProfilo: .asciiz "\n\n -- CERCA PROFILO --\n\n"

str_MenuCancellaProfilo: .asciiz "\n\n -- CANCELLA PROFILO --\n\n"

str_MenuMostraProfilo: .asciiz "\n\n -- MOSTRA TUTTI I PROFILI --\n\n"

str_MenuEsciProfilo: .asciiz "\n\n -- ESCI --\n\nInserisci il nome\n\n"

str_SottoMenuCreaProfilo: .asciiz "\n\nUtente creato con successo\n\n0-Modifica Profilo e

1-Torna al menu principale\n\n"

str_SottoMenuCercaProfilo: .asciiz "\n\n0-Torna al menu principale\n\n"

str_SottoMenuCancellaProfilo_cancellato: .asciiz "\n\nProfilo cancellato con successo, ci

dispiace che tu abbia lasciato facedoor :( \n\n"

str_SottoMenuCancellaProfilo_accessoristretto: .asciiz "\n\nATTENZIONE!\nNon puoi cancellare

un profilo che non hai inserito!\n\n"

_str_CercaUtenti_nessunRisultato: .asciiz "\nNon ci sono risultati cercando questo nome e

cognome :( "

str_ComparaStringheUguali: .asciiz "\nAbbiamo un risultato: "

str_ComparaStringheUgualiNome: .asciiz "\nAbbiamo un risultato: "

str_ComparaStringheUgualiCognome: .asciiz "\nAbbiamo un risultato: "

str_stampa_nome: .asciiz "Nome:"

str_stampa_cognome: .asciiz "Cognome:"

str_stampa_userID: .asciiz "UserID:"

str_stampa_interessi: .asciiz "Interessi:"

str_stampa_email: .asciiz "Email:"

ciao: .asciiz "\nCiao Ciao"

UtenteUno: .word nome,cognome,interessi,userID,visibilita,email,password

nome: .asciiz "Paolino\n"

cognome: .asciiz "Paperino\n"

interessi: .asciiz "Dormire, pisolare e riposini vari!\n"

userID: .asciiz "DonalDuck\n"

visibilita: .asciiz "111111\n"

email: .asciiz "paperino@disney.it\n"

password: .asciiz "313\n"

UtenteDue: .word nome2,cognome2,interessi2,userID2,visibilita2,email2,password2

nome2: .asciiz "Gastone\n"

cognome2: .asciiz "Paperone\n"

interessi2: .asciiz "Viaggiare e corteggiare paperina!\n"

userID2: .asciiz "Fortunello\n"

visibilita2: .asciiz "0000000\n"

email2: .asciiz "gastone@disney.it\n"

password2: .asciiz "1000cliente\n"

UtenteTre: .word nome3,cognome3,interessi3,userID3,visibilita3,email3,password3

nome3: .asciiz "Paperoga\n"

cognome3: .asciiz "Paperone\n"

interessi3: .asciiz "Combinare disastri :P\n"

userID3: .asciiz "PaparBat\n"

visibilita3: .asciiz "11111\n"

email3: .asciiz "Paperoga@papersera.it\n"

password3: .asciiz "paperoga\n"

UtenteQuattro: .word nome4,cognome4,interessi4,userID4,visibilita4,email4,password4

nome4: .asciiz "Paperina\n"

cognome4: .asciiz "Paperone\n"

interessi4: .asciiz "Farmi bella :)\n"

userID4: .asciiz "Paperetta\n"

visibilita4: .asciiz "11111\n"

email4: .asciiz "paperotta@disney.it\n"

password4: .asciiz "paperina\n"

UtenteCinque: .word nome5,cognome5,interessi5,userID5,visibilita5,email5,password5

nome5: .asciiz "Nonna Papera\n"

cognome5: .asciiz "Paperone\n"

interessi5: .asciiz "Farmi tante belle torte per i miei tanti nipoti\n"

userID5: .asciiz "FattoriaDellaNonna\n"

visibilita5: .asciiz "11111\n"

email5: .asciiz "nonna@fattoria.it\n"

password5: .asciiz "Mucca\n"

UtenteSei: .word nome6,cognome6,interessi6,userID6,visibilita6,email6,password6

nome6: .asciiz "Qui\n"

cognome6: .asciiz "Paperino\n"

interessi6: .asciiz "Giovani marmotte e giocare!\n"

userID6: .asciiz "Qui\n"

visibilita6: .asciiz "0000000\n"

email6: .asciiz "qui@disney.it\n"

password6: .asciiz "nipotino1\n"

UtenteSette: .word nome7,cognome7,interessi7,userID7,visibilita7,email7,password7

nome7: .asciiz "Quo\n"

cognome7: .asciiz "Paperino\n"

interessi7: .asciiz "Giocare e giovani marmotte!\n"

userID7: .asciiz "Quo\n"

visibilita7: .asciiz "0000000\n"

email7: .asciiz "quo@disney.it\n"

password7: .asciiz "nipotino2\n"

UtenteOtto: .word nome8,cognome8,interessi8,userID8,visibilita8,email8,password8

nome8: .space 256

cognome8: .space 256

interessi8: .space 256

userID8: .space 256

visibilita8: .space 256

email8: .space 256

password8: .space 256

UtenteNove: .word nome9,cognome9,interessi9,userID9,visibilita9,email9,password9

nome9: .space 256

cognome9: .space 256

interessi9: .space 256

userID9: .space 256

visibilita9: .space 256

email9: .space 256

password9: .space 256

UtenteDieci: .word nome10,cognome10,interessi10,userID10,visibilita10,email10,password10

nome10: .space 256

cognome10: .space 256

interessi10: .space 256

userID10: .space 256

visibilita10: .space 256

email10: .space 256

password10: .space 256

# PARTE CERCA

Str_ChiediNome: .asciiz "Inserisci nome: "

Space_Nome: .space 256

Str_ChiediCognome: .asciiz "Inserisci cognome: "

Space_Cognome: .space 256

# PARTE INSERISCI UTENTE

Str_ChiediInteressi: .asciiz "Inserisci i tuoi interessi: "

Space_Interessi: .space 256

Str_ChiediUserID: .asciiz "Inserisci il tuo UserID: "

Space_UserID: .space 256

Str_ChiediPrivacy: .asciiz "Setta la tua privacy: [000] per un profilo privato o [111] per

un profilo pubblico "

Space_Privacy: .space 256

Str_ChiediEmail: .asciiz "Inserisci email: "

Space_Email: .space 256

Str_ChiediPassword: .asciiz "Inserisci password: "

Space_Password: .space 256

Str_debug_uno: .asciiz "\n debug 1 \n "

Str_debug_due: .asciiz "\n debug 2 \n"

Str_debug_tre: .asciiz "\n debug 3 \n"

# LINK UTILI

# http://cs.lamar.edu/faculty/foreman/MIPS_example_programs/StringEx.s

# http://www.cs.unibo.it/~solmi/teaching/arch_2004-2005/Assembly3.pdf

#

http://stackoverflow.com/questions/4351500/help-trimming-string-input-of-its-return-charactermips

(rimuovere alla fine della stringa l'ultimo carattere)

.text

.globl main

main:

# j stampa_utenti

#li $s4,0 # Uso s4 per settare se trovo l'utente nella parte cerca utente [DA NON

MODIFICARE NELLA SUA PROCEDURA]

li $s4,0 # Uso s4 per settare se l'utente è pubblico / privato nella procedura di

creazione utente [DA NON MODIFICARE NELLA SUA PROCEDURA]

li $s5,7 # mi segno quanti uteni già salvati ci [DA NON MODIFICARE]

li $s6,4 # mi segno quanti uteni pubblici ci sono [DA NON MODIFICARE]

li $s7,3 # mi segno quanti uteni privati ci sono [DA NON MODIFICARE]

la $a0,str_welcome # Stampa frase di benvenuto

li $v0,4 # print_string

syscall

MENU_PRINCIPALE:

la $a0,str_MenuPrincipale # STAMPA MENU PRINCIPALE

li $v0,4 # print_string

syscall

li $v0,5 # read_int

syscall # risultato in $v0

move $t0,$v0 # salva la scelta in t0

li $t1, 0

beq $t0, $t1, scelta_CreaProfilo # Vai al menu crea profilo

li $t1, 1

beq $t0, $t1, scelta_CercaProfilo # Vai al menu cerca profilo

li $t1, 2

beq $t0, $t1, scelta_CancellaProfilo # Vai al menu cancella profilo

li $t1, 3

beq $t0, $t1, scelta_MostraProfilo # Vai al menu mostra profili

li $t1, 4

beq $t0, $t1, fine # Vai al menu esci

la $a0, str_Errore # STAMPA stringa errore se la scelta non è tra quelle di prima.

li $v0,4 # print_string

syscall

j MENU_PRINCIPALE # TORNO AL MENU PRINCIPALE!

# SEZIONE GESTISCI SCELTE MENU PRINCIPALE

scelta_CreaProfilo: # Crea profilo

la $a0,str_MenuCreaProfilo # spiega scelta

li $v0,4 # print_string

syscall

li $t0, 7 #carico il numero sette, se sono a sette vado a creare l'utente 8

beq $t0, $s5, crea_utente_otto

li $t0, 8 #carico il numero otto, se sono a sette vado a creare l'utente 9

beq $t0, $s5, crea_utente_nove

li $t0, 9 #carico il numero nove, se sono a sette vado a creare l'utente 10

beq $t0, $s5, crea_utente_dieci

li $t0, 10 #carico il numero dieci, il massimo numero di utenti disponibili

beq $t0, $s5, Err_MaxUser

j Continua_NO_Err_MaxUser # evito il messaggio di errore, saltando un paio di istruzioni

dopo

Err_MaxUser:

la $a0,str_Errore_Max_user # spiega scelta

li $v0,4 # print_string

syscall

Continua_NO_Err_MaxUser:

j MENU_PRINCIPALE

scelta_CercaProfilo: # Cerca profilo

la $a0,str_MenuCercaProfilo # spiega scelta

li $v0,4 # print_string

syscall

j SCELTA_CERCA_UTENTE

scelta_CancellaProfilo: # Cancella profilo

la $a0,str_MenuCancellaProfilo # spiega scelta

li $v0,4 # print_string

syscall

j SCELTA_CANCELLA_UTENTE

scelta_MostraProfilo: # Mostra profili

la $a0,str_MenuMostraProfilo # spiega scelta

li $v0,4 # print_string

syscall

j STAMPA_UTENTI_PUBBLICI

# FINE SEZIONE GESTISCI SCELTE MENU PRINCIPALE

# STAMPA UTENTI PUBBLICI

STAMPA_UTENTI_PUBBLICI:

# UTENTE UNO

la $s0,UtenteUno # inidirizzo memorio utente1

jal STAMPA_UTENTE

# UTENTE DUE

la $s0,UtenteDue # inidirizzo memorio utente2

jal STAMPA_UTENTE

# UTENTE TRE

la $s0,UtenteTre # inidirizzo memorio utente3

jal STAMPA_UTENTE

# UTENTE QUATTRO

la $s0,UtenteQuattro # inidirizzo memorio utente4

jal STAMPA_UTENTE

# UTENTE CINQUE

la $s0,UtenteCinque # inidirizzo memorio utente5

jal STAMPA_UTENTE

# UTENTE SEI

la $s0,UtenteSei # inidirizzo memorio utente6

-5-

C:\Users\Francesco\Desktop\725676\facebook.s venerdì 4 settembre 2015 15.46

jal STAMPA_UTENTE

# UTENTE SETTE

la $s0,UtenteSette # inidirizzo memorio utente7

jal STAMPA_UTENTE

# If $s is less than immediate, $t is set to one. It gets zero otherwise.

# Syntax: slti $t, $s, imm

# se il numero di iscritti e' meno di 7 salto direttamente alla fine

# se il numero di iscritti e' meno di 8 salto direttamente alla fine

slti $t1, $s5, 8 # meno di 8 ovvero 7

li $t0, 1

beq $t0, $t1, salta_stampa_utente

# UTENTE OTTO

la $s0,UtenteOtto # inidirizzo memorio utente8

jal STAMPA_UTENTE

# se il numero di iscritti e' meno di 9 salto direttamente alla fine

slti $t1, $s5, 9 # meno di 10 ovvero 9

li $t0, 1

beq $t0, $t1, salta_stampa_utente

# UTENTE NOVE

la $s0,UtenteNove # inidirizzo memorio utente9

jal STAMPA_UTENTE

# se il numero di iscritti e' meno di 10 salto direttamente alla fine

slti $t1, $s5, 10 # meno di 11 ovvero 10

li $t0, 0

beq $t0, $t1, salta_stampa_utente

# UTENTE DIECI

la $s0,UtenteDieci # inidirizzo memorio utente10

jal STAMPA_UTENTE

salta_stampa_utente:

la $a0,str_SottoMenuCercaProfilo # Stampa scelta torna indietro, ed aspetto che

l'utente prema un tasto

li $v0,4 # print_string

syscall

li $v0,5 # read_int

syscall # risultato in $v0

j MENU_PRINCIPALE

# FINE STAMPA UTENTI PUBBLICI

# STRING COMPARE --------------

# compara le 2 stringhe se uguali fino a 3 caratteri

# setta a0 a 1

# se diversi setta a0 a 2

START_COMPARE_STRING:

li $t3, 0 # conta i caratteri in comune

-6-

C:\Users\Francesco\Desktop\725676\facebook.s venerdì 4 settembre 2015 15.46

li $t4, 0 # conta quante volte "sbaglio"

li $t5, 3 # Dopo quante volte sbagliate / giuste esco dal ciclo

COMPARA_STRINGHE:

lbu $t0,0($a0) # Load a byte from the first source string.

lbu $t1,0($a1) # Load a byte from the second source string.

# Compare the two characters loaded.

blt $t0,$t1,COMPARE_CARATTERI_DIVERSI

bgt $t0,$t1,COMPARE_CARATTERI_DIVERSI

addi $t3,$t3,1 # Aumenta "carattere uguale"

beq $t3, $t5, COMPARE_EXIT_STRINGHE_UGUALI

# Both characters are the same.

beqz $t1,COMPARE_EXIT_STRINGHE_UGUALI # Return 0 if both are equal to NULL

COMPARE_CONTINUE: # o/w Increment both addresses and continue.

addi $a0,$a0,1

addi $a1,$a1,1

b COMPARA_STRINGHE

COMPARE_CARATTERI_DIVERSI: # Aumenta "carattere diverso"

addi $t4,$t4,1

beq $t4, $t5, COMPARE_EXIT_STRINGHE_DIVERSE

j COMPARE_CONTINUE

COMPARE_EXIT_STRINGHE_UGUALI:

li $v0,1 # vo a 1 uguale

jr $ra

COMPARE_EXIT_STRINGHE_DIVERSE:

li $v0,2 # vo a 2 --> stringhe diverse

jr $ra

# FINE FUNZIONE STRING COMPARE --------------

# MENU CERCA UTENTE ---------

SCELTA_CERCA_UTENTE:

la $a0, Str_ChiediNome # chiediamo nome

li $v0, 4

syscall

la $a0, Space_Nome # leggiamo nome

li $a1, 256

li $v0, 8

syscall

la $a0, Str_ChiediCognome # chiediamo il cognome

li $v0, 4

syscall

la $a0, Space_Cognome # leggiamo il cognome

li $a1, 256

li $v0, 8

syscall

li $s4,0 # Setto che nessun utente è stato trovato[0], nelle procedure se trovo una

stringa lo setto ad 1

-7-

C:\Users\Francesco\Desktop\725676\facebook.s venerdì 4 settembre 2015 15.46

# UTENTE UNO

la $s0,UtenteUno # inidirizzo memorio utente1

jal COMPARA_UTENTE

# UTENTE DUE

la $s0,UtenteDue # inidirizzo memorio utente2

jal COMPARA_UTENTE

# UTENTE TRE

la $s0,UtenteTre # inidirizzo memorio utente3

jal COMPARA_UTENTE

# UTENTE QUATTRO

la $s0,UtenteQuattro # inidirizzo memorio utente4

jal COMPARA_UTENTE

# UTENTE CINQUE

la $s0,UtenteCinque # inidirizzo memorio utente5

jal COMPARA_UTENTE

# UTENTE SEI

la $s0,UtenteSei # inidirizzo memorio utente6

jal COMPARA_UTENTE

# UTENTE SETTE

la $s0,UtenteSette # inidirizzo memorio utente7

jal COMPARA_UTENTE

# If $s is less than immediate, $t is set to one. It gets zero otherwise.

# Syntax: slti $t, $s, imm

# se il numero di iscritti e' meno di 7 salto direttamente alla fine

# se il numero di iscritti e' meno di 8 salto direttamente alla fine

slti $t1, $s5, 8 # meno di 8 ovvero 7

li $t0, 1

beq $t0, $t1, salta_cerca_utenti

# UTENTE OTTO

la $s0,UtenteOtto # inidirizzo memorio utente8

jal COMPARA_UTENTE

# se il numero di iscritti e' meno di 9 salto direttamente alla fine

slti $t1, $s5, 9 # meno di 9 ovvero 8

li $t0, 1

beq $t0, $t1, salta_cerca_utenti

# UTENTE NOVE

la $s0,UtenteNove # inidirizzo memorio utente9

jal COMPARA_UTENTE

# se il numero di iscritti e' meno di 10 salto direttamente alla fine

slti $t1, $s5, 10 # meno di 10 ovvero 9

li $t0, 1

beq $t0, $t1, salta_cerca_utenti

# UTENTE DIECI

la $s0,UtenteDieci # inidirizzo memorio utente10

jal COMPARA_UTENTE

salta_cerca_utenti:

-8-

C:\Users\Francesco\Desktop\725676\facebook.s venerdì 4 settembre 2015 15.46

#li $s4,0 # Setto che nessun utente è stato trovato[0], nelle procedure se trovo una

stringa lo setto ad 1

li $t0, 1 #carico 1

beq $t0, $s4, procedura_cerca_esci # se c'è uno vuol dire che ho trovato qualche stringa

la $a0,_str_CercaUtenti_nessunRisultato # spiega scelta

li $v0,4 # print_string

syscall

procedura_cerca_esci:

la $a0,str_SottoMenuCercaProfilo # Stampa scelta torna indietro, ed aspetto che

l'utente prema un tasto

li $v0,4 # print_string

syscall

li $v0,5 # read_int

syscall # risultato in $v0

j MENU_PRINCIPALE

# FINE MENU CERCA UTENTE ---------

# FUNZIONE CERCA

COMPARA_UTENTE:

# CERCO SE IL PROFILO è PUBBLICO

lw $t1,16($s0) # $t1 puntatore a privato(0) o pubblico(1)

la $a0,0($t1) # copio in a0 il "tipo di privacy"

la $a1,str_Pubblico # copio in a1 il nome inserito dall'utente

# call the strcpy function

# ritorna 1 in a0 se sono uguali

# ritorna 2 in a0 se sono diverse

addi $sp, $sp, -4

sw $ra, 0($sp)

jal START_COMPARE_STRING; # Procedura per confronto stringhe

lw $ra, 0($sp)

addi $sp, $sp, 4

li $t0, 1 #carico 1

beq $t0, $v0, utente_pubblico # se è ad 1 le c'è una sottostringa e stampo l'utente

j $ra # esco se l'utente è privato ....

utente_pubblico:

# FINE SE IL PROFILO è PUBBLICO

# Cerco nome

lw $t1,0($s0) # $t1 puntatore al nome

la $a0,0($t1) # copio in a0 il "nome"

la $a1,Space_Nome # copio in a1 il nome inserito dall'utente

# call the strcpy function

# ritorna 1 in a0 se sono uguali

# ritorna 2 in a0 se sono diverse

addi $sp, $sp, -4

sw $ra, 0($sp)

-9-

C:\Users\Francesco\Desktop\725676\facebook.s venerdì 4 settembre 2015 15.46

jal START_COMPARE_STRING; # Procedura per confronto stringhe

lw $ra, 0($sp)

addi $sp, $sp, 4

li $t0, 1 #carico 1

beq $t0, $v0, utenteunotrovato # se è ad 1 le c'è una sottostringa e stampo l'utente

# fine cerco nome

# cerco cognome

lw $t1,4($s0) # $t1 puntatore al conome

la $a0,0($t1) # copio in a0 il "conome"

la $a1,Space_Cognome # copio in a1 il cognome inserito dall'utente

# call the strcpy function

# ritorna 1 in a0 se sono uguali

# ritorna 2 in a0 se sono diverse

addi $sp, $sp, -4

sw $ra, 0($sp)

jal START_COMPARE_STRING; # Procedura per confronto stringhe

lw $ra, 0($sp)

addi $sp, $sp, 4

li $t0, 1 #carico 1

beq $t0, $v0, utenteunotrovato # se è ad 1 le c'è una sottostringa e stampo l'utente

# Fine cerco cognome

j $ra # esco se l'utente non è stato trovato ....

utenteunotrovato:

la $a0,str_ACapo # str_ComparaStringheUguali stampo che ho trovato un risultato

li $v0,4 # print_string

syscall

# stampo nome e cognome

la $a0,str_stampa_nome # stampo nome:

li $v0,4

syscall

lw $t1,0($s0) # Puntatore all'utente

la $a0,0($t1) # Puntatore al nome

li $v0,4 # print_string

syscall

la $a0,str_stampa_cognome # stampo cognome:

li $v0,4

syscall

lw $t1,4($s0) # $t1 puntatore al conome

la $a0,0($t1) # Puntatore al cognome

li $v0,4 # print_string

syscall

la $a0,str_stampa_interessi# stampo interessi:

li $v0,4

syscall

-10-

C:\Users\Francesco\Desktop\725676\facebook.s venerdì 4 settembre 2015 15.46

lw $t1,8($s0) # $t1 puntatore agli interessi

la $a0,0($t1) # Puntatore al cognome

li $v0,4 # print_string

syscall

la $a0,str_stampa_interessi# stampo UserID:

li $v0,4

syscall

lw $t1,12($s0) # $t1 puntatore agli userID

la $a0,0($t1) # Puntatore al cognome

li $v0,4 # print_string

syscall

la $a0,str_stampa_email# stampo la mail:

li $v0,4

syscall

lw $t1,20($s0) # $t1 puntatore agli userID

la $a0,0($t1) # Puntatore al cognome

li $v0,4 # print_string

syscall

li $s4,1 # Setto che nessun utente è stato trovato[0], nelle procedure se trovo una

stringa lo setto ad 1

j $ra # esco se l'utente è stato trovato

# FINE FUNZIONE CERCA

# FUNZIONE STAMPA UTENTE PUBBLICO

STAMPA_UTENTE:

# CONTROLLO SE IL PROFILO è PUBBLICO

lw $t1,16($s0) # $t1 puntatore a privato(0) o pubblico(1)

la $a0,0($t1) # copio in a0 il "tipo di privacy"

la $a1,str_Pubblico # copio in a1 il nome inserito dall'utente

# call the strcpy function

# ritorna 1 in a0 se sono uguali

# ritorna 2 in a0 se sono diverse

addi $sp, $sp, -4

sw $ra, 0($sp)

jal START_COMPARE_STRING; # Procedura per confronto stringhe

lw $ra, 0($sp)

addi $sp, $sp, 4

li $t0, 1 #carico 1

beq $t0, $v0, stampa_utente_pubblico # se è ad 1 le c'è una sottostringa e stampo l'utente

j $ra # esco se l'utente è privato ....

stampa_utente_pubblico:

la $a0,str_ACapo # str_ComparaStringheUguali stampo che ho trovato un risultato

li $v0,4 # print_string

syscall

-11-

C:\Users\Francesco\Desktop\725676\facebook.s venerdì 4 settembre 2015 15.46

# stampo nome e cognome

la $a0,str_stampa_nome # stampo Nome:

li $v0,4

syscall

lw $t1,0($s0) # Puntatore all'utente

la $a0,0($t1) # Puntatore al nome

li $v0,4 # print_string

syscall

la $a0,str_stampa_cognome # stampo Cognome:

li $v0,4

syscall

lw $t1,4($s0) # $t1 puntatore al cognome

la $a0,0($t1) # Puntatore al cognome

li $v0,4 # print_string

syscall

la $a0,str_stampa_userID # stampo UserID:

li $v0,4

syscall

lw $t1,12($s0) # $t1 puntatore al userID

la $a0,0($t1)

li $v0,4 # stampo

syscall

la $a0,str_stampa_interessi # stampo interessi:

li $v0,4

syscall

lw $t1,8($s0) # $t1 puntatore al interessi

la $a0,0($t1)

li $v0,4 # stampo

syscall

j $ra # esco dalla funzione

# FINE FUNZIONE STAMPA UTENTE PUBBLICO

# CREA UTENTE OTTO

crea_utente_otto:

la $a0, Str_ChiediPrivacy # chiediamo la privacy

li $v0, 4

syscall

la $a0, visibilita8 # leggiamo la privacy

li $a1, 256

li $v0, 8

syscall

la $a0,visibilita8 # copio in a1 il nome inserito dall'utente

la $a1,str_Pubblico # copio in a1 il nome inserito dall'utente

# call the strcpy function

-12-

C:\Users\Francesco\Desktop\725676\facebook.s venerdì 4 settembre 2015 15.46

# ritorna 1 in a0 se sono uguali

# ritorna 2 in a0 se sono diverse

addi $sp, $sp, -4

sw $ra, 0($sp)

jal START_COMPARE_STRING; # Procedura per confronto stringhe

lw $ra, 0($sp)

addi $sp, $sp, 4

# call the controlla_max_utenti_privati_pubblici function

# ritorna 1 in a0 se sono continuo con la registrazione

# ritorna 2 in a0 se devo uscire (messaggi di errori già stampati nella funzione)

# in $s4 ci sara il valore 0 [pubblico] o privato [1]

addi $sp, $sp, -4

sw $ra, 0($sp)

jal controlla_max_utenti_privati_pubblici

lw $ra, 0($sp)

addi $sp, $sp, 4

li $t1, 2 # carico lo zero

beq $t1, $a0, MENU_PRINCIPALE #Ritorna al menu principale (c'e stato un errore)

la $a0, Str_ChiediNome # chiediamo nome

li $v0, 4

syscall

la $a0, nome8 # leggiamo nome

li $a1, 256

li $v0, 8

syscall

la $a0, Str_ChiediCognome # chiediamo il cognome

li $v0, 4

syscall

la $a0, cognome8 # leggiamo il cognome

li $a1, 256

li $v0, 8

syscall

la $a0, Str_ChiediInteressi # chiediamo gli interessi

li $v0, 4

syscall

la $a0, interessi8 # leggiamo gli interessi

li $a1, 256

li $v0, 8

syscall

la $a0, Str_ChiediUserID # chiediamo l'UserID

li $v0, 4

syscall

la $a0, userID8 # leggiamo l'UserID

li $a1, 256

li $v0, 8

syscall

la $a0, Str_ChiediEmail # chiediamo la mail

li $v0, 4

syscall

-13-

C:\Users\Francesco\Desktop\725676\facebook.s venerdì 4 settembre 2015 15.46

la $a0, email8 # leggiamo la mail

li $a1, 256

li $v0, 8

syscall

la $a0, Str_ChiediPassword # chiediamo la password

li $v0, 4

syscall

la $a0, password8 # leggiamo la password

li $a1, 256

li $v0, 8

syscall

la $a0,str_SottoMenuCreaProfilo # Visualizza SottoMenu

li $v0,4 # print_string

syscall

li $v0,5 # read_int

syscall # risultato in $v0

move $t0,$v0 # salva la scelta in t0

li $t1, 0 # carico lo zero

beq $t1, $v0, crea_utente_otto #Ritorna a richiedere tutti i dati

j aumenta_contatori

# FINE CREA UTENTE OTTO

# CREA UTENTE NOVE

crea_utente_nove:

la $a0, Str_ChiediPrivacy # chiediamo la privacy

li $v0, 4

syscall

la $a0, visibilita9 # leggiamo la privacy

li $a1, 256

li $v0, 8

syscall

la $a0,visibilita9 # copio in a1 il nome inserito dall'utente

la $a1,str_Pubblico # copio in a1 il nome inserito dall'utente

# call the strcpy function

# ritorna 1 in a0 se sono uguali

# ritorna 2 in a0 se sono diverse

addi $sp, $sp, -4

sw $ra, 0($sp)

jal START_COMPARE_STRING; # Procedura per confronto stringhe

lw $ra, 0($sp)

addi $sp, $sp, 4

# call the controlla_max_utenti_privati_pubblici function

# ritorna 1 in a0 se sono continuo con la registrazione

# ritorna 2 in a0 se devo uscire (messaggi di errori già stampati nella funzione)

# in $s4 ci sara il valore 0 [pubblico] o privato [1]

addi $sp, $sp, -4

sw $ra, 0($sp)

jal controlla_max_utenti_privati_pubblici

lw $ra, 0($sp)

-14-

C:\Users\Francesco\Desktop\725676\facebook.s venerdì 4 settembre 2015 15.46

addi $sp, $sp, 4

li $t1, 2 # carico lo zero

beq $t1, $a0, MENU_PRINCIPALE #Ritorna al menu principale (c'e stato un errore)

la $a0, Str_ChiediNome # chiediamo nome

li $v0, 4

syscall

la $a0, nome9 # leggiamo nome

li $a1, 256

li $v0, 8

syscall

la $a0, Str_ChiediCognome # chiediamo il cognome

li $v0, 4

syscall

la $a0, cognome9 # leggiamo il cognome

li $a1, 256

li $v0, 8

syscall

la $a0, Str_ChiediInteressi # chiediamo gli interessi

li $v0, 4

syscall

la $a0, interessi9 # leggiamo gli interessi

li $a1, 256

li $v0, 8

syscall

la $a0, Str_ChiediUserID # chiediamo l'UserID

li $v0, 4

syscall

la $a0, userID9 # leggiamo l'UserID

li $a1, 256

li $v0, 8

syscall

la $a0, Str_ChiediEmail # chiediamo la mail

li $v0, 4

syscall

la $a0, email9 # leggiamo la mail

li $a1, 256

li $v0, 8

syscall

la $a0, Str_ChiediPassword # chiediamo la password

li $v0, 4

syscall

la $a0, password9 # leggiamo la password

li $a1, 256

li $v0, 8

syscall

la $a0,str_SottoMenuCreaProfilo # Visualizza SottoMenu

li $v0,4 # print_string

-15-

C:\Users\Francesco\Desktop\725676\facebook.s venerdì 4 settembre 2015 15.46

syscall

li $v0,5 # read_int

syscall # risultato in $v0

move $t0,$v0 # salva la scelta in t0

li $t1, 0 # carico lo zero

beq $t1, $v0, crea_utente_nove #Ritorna a richiedere tutti i dati

j aumenta_contatori

# FINE CREA UTENTE NOVE

# CREA UTENTE DIECI

crea_utente_dieci:

la $a0, Str_ChiediPrivacy # chiediamo la privacy

li $v0, 4

syscall

la $a0, visibilita10 # leggiamo la privacy

li $a1, 256

li $v0, 8

syscall

la $a0,visibilita10 # copio in a1 il nome inserito dall'utente

la $a1,str_Pubblico # copio in a1 il nome inserito dall'utente

# call the strcpy function

# ritorna 1 in a0 se sono uguali

# ritorna 2 in a0 se sono diverse

addi $sp, $sp, -4

sw $ra, 0($sp)

jal START_COMPARE_STRING; # Procedura per confronto stringhe

lw $ra, 0($sp)

addi $sp, $sp, 4

# call the controlla_max_utenti_privati_pubblici function

# ritorna 1 in a0 se sono continuo con la registrazione

# ritorna 2 in a0 se devo uscire (messaggi di errori già stampati nella funzione)

# in $s4 ci sara il valore 0 [pubblico] o privato [1]

addi $sp, $sp, -4

sw $ra, 0($sp)

jal controlla_max_utenti_privati_pubblici

lw $ra, 0($sp)

addi $sp, $sp, 4

li $t1, 2 # carico lo zero

beq $t1, $a0, MENU_PRINCIPALE #Ritorna al menu principale (c'e stato un errore)

la $a0, Str_ChiediNome # chiediamo nome

li $v0, 4

syscall

la $a0, nome10 # leggiamo nome

li $a1, 256

li $v0, 8

syscall

-16-

C:\Users\Francesco\Desktop\725676\facebook.s venerdì 4 settembre 2015 15.46

la $a0, Str_ChiediCognome # chiediamo il cognome

li $v0, 4

syscall

la $a0, cognome10 # leggiamo il cognome

li $a1, 256

li $v0, 8

syscall

la $a0, Str_ChiediInteressi # chiediamo gli interessi

li $v0, 4

syscall

la $a0, interessi10 # leggiamo gli interessi

li $a1, 256

li $v0, 8

syscall

la $a0, Str_ChiediUserID # chiediamo l'UserID

li $v0, 4

syscall

la $a0, userID10 # leggiamo l'UserID

li $a1, 256

li $v0, 8

syscall

la $a0, Str_ChiediEmail # chiediamo la mail

li $v0, 4

syscall

la $a0, email10 # leggiamo la mail

li $a1, 256

li $v0, 8

syscall

la $a0, Str_ChiediPassword # chiediamo la password

li $v0, 4

syscall

la $a0, password10 # leggiamo la password

li $a1, 256

li $v0, 8

syscall

la $a0,str_SottoMenuCreaProfilo # Visualizza SottoMenu

li $v0,4 # print_string

syscall

li $v0,5 # read_int

syscall # risultato in $v0

move $t0,$v0 # salva la scelta in t0

li $t1, 0 # carico lo zero

beq $t1, $v0, crea_utente_dieci #Ritorna a richiedere tutti i dati

j aumenta_contatori

# FINE CREA UTENTE DIECI

-17-

C:\Users\Francesco\Desktop\725676\facebook.s venerdì 4 settembre 2015 15.46

# CONTROLLA SE HO RAGGIUNTO IL NUMERO MASSIMO DI UTENTI PRIVATI / PUBBLICI

# controlla_max_utenti_privati_pubblici function

# ritorna 1 in a0 se sono continuo con la registrazione

# ritorna 2 in a0 se devo uscire (messaggi di errori già stampati nella funzione)

controlla_max_utenti_privati_pubblici:

li $s4,0 # Setto a zero S4, 'lo resetto'

li $t0, 1

beq $t0, $v0, check_utente_pubblico # vado all'utente privato o pubblico

li $s4,1 # Mi setto s4 ad uno così so che contatore incrementare una volta che l'utente

è stato inserito

j check_utente_privato

check_utente_pubblico:

li $t1, 5 # numero immediato massimo utenti pubblici

beq $t1, $s6, Max_utenti_pubblici # Controllo di non aver superato il max numero di

iscritti

j continua_registrazione

Max_utenti_pubblici:

la $a0, str_Errore_Max_public_user # Mostro il messaggio di errore

li $v0, 4

syscall

li $a0, 2 # Esci con errore, setto quindi a0 a 2

j $ra

check_utente_privato:

li $t1, 5 # numero immediato massimo utenti privati

beq $t1, $s7, Max_utenti_privati # Controllo di non aver superato il max numero di

iscritti

j continua_registrazione

Max_utenti_privati:

la $a0, str_Errore_Max_private_user # Mostro il messaggio di errore

li $v0, 4

syscall

li $a0, 2 # Esci con errore, setto quindi a0 a 2

j $ra

continua_registrazione:

j $ra # Ritorno alla fase di registrazione se non ho raggiunto i massimi ....

# FINE CONTROLLA SE HO RAGGIUNTO IL NUMERO MASSIMO DI UTENTI PRIVATI / PUBBLICI

# AUMENTA CONTATORI

# Promemoria

#li $s5,7 # mi segno quanti uteni già salvati ci sono

#li $s6,4 # mi segno quanti uteni pubblici ci sono

#li $s7,3 # mi segno quanti uteni privati ci sono

aumenta_contatori:

li $t0, 1

beq $t0, $s4, Aumenta_Contatore_UtentePrivato # vado all'utente privato o pubblico

addi $s6,$s6,1 # Aumenta indice contatore utenti pubblici

j Aumenta_Contatore_Utenti

-18-

C:\Users\Francesco\Desktop\725676\facebook.s venerdì 4 settembre 2015 15.46

Aumenta_Contatore_UtentePrivato:

addi $s7,$s7,1 # Aumenta indice contatore utenti privati

Aumenta_Contatore_Utenti:

addi $s5,$s5,1 # Aumenta indice contatore utenti

j MENU_PRINCIPALE

# FINE AUMENTA CONTATORI

# CANCELLA UTENTI

SCELTA_CANCELLA_UTENTE:

li $t0, 7

beq $t0, $s5, cancella_utente_accesso_illegale # se provo a cancellare un utente che non

ha inserito l'utente

li $t0, 8

beq $t0, $s5, cancella_utente_8 #cancella utenten8

li $t0, 9

beq $t0, $s5, cancella_utente_9 #cancella utenten8

li $t0, 10

beq $t0, $s5, cancella_utente_10 #cancella utenten8

cancella_utente_avvenuto:

la $a0,str_SottoMenuCancellaProfilo_cancellato # stampo utente cancellato

li $v0,4 # print_string

syscall

j continua_cancella_utente

cancella_utente_accesso_illegale:

la $a0,str_SottoMenuCancellaProfilo_accessoristretto # Stampa scelta torna indietro,

ed aspetto che l'utente prema un tasto

li $v0,4 # print_string

syscall

continua_cancella_utente:

la $a0,str_SottoMenuCercaProfilo # Stampa scelta torna indietro, ed aspetto che

l'utente prema un tasto

li $v0,4 # print_string

syscall

li $v0,5 # read_int

syscall # risultato in $v0

j MENU_PRINCIPALE

# FINE CANCELLA UTENTE

 

# CANCELLA UTENTE OTTO

 

cancella_utente_8:

la $a0,visibilita8 # copio in a0 il nome inserito dall'utente

la $a1,str_Pubblico # copio in a1 il nome inserito dall'utente

# call the strcpy function

# ritorna 1 in v0 se sono uguali

# ritorna 2 in v0 se sono diverse

addi $sp, $sp, -4

sw $ra, 0($sp)

jal START_COMPARE_STRING; # Procedura per confronto stringhe

lw $ra, 0($sp)

addi $sp, $sp, 4

li $t0, 1

beq $t0, $v0, cancella_pubblico8 # vado all'utente privato o pubblico

addi $s7,$s7,-1 # Aumenta indice contatore utenti privati

j cancella_utente8

cancella_pubblico8:

addi $s6,$s6,-1 # Aumenta indice contatore utenti pubblici

cancella_utente8:

addi $s5,$s5,-1 # Aumenta indice contatore utenti

j cancella_utente_avvenuto

# FINE CANCELLA OTTO

# CANCELLA UTENTE NOVE

cancella_utente_9:

la $a0,visibilita9 # copio in a1 il nome inserito dall'utente

la $a1,str_Pubblico # copio in a1 il nome inserito dall'utente

# call the strcpy function

# ritorna 1 in a0 se sono uguali

# ritorna 2 in a0 se sono diverse

addi $sp, $sp, -4

sw $ra, 0($sp)

jal START_COMPARE_STRING; # Procedura per confronto stringhe

lw $ra, 0($sp)

addi $sp, $sp, 4

li $t0, 1

beq $t0, $v0, cancella_pubblico9 # vado all'utente privato o pubblico

addi $s7,$s7,-1 # Aumenta indice contatore utenti privati

j cancella_utente9

cancella_pubblico9:

addi $s6,$s6,-1 # Aumenta indice contatore utenti pubblici

cancella_utente9:

addi $s5,$s5,-1 # Aumenta indice contatore utenti

j cancella_utente_avvenuto

# FINE CANCELLA NOVE

 

# CANCELLA UTENTE DIECI

cancella_utente_10:

la $a0,visibilita10 # copio in a0 il nome inserito dall'utente

la $a1,str_Pubblico # copio in a1 il nome inserito dall'utente

# call the strcpy function

# ritorna 1 in a0 se sono uguali

# ritorna 2 in a0 se sono diverse

addi $sp, $sp, -4

sw $ra, 0($sp)

jal START_COMPARE_STRING; # Procedura per confronto stringhe

lw $ra, 0($sp)

addi $sp, $sp, 4

li $t0, 1

beq $t0, $v0, cancella_pubblico10 # vado all'utente privato o pubblico

addi $s7,$s7,-1 # Aumenta indice contatore utenti privati

j cancella_utente10

cancella_pubblico10:

addi $s6,$s6,-1 # Aumenta indice contatore utenti pubblici

cancella_utente10:

addi $s5,$s5,-1 # Aumenta indice contatore utenti

j cancella_utente_avvenuto

# FINE CANCELLA DIECI

fine:

la $a0,ciao # saluti

li $v0,4 # print_string

syscall

li $v0,10 # exit

syscall