| 
      Black Lord
 |  | lordghost |  
 
    Registered: Oct 2005 Posts: 232 (0.03 al dì)
 Location: Milan
 Corso: Informatica
 Anno: 3
 Time Online: 2 Days, 9:48:49 [...]
 Status: Offline
 
    Edit | Report | IP: Logged | ti posto quello che avevo fatto io. calcola se non ricordo male il fattoriale di n... ancora oggi non capisco perchè mi sia stato valutato solo 26?!?!? È abbastanza commentato, quindi spero ti possa essere utile. Non mi chiedere come funziona perchè non mi ricordo
  
 PHP:
 
# programma per il calcolo ricorsivo di n!
 
 .data
 msgn:     .asciiz "Inserire n:"
 msgk:     .asciiz "Inserire k:"
 msgr:     .asciiz "Risultato:"
 msgx:     .asciiz "\nPremere qualsiasi tasto per uscire, c per continuare"
 msgend:    .asciiz "\nProgramma terminato"
 msgreb:    .asciiz "\n\nRiavvio del programma\n"
 chr :   .asciiz " "  # buffer per la lettura del carattere di uscita
 
 .text
 .globl main
 
 main:
 
 # Lettura di n
 letturan:
 li $v0, 4           # $v0 codice della print_string
 la $a0, msgn      # $a0 indirizzo della stringa
 syscall             # stampa della stringa
 
 li $v0, 5           # $v0 codice della read_int
 syscall             # legge l’intero n e lo carica in $v0
 
 bltz $v0, letturan
 move $s0, $v0
 
 # Lettura di k
 letturak:
 li $v0, 4           # $v0 codice della print_string
 la $a0, msgk      # $a0 indirizzo della stringa
 syscall             # stampa della stringa
 
 li $v0, 5           # $v0 codice della read_int
 syscall             # legge l’intero n e lo carica in $v0
 
 bltz $v0, letturak
 move $s1, $v0
 
 
 
 
 # Calcolo della funzione
 move $a0, $s0        # a0 = n
 move $a1, $s1        # a1 = k
 jal  s
 abs $s0, $v0        # s0 = s(n,k)
 
 # Stampa del risultato
 li $v0, 4        # codice della print_int
 la $a0, msgr
 syscall
 
 move $a0, $s0    # a0 = s0 = s(n,k)
 li $v0, 1        # codice della print_int
 syscall
 
 
 #uscire o continuare
 li $v0, 4           # $v0 codice della print_string
 la $a0, msgx      # $a0 indirizzo della stringa
 syscall             # stampa della stringa
 
 la $a0, chr          # $a0 indirizzo del buffer
 li $a1, 2
 li $v0, 8           # $v0 codice della read_int
 syscall             # legge l’intero n e lo carica in $v0
 
 #move $a0, $v0
 lb $a0, chr        #0x20200063 and
 #li $t0, 255        #0x000000FF =
 #and $a0, $a0, $t0    #0x00000063
 
 bne $a0, 99, esci
 
 li $v0, 4        # codice della print_int
 la $a0, msgreb
 syscall
 j letturan
 
 
 # Termine del programma
 esci:
 li $v0, 4        # codice della print_int
 la $a0, msgend
 syscall
 
 li $v0, 10         # $v0 codice della exit
 syscall        # esce dal programma
 
 
 
 
 #*************************************************
 ********
 #            PROCEDURA Stirling
 #*************************************************
 ********
 
 s:
 addi $sp, $sp,-24          # alloca stack
 sw   $ra, 20($sp)        # salvo return address
 sw   $a0, 16($sp)        # salvo l’argomento n
 sw   $a1, 12($sp)        # salvo l’argomento k
 sw   $t0, 8($sp)        # salvo s(n-1, k-1)
 sw   $t1, 4($sp)        # salvo s(n-1, k)
 sw   $t2, 0($sp)        # salvo 1
 
 #debug print (stampa n)
 #  li $v0, 1
 #  syscall
 
 #casi 1-2
 
 bnez $a1, caso3    #k!=0
 bnez $a0, caso2    #n!=0
 #caso1
 li $v0, 1
 j end
 #caso2
 caso2:
 blez $a0, caso3
 li $v0, 0
 j end
 caso3:
 bge $a0, $a1, caso4
 #caso3
 li $v0, 0
 j end
 #caso4
 caso4:
 addi $a0, -1        # n = n-1
 addi $a1, -1        # k = k-1
 jal s
 move $t0, $v0        # t0 = s(n-1, k-1)
 
 lw $a1, 12($sp)        # ripristina a1 = k
 jal s
 mul $t1, $a0, $v0        # t1 = (n-1)*s(n-1, k)
 
 sub $v0, $t0, $t1        # il risultato sta in v0
 
 end:
 lw   $t2, 0($sp)        # ripristino t2
 lw   $t1, 4($sp)        # ripristino t1
 lw   $t0, 8($sp)        # ripristino t0
 lw   $a1, 12($sp)        # ripristino parametro1
 lw   $a0, 16($sp)        # ripristino parametro2
 lw   $ra, 20($sp)        # ripristino return address
 addi $sp, $sp, 24        # dealloca stack
 jr   $ra            # ritorno al chiamante
 
  Attachment: prog.asm.txt This has been downloaded 16 time(s).
 __________________My 3D blog: http://www.webgl.it
 |