Visualizzazione dei risultati da 1 a 2 su 2
  1. #1

    Assembly Mips : procedure annidate

    Scrivere un programma che legga due interi non negativi x e y e visualizzi su console il loro prodotto prod(x,y) = { 0 se y=0 oppure somma(x,prod(x,y-1)) }
    somma(x,y)= { x se y=0 oppure [1+ somma(x,y-1)] }

    questo è quello che ho fatto io..ma non torna! perchè se metto x=3 e y=2 scrive 4
    mi potete aiutare.. ps i main nn l'ho messo

    prod:
    sub $sp, $sp,12 #si crea l'area di memoria per la procedura
    sw $a0, 4($sp) #essendo ricorsiva, memorizza l'intero passato come argomento
    sw $a1, 8($sp) #essendo ricorsiva, memorizza l'intero passato come argomento
    sw $ra, 0($sp) #essendo ricorsiva, salvo il registro di ritorno $ra nella pila
    beq $a1, $zero, zero #se l'intero è zero devo ritornare questo valore
    sub $a1,$a1,1
    sw $a1, 8($sp)
    jal sum
    move $a0,$v0
    move $a1,$v1
    jal prod
    lw $ra, 0($sp)
    move $v0,$a0
    addi $sp, $sp, 12 #ripristino dello stack
    jr $ra


    sum:
    lw $ra, 0($sp)
    lw $a1, 8($sp)
    lw $a0, 4($sp)
    beq $a1,$zero, x
    sub $a1,$a1,1
    sw $a1, 8($sp)
    addi $a0,$a0,1
    sw $a0, 4($sp)
    jal sum
    move $v0,$a0
    move $v1,$a1
    jr $ra


    x:
    lw $ra, 0($sp) #prima di tutto recupero l'indirizzo di ritorno e lo carico in $ra
    addi $sp, $sp, 16 #ripristino lo stack sommando il numero di byte che gli avevo sottratto all'inizio della procedura
    move $v0, $a0 #ritorno il valore di x
    jr $ra #torno al chiamante



    zero: #oltre a ritornare il valore zero devo anche ripristinare lo stack

    lw $ra, 0($sp) #prima di tutto recupero l'indirizzo di ritorno e lo carico in $ra
    addi $sp, $sp, 16 #ripristino lo stack sommando il numero di byte che gli avevo sottratto all'inizio della procedura
    li $v0, 0 #ritorno il valore zero
    jr $ra #torno al chiamante

  2. #2
    secondo me la logica sarebbe:
    prod(3,2)-> sum(3,prod(3,1)) -> sum(3,sum(3,prod(3,0)))

    quindi il prod fa 0 -> sum(3,sum(3,0)) -> sum(3,3)

    però non so come interpretarla

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.