Implementazione di numeri interi dell'addizione in virgola mobile in MIPS [chiuso]
Domanda
Abstract Il tuo obiettivo per questo progetto è quello di implementare l'emulazione del software dell'aggiunta di punti mobili per i numeri di punta mobile a 32 bit (singolo precisione) in MIPS.
Input/Output Il programma richiederà all'utente due numeri di punto mobile.Quindi calcolerà e visualizzerà la somma.Ecco Esempio I/O da quattro esecuzioni (devi richiedere solo una volta per esecuzione):
Inserisci un valore in virgola mobile:1 Immettere un valore a virgola mobile:1 2.000000000000000000
Inserisci un valore in virgola mobile:2.2 Immettere un valore a virgola mobile:1.4 3.599999904632568400
Problemi da risolvere ecco alcuni problemi: Come gestirai i valori negativi? Come funzionerà il tuo algoritmo di normalizzazione? Qual è il modo più semplice per accedere ai campi bit all'interno di una parola?
*Non puoi utilizzare istruzioni in virgola mobile per questo progetto!!*
Ho fatto lo stesso con i numeri interi ma ho bisogno di aiuto con la virgola mobile senza usarli!.Data ST1:.asciiz " nin binario: n" st2:.asciiz " nenter 1st intero:" ST3:.asciiz " nenter 2nd Integer:" ST4:.asciiz " La tua risposta è:"ST5:.asciiz " n ------------------------------------ n" ST6:.asciiz " "
.text
main:
Richiedere all'utente di inserire il primo numero intero
la $a0,st2 # Put the address of the string in $a0
li $v0, 4
syscall
li $v0, 5 # Code for input integer
syscall
move $s1, $v0 #storing first integer in s1
Richiedere all'utente di inserire il primo numero intero
la $a0,st3 # Put the address of the string in $a0
li $v0, 4
syscall
li $v0, 5 # Code for input integer
syscall
move $s2, $v0 #storing second integer in s2
Somma di numeri interi
add $s0,$s2,$s1 #add and store in t3
Visualizza risultato
la $a0,st4 #text to display
li $v0,4
syscall
li $v0,1 #for printing int
move $a0,$s0 # move s0 to a0 to print s0
syscall
la $a0,st1
li $v0,4
syscall
Spostarsi in registri temporanei
move $t3,$s0
move $t2,$s2
move $t1,$s1
Contatore per il primo numero da stampare in binario
li $s5,32 # set up counter
loop1:
rol $t1,$t1,1 #roll the bit left by on bit high to low
and $t0,$t1,1 #mask off low bit
add $t0,$t0,48 #combine t0 with 48 to form 1 or 0
move $a0,$t0 #output ascii character
li $v0,11
syscall
li $t5,1
sub $s5,$s5,$t5 #decrement counter
bne $s5,$zero,loop1 #keep loop if not zero
Stampa una riga
la $a0,st6
li $v0,4
syscall
Contatore per il secondo numero in binario
li $s5,32
loop2:
rol $t2,$t2,1 #roll the bit left by on bit high to low
and $t0,$t2,1 #mask off low bit
add $t0,$t0,48 #combine t0 with 48 to form 1 or 0
move $a0,$t0 #output ascii character
li $v0,11
syscall
li $t5,1
sub $s5,$s5,$t5 #decrement counter
bne $s5,$zero,loop2 #keep loop if not zero
Stampa una linea tratteggiata
la $a0,st5 #line
li $v0,4
syscall
Contatore per risultato in binario
li $s5,32
loop:
rol $t3,$t3,1 #roll the bit left by on bit high to low
and $t0,$t3,1 #mask off low bit
add $t0,$t0,48 #combine t0 with 48 to form 1 or 0
move $a0,$t0 #output ascii character
li $v0,11
syscall
li $t5,1
sub $s5,$s5,$t5 #decrement counter
bne $s5,$zero,loop #keep loop if not zero
Chiudi il programma
li $v0,10 #close the program
syscall
.fine principale
Soluzione
1- Usa IEEE 754 per rappresentare i tuoi numeri di punto mobile 2- Aggiungi gli esponenti, quindi aggiungi i significati, controlla se è necessario aumentare l'esponente 3- Trattare con segni negativi (complemento 2, singolo Bit il primo rappresenta il segno)
Questo è un problema abbastanza semplice e sono d'accordo con i commenti sopra, ho solo pensato che potresti usare alcuni buoni suggerimenti in buona fortuna!
Altri suggerimenti
.data
st1: .asciiz "\nIn binary:\n"
st2: .asciiz "\nEnter 1st Integer:"
st3: .asciiz "\nEnter 2nd Integer:"
st4: .asciiz "\nYour answer is: "
st5: .asciiz "\n--------------------------------\n"
st6: .asciiz "\n"
.text
main:
Richiedere all'utente di inserire il primo numero intero
la $a0,st2 # Put the address of the string in $a0
li $v0, 4
syscall
li $v0, 5 # Code for input integer
syscall
move $s1, $v0 #storing first integer in s1
Richiedere all'utente di inserire il primo numero intero
la $a0,st3 # Put the address of the string in $a0
li $v0, 4
syscall
li $v0, 5 # Code for input integer
syscall
move $s2, $v0 #storing second integer in s2
Somma di numeri interi
add $s0,$s2,$s1 #add and store in t3
Visualizza risultato
la $a0,st4 #text to display
li $v0,4
syscall
li $v0,1 #for printing int
move $a0,$s0 # move s0 to a0 to print s0
syscall
la $a0,st1
li $v0,4
syscall
Spostarsi in registri temporanei
move $t3,$s0
move $t2,$s2
move $t1,$s1
Contatore per il primo numero da stampare in binario
li $s5,32 # set up counter
loop1:
rol $t1,$t1,1 #roll the bit left by on bit high to low
and $t0,$t1,1 #mask off low bit
add $t0,$t0,48 #combine t0 with 48 to form 1 or 0
move $a0,$t0 #output ascii character
li $v0,11
syscall
li $t5,1
sub $s5,$s5,$t5 #decrement counter
bne $s5,$zero,loop1 #keep loop if not zero
Stampa una riga
la $a0,st6
li $v0,4
syscall
Contatore per il secondo numero in binario
li $s5,32
loop2:
rol $t2,$t2,1 #roll the bit left by on bit high to low
and $t0,$t2,1 #mask off low bit
add $t0,$t0,48 #combine t0 with 48 to form 1 or 0
move $a0,$t0 #output ascii character
li $v0,11
syscall
li $t5,1
sub $s5,$s5,$t5 #decrement counter
bne $s5,$zero,loop2 #keep loop if not zero
Stampa una linea tratteggiata
la $a0,st5 #line
li $v0,4
syscall
Contatore per risultato in binario
li $s5,32
loop:
rol $t3,$t3,1 #roll the bit left by on bit high to low
and $t0,$t3,1 #mask off low bit
add $t0,$t0,48 #combine t0 with 48 to form 1 or 0
move $a0,$t0 #output ascii character
li $v0,11
syscall
li $t5,1
sub $s5,$s5,$t5 #decrement counter
bne $s5,$zero,loop #keep loop if not zero
Chiudi il programma
li $v0,10 #close the program
syscall
.fine principale