2012-10-11 38 views
0

所以我使用QTSPIM,我知道MIPS只能處理32位。這也是一項任務,只是把它放在那裏。MIPS QTSPIM 64bit

所以我的目的是能夠顯示階乘(14)。目前,該程序只能達到階乘(12),我相信。能夠支持64位有多難。我知道我需要存儲上32位和下32位?

有人可以提供提示或示例代碼嗎?

# Iterative program to compute n! 

      # The value n is entered by the user 

      .globl main 
main: 
      li  $v0, 5 
      syscall     # Get user input for n 
      move $s0, $v0  # s0: n 

      move $a0, $s0  # put n into first parameter 
      jal  factorial 
      move $s1, $v0  # s1: n! 

      move $a0, $s1  
      li  $v0, 1 
      syscall     # display n!    

      li $v0, 10 
      syscall 

#----------------------------------- 
      # Factorial Function 
      # 
      # Parameters: a0 - n 
      # Return Values: V0 - n! 
factorial: 
      #---------------------- Stuff at beginning of function 
      addi $sp, $sp, -12 # space for 3 values 
      sw  $ra, 0($sp) 
      sw  $s0, 4($sp) 
      sw  $s1, 8($sp) 

      #---------------------- body of function 
      move $s0, $a0  # s0: n 
      li  $s1, 1   # s1: n! (init to 1) 
      li  $t1, 1   # t1: loop exit test value 
floop:  ble  $s0, $t1, done # when n decrements down to 1, exit 
      mul  $s1, $s1, $s0 # s1 = s1 * n 
      addi $s0, $s0, -1 # n-- 
      j  floop 

      #---------------------- Stuff at end of function 
done:  move $v0, $s1  # put n! into return register 
      lw  $ra, 0($sp) 
      lw  $s0, 4($sp) 
      lw  $s1, 8($sp) 
      addi $sp, $sp, 12 
      jr  $ra    # TTFN 

回答

0

如果使用乘法指令MULT $s1,$s0的兩個操作數的形式,它的$s1$s2 64位產品放置到HILO特殊寄存器。

您可以使用此功能來計算64位因子,並進行一些額外的工作。具體來說,一旦產品超過32位,您將需要編寫代碼來做相當於小學長時間乘法的工作。