Programma mips

di il
2 risposte

Programma mips

Questo è il codice mips scritto per una calcolatrice...permetto che funziona tutto perfettamente solo che per riuscire a farlo funzionare ho dovuto mette per conto proprio il risultato relativo alla potenza...a me funziona solo che volevo sapere da chi ne capisce + di me se c'era un altro modo x evitare quel passaggio e utilizzare un unico modo per stampare il risultato:

.data
str0: .asciiz "CALCOLATRICE:\nOperazioni:\n 1: somma\n 2: sottrazione\n 3: moltiplicazione\n 4: divisione\n 5: elevamento a potenza"
str1: .asciiz "\nOperazione da eseguire: "
str2: .asciiz "Inserisci il primo numero: "
str3: .asciiz "Inserisci il secondo numero: "
str4: .asciiz "Risultato: "
str5: .asciiz "\n\nAltra operazione?: \n0:SI \n1:NO\n"

.text
.globl main

main:

inizio:
li $v0, 4 #stampa Calcolatrice eccc "
la $a0, str0
syscall

li $v0, 4 #stampa "Operazione da eseguire: "
la $a0, str1
syscall

li $v0, 5 #legge l'intero
syscall
move $t0, $v0 #memorizzo l'intero in $t0

li $v0, 4 #stampa "Inserisci il primo numero: "
la $a0, str2
syscall
li $v0, 5 #legge l'intero
syscall
move $s0, $v0 #memorizzo il numero in $s0


li $v0, 4 #stampa "Inserisci il secondo numero: "
la $a0, str3
syscall
li $v0, 5 #legge l'intero
syscall
move $s1, $v0 #memorizzo il numero in $s1

addi $t3, $zero, 1 #aggiungo 1 a 0
beq $t0, $t3, somma #se $t3=$t0 vado a somma
addi $t3, $t3, 1 #aggiungo 1 a $t3 (cioè a 1)
beq $t0, $t3, sottrazione #se $t3=$t0 vado a sottrazione
addi $t3, $t3, 1 #aggiungo 1 a $t3
beq $t0, $t3, moltiplicazione #se $t3=$t0 vado a moltiplicazione
addi $t3, $t3, 1 #aggiungo 1 a $t3
beq $t0, $t3, divisione #se $t3=$t0 vado a divisione
addi $t3, $t3, 1 #aggiungo 1 a $t3
beq $t0, $t3, potenza #se $t3=$t0 vado a potenza

somma: add $s2, $s0, $s1 #sommo i 2 interi
j Risultato

sottrazione: sub $s2, $s0, $s1 #sottraggo i 2 interi
j Risultato

moltiplicazione: mul $s2, $s0, $s1 #moltiplico i 2 interi
j Risultato

divisione: div $s2, $s0, $s1 #divido i 2 interi
j Risultato

potenza: bltz $s1, Risultato #se $s1<0 vai a Risultato
li $v0, 1 #$v0=1

p: beq $s1, $0, RP #continua $s1==0
mul $v0, $v0, $s0
sub $s1, $s1, 1
j p


Risultato: li $v0, 4 #stampa la stringa "Risultato: "
la $a0, str4
syscall
move $a0, $s2
li $v0, 1 #stampa l'intero
syscall
j scelta

RP: move $s3, $v0
li $v0, 4 #stampa "Risultato: "
la $a0, str4
syscall
move $a0, $s3
li $v0, 1 #stampa l'intero
syscall
j scelta

scelta: li $v0, 4 #stampa str5
la $a0, str5
syscall
li $v0, 5 #legge l'intero
syscall
move $t4, $v0
beq $t4, $0, inizio
j uscita

uscita: li $v0, 10 #codice di uscita
syscall

2 Risposte

  • Re: Programma mips

    Modificalo in questo modo
    
    p:	 beq $s1, $0, RP	 #continua $s1==0
    mul $v0, $v0, $s0
    sub $s1, $s1, 1
    j p
    
    RP: move $s2, $v0
    
    Risultato:	 li $v0, 4	 #stampa la stringa "Risultato: "	
    la $a0, str4	
    syscall
    move $a0, $s2
    li $v0, 1	 #stampa l'intero
    syscall
    
    scelta:	 li $v0, 4	 #stampa str5 
    la $a0, str5
    syscall
    
    ... capirai da solo il perché
  • Re: Programma mips

    Che imbecille che sono...grazie mille
Devi accedere o registrarti per scrivere nel forum
2 risposte