2017-02-05 1 views
0

2 개의 정수를 읽고, 출력을 플로트로 나누는 프로그램이 있습니다. 예 : 2/3 = 0.66666666. 나는 다음과 같은 프로그램을 썼다.2 개의 정수를 읽고 나누어서 float 출력을 얻는 MIPS 코드?

.data 
prompt1: .asciiz "Enter x: " 
prompt2: .asciiz "Enter y: " 
floatzero: .float 0.0 

.text 
main: 
    l.s $f4, floatzero 
    li $v0, 4 
    la $a0, prompt1 
    syscall 

    li $v0, 6 
    syscall 

    add.s $f12 , $f0 , $f4 


    li $v0, 4 
    la $a0, prompt2 
    syscall 

    li $v0, 6 
    syscall 

    add.s $f14, $f0, $f4 

    li $v0 , 2 
    div.s $f16, $f12, $f14 
    syscall 

    li $v0, 10 
    syscall 

지금 나는 다음과 같은 의문을 가지고 : 1. 2/3 것이 출력을 보여주는 것은 2.0000000이다. 0.66666666을 얻으려면 어떻게해야합니까?

  1. 입력 값을 $ v0에서 일부 $ f2로 직접 이동하는 데 사용할 수있는 방법이 있습니까? 여기 add.s를 사용하고있다. ?

  2. 정수로 입력을 가져올 수없는 이유는 정수형 (예 : $ a1)으로 저장 한 다음 부동 소수점 형식으로 답변을 저장하도록 나누는 이유는 무엇입니까?

P. 이것은 나의 숙제이지만, 나는 그것을 해결하기 위해 이와 같은 기본 개념이 필요하다. 도와주세요.

미리 감사드립니다.

답변

2
  1. 당신은 $f16의 몫을 저장하고 있지만 시스템 콜 (2)는 값이 $f12에 인쇄 할 것으로 기대하고있다. 당신이 할 수있는

  2. mov.s $f2, $f0

    ,하지만 당신은 부동 소수점 레지스터에 정수 값을 이동하고 분할하기 전에 부동 소수점 값으로 변환해야합니다. 2와 3 사이의 정수 나누기는 결과로 0을 제공합니다. 이 전환을 수행하는 방법에 대한 질문은 이미 여러 번 요청되었으므로 google 예. "mips int to float".

관련 문제