.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