Pregunta

Resumen Su objetivo para este proyecto es implementar la emulación de software de punto flotante adición para números de coma flotante de 32 bits (precisión simple) en MIPs.

Entrada / Salida Su programa solicitará al usuario dos números de coma flotante.Entonces lo hará calcule y muestre la suma.Aquí hay un ejemplo de E / S de cuatro ejecuciones (solo necesita preguntar una vez por ejecución):

Introduzca un valor de coma flotante:1 Introduzca un valor de coma flotante:1 2.000000000000000000

Introduzca un valor de coma flotante:2.2 Introduzca un valor de coma flotante:1.4 3.599999904632568400

Problemas a Resolver Aquí hay algunos problemas:¿Cómo lidiarás con los valores negativos?¿Cómo funcionará su algoritmo de normalización?¿Cuál es la forma más fácil de acceder a los campos de bits dentro de una palabra?

*¡No puede usar ninguna instrucción de coma flotante para este proyecto!!*

¡He hecho lo mismo en enteros, pero necesito ayuda en coma flotante sin usarlos!.datos st1:.asciiz "\ nen binario: \ n" st2:.asciiz " \ nInter 1er entero:" st3:.asciiz " \ nInter 2do entero:" st4:.asciiz " \ Nsu respuesta es:" st5:.asciiz "\ n-------------------------------- " st6:.asciiz" "

.text

main: 

Solicitar al usuario que ingrese el primer entero

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

Solicitar al usuario que ingrese el primer entero

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

Adición de enteros

add $s0,$s2,$s1 #add and store in t3

Mostrar resultado

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

Mudarse a registros temporales

move $t3,$s0   
move $t2,$s2
move $t1,$s1

Contador para que el primer número se imprima en 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

Imprimir una línea

la $a0,st6  
li $v0,4
syscall  

Contador para el segundo número en 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

Imprimir una línea punteada

la $a0,st5 #line 
li $v0,4
syscall  

Contador para Resultado en 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

Cierre el Programa

li $v0,10 #close the program
syscall

.fin principal

¿Fue útil?

Solución

1-Use IEEE 754 para representar sus números de coma flotante 2-Suma los exponentes, luego suma los significados, verifica si necesitas aumentar el exponente 3-Lidiar con signos negativos (complemento de 2, bit único, el primero representa el signo)

Este es un problema bastante fácil y estoy de acuerdo con los comentarios anteriores, solo pensé que te vendrían bien algunas buenas sugerencias ¡Buena suerte!

Otros consejos

.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: 

Solicitar al usuario que ingrese el primer entero

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

Solicitar al usuario que ingrese el primer entero

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

Adición de enteros

add $s0,$s2,$s1 #add and store in t3

Mostrar resultado

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

Mudarse a registros temporales

move $t3,$s0   
move $t2,$s2
move $t1,$s1

Contador para que el primer número se imprima en 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

Imprimir una línea

la $a0,st6  
li $v0,4
syscall  

Contador para el segundo número en 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

Imprimir una línea punteada

la $a0,st5 #line 
li $v0,4
syscall  

Contador para Resultado en 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

Cierre el Programa

li $v0,10 #close the program
syscall

.fin principal

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top