2014-09-19 151 views
1

問題狀態:請編寫一個循環來計算當前存儲在$ t0中的正數的階乘,並以4條指令將結果存儲在$ t1中。如何在MIPS中編寫代碼來實現階乘?

這是我到目前爲止我非常確定它的工作原理,但它的6條指令。

 li $t3, 1 
     move $t1, $t0 
     move $t2, $t0 
LOOP: addi $t2, $t2, -1 
     mul $t1, $t1, $t2 
     bne $t2, $t3, LOOP 

編輯。 這裏的解決方案

li $t1 1 
LOOP: mul $t1 $t1 $t0 
addi $t0 $t0 -1 
bgez $t0 LOOP 
+0

提示:與$ T1 == 1起了會更有效(代碼大小)。除了'$ t0'和'$ t1'(和'$ zero')之外,不需要使用任何其他寄存器。如果我們要嚴格,'li'不是真正的MIPS指令。這是彙編程序提供的僞指令。 – Michael 2014-09-20 07:08:10

+0

爲了更加嚴格,'li $ t3,1'被轉換爲'ori $ t3,$ zero,1'這是一個單獨的指令:-) – markgz 2014-09-20 19:17:52

回答

0
li $t1 1 
LOOP: mul $t1 $t1 $t0 
addi $t0 $t0 -1 
bgez $t0 LOOP