Aiuto URGENTISSIMO programmazione MIPS

Il ritrovo della comunità dove confrontarsi e discutere sulle notizie dal mondo dell'informatica, di Ubuntu e di tutto quello che la riguarda, novità, pettegolezzi e quant'altro.
Scrivi risposta
silvia89
Prode Principiante
Messaggi: 0
Iscrizione: sabato 24 gennaio 2009, 17:40

Aiuto URGENTISSIMO programmazione MIPS

Messaggio da silvia89 »

Ciao a tutti!!!  :(
Ho bisogno di un'occhiata a questo progetto che devo consegnare domani ma che non mi funziona  :'(
Teoricamente il programma dovrebbe calcolare le funzioni seno, coseno e tangente da input...
Vi prego aiutatemiiiiii urgentemente  >:(
Di seguito potete trovare il codice .s del programma:

.data
#visualizzazione intestazione
Int1: .asciiz"\n   PROGETTO DI ARCHITETTURA DEGLI ELABORATORI\n"
Int2: .asciiz"\n ------------------Benvenuto--------------------\n"
Int3: .asciiz"\n Con questo programma e' possibile calcolare tre funzioni trigonometriche: "
Int4: .asciiz"\n seno,coseno e tangente. Attraverso un menu' di scelta, sara' possibile"
Int5: .asciiz"\n scegliere quale funzione applicare al numero da inserire come input\n"
Int6: .asciiz" \n                    Buon divertimento!\n"
#stringhe per programma
InsNum: .asciiz"\nInserisci un numero: "
Menu: .asciiz"\n0.Seno\n1.Coseno\n2.Tangente\n"
Err: .asciiz"\nAttenzione: scelta non valida!\n"
Exit: .asciiz"\nDesideri riavviare il programma(y/n):\n"
Bye: .asciiz "\n\nGrazie e arrivederci!"
RSen: .asciiz"\nIl seno e'= "
RCos: .asciiz"\nIl coseno e'= "
RTan: .asciiz"\nLa tangente e'= "
JTable: .word Sen,Cos,Tan
.text
.globl main

#menu' principale
main:
#dichiarazione variabili
add $t1,$0,$0  #scelta
add $s0,$0,$0  #x
add $s1,$0,$0  #n
add $s2,$0,$0  #conf
#stampo tutte le intestazioni con presentazione
la $a0,Int1
addi $v0,$0,4
syscall
la $a0,Int2
addi $v0,$0,4
syscall
la $a0,Int3
addi $v0,$0,4
syscall
la $a0,Int4
addi $v0,$0,4
syscall
la $a0,Int5
addi $v0,$0,4
syscall 
la $a0,Int6
addi $v0,$0,4
syscall
#stampo menu'
la $a0,Menu
addi $v0,$0,4
syscall
#Ottengo la scelta
add $t0,$0,$v0
addi $v0,$0,5
syscall
#salto all'operazione da esegiure
sll $t0,$t0,2
lw $t1,JTable($t0)
jr $t1
#Controllo la scelta
bge $t0,3,Errore
blt $t0,0,Errore

#Comunico la scelta non valida all'utente
Errore:
la $a0,Err
addi $v0,$0,4
syscall
j Again #esce dal programma
#richiami di procedure
#procedura per il seno del numero inserito da input
Sen:
add $s0,$s0,$0  #input x=0
la $a1,InsNum #inserisci numero
jal Seno
j Again
#procedure per il coseno da input
Cos:
add $s0,$s0,$0  #input x=0
la $a1,InsNum #inserisci numero
jal Coseno
j Again
#procedura per tangente
Tan:
add $s0,$s0,$0  #input x=0
la $a1,InsNum #inserisci numero
jal Tangente

#richiedo eventuale riesecuzione del programma
#stampo il prompt che richiede la scelta
Again: 
la $a0,Exit
addi $v0,$0,4
syscall
#leggo la scelta dell'utente.
addi $v0,$0,5
syscall
beq $v0,'y',main
beq $v0,'Y',main
beq $v0,'n',Uscita
beq $v0,'N',Uscita


Uscita:
li $v0,4
la $a0,Bye
syscall
li $v0, 10
syscall

#####################################
# PROCEDURE
#####################################
#calcolo fattoriale

Fattor:
#Salvo i registri
addi $sp,$sp,-16  #alloco 4 word
sw $s0,12($sp)
sw $s1,8($sp)
sw $s2,4($sp)
sw $s3,0($sp)
#variabili necessarie
addi $v0,$0,1    #i=1
addi $s0,$0,1    #Fatt=1

ForFatt:
bgt $v0,$a1,EndForFatt #se i>n salta a EndForFatt
mul $s0,$s0,$v0  #Fatt=Fatt*i
addi $v0,$v0,1    #i++
j ForFatt
EndForFatt:
addi $s0,$s0,0 #restituisco Fatt
#Ripristino i registri.
lw $s3,0($sp)
lw $s2,4($sp)
lw $s1,8($sp)
lw $s0,12($sp)
add $sp,$sp,16#dealloco 4 word
jr $ra

###############################
#calcolo esponenziale

Espon:
#Salvo i registri
addi $sp,$sp,-16 #alloco 4 word
sw $s0,12($sp)
sw $s1,8($sp)
sw $s2,4($sp)
sw $s3,0($sp)
#parametri x e n
add $s5,$0,$a0 #n
add $s6,$0,$a1 #x
#variabili
add $s0,$0,$0 #c=0
addi $s1,$s3,1 #baseTot=1
addi $t2,$t2,-1 #t2=-1
addi $t3,$t3,1 #t3=1
#if(n==0)
If1:
bne $s6,0,If2 #n=!0 salta a if2
addi $s5,$s5,1
j For2
If2:
bge $s5,$0,For2
mul $s5,$s6,$t2 #n=n*-1
div $s6,$t3,$s6 #x=1/x
mul $s1,$s6,$t3 #baseTot=x*1
For1:
bge $s0,$s5,For2
mul $s1,$s1,$s6 #basetot=basetot*x
addi $s0,$s0,1 #c++
j For1

For2:
bge $s0,$s5,EndEsp
mul $s1,$s1,$s6 #basetot=basetot*x
addi $s0,$s0,1 #c++
j For2
EndEsp:
addi $s1,$s1,0 #restituisco basetot sommando 0
#Ripristino i registri.
lw $s3,0($sp)
lw $s2,4($sp)
lw $s1,8($sp)
lw $s0,12($sp)
add $sp,$sp,16#dealloco 4 word
jr $ra
##############################################
#calcolo Seno di x

Seno:
#Salvo i registri
addi $sp,$sp,-16 #alloco 4 word
sw $s0,12($sp)
sw $s1,8($sp)
sw $s2,4($sp)
sw $s3,0($sp)
#parametri
add $s6,$0,$a1 #x
add $s5,$0,$a0 #n
#variabili
add $s4,$0,$0 #seno=0
add $s7,$0,$0 #a=0 per esponenziale(x,2*n+1)
add $s2,$0,$0 #b=0 per fattoriale(2*n+1)
add $s3,$0,$0 #c=0 per esponenziale(-1,n)
addi $t2,$t2,2 #t2=2
ForSeno:
bgt $s5,30,EndForSeno
mul $s5,$s5,$t2 #n=2*n
addi $s5,$s5,1 #n=2*n+1
jal Espon
add $s7,$s1,$0 #a=basetot ovvero esponenziale(x,2*n+1)
mul $s5,$s5,$t2 #n=2*n
addi $s5,$s5,1 #n=2*n+1
jal Fattor
add $s2,$s0,$0 #b=fatt(2*n+1)
lb $s6,-1 #x=-1
add $s5,$0,$a0
jal Espon
add $s3,$s1,$0 #c=basetot ovvero esponenziale(-1,n)
div $t0,$s7,$s2 #t0=esp/fatt
mul $t1,$t0,$s2 #t1=t0*fatt
add $s4,$s4,$t1 #seno=seno+t1
addi $s5,$s5,1 #n++
j ForSeno #rieseguo il ciclo finchè la condizione è vera

EndForSeno:
addi $s4,$s4,0 #restituisco seno sommando 0
la $a0,RSen
addi $v0,$0,4
syscall
#Ripristino i registri.
lw $s3,0($sp)
lw $s2,4($sp)
lw $s1,8($sp)
lw $s0,12($sp)
add $sp,$sp,16#dealloco 4 word
jr $ra
####################################
#calcolo Coseno di x

Coseno:
#Salvo i registri
addi $sp,$sp,-16 #alloco 4 word
sw $s0,12($sp)
sw $s1,8($sp)
sw $s2,4($sp)
sw $s3,0($sp)
#parametri
add $s6,$0,$a1 #x
add $s5,$0,$a0 #n
#variabili
add $s4,$0,$0 #coseno=0
add $s7,$0,$0 #a=0 per esponenziale(x,2*n)
add $s2,$0,$0 #b=0 per fattoriale(2*n)
add $s3,$0,$0 #c=0 per esponenziale(-1,n)
addi $t2,$t2,2 #t2=2
ForCoseno:
bgt $s5,30,EndForCoseno
mul $s5,$s5,$t2 #n=2*n
jal Espon
add $s7,$s1,$0 #a=basetot ovvero esponenziale(x,2*n)
mul $s5,$s5,$t2 #n=2*n
jal Fattor
add $s2,$s0,$0 #b=fatt(2*n)
lb $s6,-1 #x=-1
add $s5,$0,$a0
jal Espon
add $s3,$s1,$0 #c=basetot ovvero esponenziale(-1,n)
div $t0,$s7,$s2 #t0=esp/fatt
mul $t1,$t0,$s2 #t1=t0*fatt
add $s4,$s4,$t1 #seno=seno+t1
addi $s5,$s5,1 #n++
j ForCoseno #rieseguo il ciclo finchè la condizione è vera

EndForCoseno:
addi $s4,$s4,0 #restituisco coseno sommando 0
la $a0,RCos
addi $v0,$0,4
syscall
#Ripristino i registri.
lw $s3,0($sp)
lw $s2,4($sp)
lw $s1,8($sp)
lw $s0,12($sp)
add $sp,$sp,16#dealloco 4 word
jr $ra
####################################
#calcolo Tangente di x

Tangente:
#Salvo i registri
addi $sp,$sp,-16 #alloco 4 word
sw $s0,12($sp)
sw $s1,8($sp)
sw $s2,4($sp)
sw $s3,0($sp)
#parametri
add $s6,$0,$a1 #x
#variabili
add $s4,$0,$0 #tan=0
#calcolo tangente
add $t0,$0,$0 #definisco t0 per calcolo seno
jal Seno
add $t1,$0,$0 #definisco t1 calcolo coseno
jal Coseno
div $s4,$t0,$t1 #tan=t0/t1
addi $s4,$s4,0 #restituisco tan sommando 0
la $a0,RTan
addi $v0,$0,4
syscall
#Ripristino i registri.
lw $s3,0($sp)
lw $s2,4($sp)
lw $s1,8($sp)
lw $s0,12($sp)
add $sp,$sp,16 #dealloco 4 word
jr $ra
Scrivi risposta

Ritorna a “Bar Ubuntu”

Chi c’è in linea

Visualizzano questa sezione: 0 utenti iscritti e 4 ospiti