Implementazione di numeri interi dell'addizione in virgola mobile in MIPS [chiuso]

StackOverflow https://stackoverflow.com//questions/23031018

  •  21-12-2019
  •  | 
  •  

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

È stato utile?

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

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top