Visualizzazione dei risultati da 1 a 5 su 5
  1. #1
    Utente di HTML.it L'avatar di goatboy
    Registrato dal
    Mar 2011
    residenza
    Salerno
    Messaggi
    408

    [Assembly] dubbi passaggio parametri e stack pointer

    Salve a tutti. Sto studiando assembly MIPS all'Università ma ho dei dubbi sul passaggio di parametri e sullo stack pointer. Sapevo già che lo stack è una coda con logica LIFO e va verso il basso , quindi da indirizzi più alti ad indirizzi più bassi. Lo stack pointer dovrebbe essere l'indirizzo in cima allo stack: quindi per inserire un elemento decremento lo stack? per toglierlo incremento?

    Per quanto riguarda il passaggio di parametri: con l'istruzione jal Funzione passo il controllo alla funzione chiamata (nel mio caso, somma). Per il ritorno alla funzione chiamante si usa jr $ra (che registro è ra?? ).

    Qui mi perdo. Vi posto l'esercizio fatto in classe, ho commentato dove potevo ma alcune operazioni con lo stack pointer non mi sono proprio chiare.. per esempio gli indirizzi delle sw e lw, oppure quell'istruzione addi ripetuta due volte.

    Qualcuno di voi può aiutarmi a capire?

    codice:
    .data
    str1: .asciiz "Inserire primo numero: "
    str2: .asciiz "Inserire secondo numero: "
    strout: .asciiz "La somma è: "
    .text
    .globl main
    
    main: 
    li $v0, 4 # Stampa prima stringa
    la $a0, str1
    syscall
    
    li $v0, 5 # Lettura primo intero
    syscall
    
    move $s0, $v0 # Memorizzo il primo intero
    
    li $v0, 4 # Stampa seconda stringa
    la $a0, str2
    syscall
    
    li $v0, 5 # Lettura secondo intero
    syscall
    
    move $s1, $v0 # Memorizzo il secondo intero
    
    # ---- PASSAGGIO PARAMETRI ----
    addi $sp, $sp, -12 # Alloca 12 byte nello stack
    sw $s0, 8($sp) 
    sw $s1, 4($sp)
    jal somma # Trasferisce il controllo alla procedura "somma"
    lw $s0, 0($sp)
    addi $sp, $sp, 12 # Dealloca 12 byte dallo stack
    # ---- PASSAGGIO PARAMETRI ----
    
    li $v0, 4 # Stampa terza stringa
    la $a0, strout
    syscall
    
    li $v0, 1 # Stampa il risultato
    move $a0, $s0
    syscall
    
    li $v0, 10 # Fine programma
    syscall
    
    # Funziona somma
    somma: 
    addi $sp, $sp, -12 # Salvataggio dello stato
    sw $s1, 8($sp)
    sw $s0, 4($sp)
    sw $ra, 0($sp)
    
    lw $s0, 16($sp) # Prelievo parametro dallo stack
    lw $s1, 20($sp)
    
    add $s0, $s0, $s1
    
    sw $s0, 12($sp) # Inserimento risultato nello stack
    lw $ra, 0($sp) # Ripristino dello stato
    
    lw $s0, 4($sp)
    lw $s1, 8($sp)
    addi $sp, $sp, 12
    
    jr $ra # Ritorno alla funzione chiamante

  2. #2
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    La tua non è una domanda ma un "insieme di dubbi" sul MIPS ...

    Non ho capito bene a cosa rispondere ma se non hai chiaro cosa sia $ra probabilmente devi rivedere le basi del linguaggio.

    "The jal instruction saves the return address in register $r31. This register is also called $ra (where "ra" means return address)."

    $ra è il registro "return address" in cui viene salvato dalla jal l'indirizzo di rientro quando questa sposta l'esecuzione ad una funzione.
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  3. #3
    Utente di HTML.it L'avatar di goatboy
    Registrato dal
    Mar 2011
    residenza
    Salerno
    Messaggi
    408
    Ok, ma perchè alloca 12 byte prima di richiamare la funzione somma, e poi all'inizio della funzione somma alloca di nuovo 12 byte nello stack pointer? Oppure perchè nelle sw di "somma" inverte gli indirizzi di sp per s0 e s1? Non so proprio dove cercarle queste cose, e al corso non ho materiale su questo specifico argomento..

  4. #4
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Alloca i primi byte per fare spazio sullo stack per i parametri e dopo per fare spazio ai dati locali alla funzione.
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  5. #5
    Utente di HTML.it L'avatar di goatboy
    Registrato dal
    Mar 2011
    residenza
    Salerno
    Messaggi
    408
    Ok, grazie
    Per il resto cercherò qualcosa online

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.