2013-05-22 35 views
0

我使用QtSpim 9.9.1寫我的計算機組成原理課程作業 我有一個語法錯誤時使用DIV.S操作,但是當我使用DIV它的美好。嘗試從用戶獲取浮動值時會出現另一個錯誤,但在獲取整數時它也會消失。這裏是我的代碼:的Mips DIV.S語法錯誤

.text 
    main: 
     # Print "This program solves an equation of style a*x + c = 0, print out the result on console." 
     la $a0, hello_msg   # load the address of hello_msg into $a0. 
     li $v0, 4      # 4 is the print_string syscall. 
     syscall       # do the syscall. 

     # Print "Enter (a) value please :" 
     la $a0, enter_a_msg   # load the address of enter_a_msg into $a0. 
     li $v0, 4      # 4 is the print_string syscall. 
     syscall       # do the syscall. 

     ## Get (a) from user, put into $t0. 
     li $v0, 6      # load syscall read_float into $v0. 
     syscall       # make the syscall. 
     move $t0, $f0    # move the number read into $t0.////////here got error////// 

     # Print "Enter (c) value please :" 
     la $a0, enter_c_msg   # load the address of enter_c_msg into $a0. 
     li $v0, 4      # 4 is the print_string syscall. 
     syscall       # do the syscall. 

     ## Get (c) from user, put into $t1. 
     li $v0, 6      # load syscall read_float into $v0. 
     syscall       # make the syscall. 
     move $t1, $f0    # move the number read into $t1.///////also here 

     # Compute (x), put into $t2. 
     neg $t3, $t1     # get -c into $t3. 
     div.s $t2, $t3, $t0    # get x = -c/a into $t2.//// also here Error 


     # Print "Value of (x) is :" 
     la $a0, result_msg  # load the address of result_msg into $a0. 
     li $v0, 4      # 4 is the print_string syscall. 
     syscall       # do the syscall. 

     # Print (x) value . 
     move $a0, $t2    # move (x) value into $a0. 
     li $v0, 1      # load syscall print_int into $v0. 
     syscall       # make the syscall. 

     li $v0, 10      # 10 is the exit syscall. 
     syscall       # do the syscall. 

# Data for the program: 
.data 
    hello_msg:  .asciiz "This program solves an equation of style a*x + c = 0,\nprints out the result on console.\n" 
    enter_a_msg: .asciiz "Enter (a) value please :" 
    enter_c_msg: .asciiz "Enter (c) value please :" 
    result_msg:  .asciiz "Value of (x) is :" 

# end Equation.asm 

回答

1
  • move $t0, $f0

要在浮點寄存器轉換爲整數,並將其移動到一個通用寄存器,你應該使用這樣的事情:

cvt.w.s $f0, $f0 
mfc1 $t0, $f0 

如果你想將$f0移動到另一個浮點寄存器,你應該使用例如:

mov.s $f1,$f0 

  • div.s $t2, $t3, $t0

div.s與浮點寄存器($f0 - $f31)的作品,不與通用寄存器($an$tn$vn等)。請參閱MIPS floating-point instruction set list

+0

感謝這正是我所需要的。 –