Pergunta

Resumo O objetivo deste projeto é implementar o software de emulação de ponto flutuante além de 32 bits (precisão simples) números de ponto flutuante em MIPs.

Entrada/Saída O programa solicitará ao usuário que dois números em ponto flutuante.Em seguida, ele irá calcular e mostrar a soma.Aqui está o exemplo de e/S a partir de quatro corridas (você só precisa prompt de uma vez por execução):

Introduza um valor de ponto flutuante:1 Introduza um valor de ponto flutuante:1 2.000000000000000000

Introduza um valor de ponto flutuante:2.2 Introduza um valor de ponto flutuante:1.4 3.599999904632568400

Problemas para Resolver Eis algumas questões: Como você vai lidar com valores negativos? Como seu algoritmo de normalização de trabalho? Qual a forma mais fácil para acessar campos de bits dentro de uma palavra?

*Você não pode usar quaisquer instruções de ponto flutuante para este projeto!!*

Eu tenho feito o mesmo em números inteiros, mas precisa de alguma ajuda em ponto flutuante sem usá-los!.dados st1:.asciiz " de binário: " st2:.asciiz " Enter 1º número Inteiro:" st3:.asciiz " Enter 2ª Inteiro:" st4:.asciiz " Your resposta é:" st5:.asciiz " -------------------------------- " st6:.asciiz " "

.text

main: 

Prompt de utilizador para introduzir o primeiro número inteiro

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

Prompt de utilizador para introduzir o primeiro número inteiro

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

A adição de números inteiros

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

Mover-se em temporário de registradores

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

Contador para o primeiro número a ser impresso em binário

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 uma linha

la $a0,st6  
li $v0,4
syscall  

Contador para o segundo número em binário

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 uma linha pontilhada

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

Contador para o Resultado em binário

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

Feche o Programa

li $v0,10 #close the program
syscall

.fim principal

Foi útil?

Solução

1 - Use IEEE 754 para representar números em ponto flutuante 2 - Adicione os expoentes, em seguida, adicione o significands, verifique se você precisar aumentar o expoente 3 - Lidar com sinais negativos (2 complemento, único bit o primeiro representa o sinal)

Esse é um problema muito fácil e eu concordo com os comentários acima, eu apenas pensei que você poderia usar algumas boas dicas Boa sorte!

Outras dicas

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

Prompt de utilizador para introduzir o primeiro número inteiro

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

Prompt de utilizador para introduzir o primeiro número inteiro

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

A adição de números inteiros

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

Mover-se em temporário de registradores

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

Contador para o primeiro número a ser impresso em binário

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 uma linha

la $a0,st6  
li $v0,4
syscall  

Contador para o segundo número em binário

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 uma linha pontilhada

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

Contador para o Resultado em binário

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

Feche o Programa

li $v0,10 #close the program
syscall

.fim principal

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top