2013-05-02 105 views
0

假設在從main的第一行開始的代碼中計算R,I和J指令的數量。我已將代碼更新爲所有建議,但結果似乎仍不正確。 :(Mips編程跳轉問題

編輯:添加這些語法的變化,這些變量似乎是更好的工作,但循環似乎並不通過自身正常運行在所有的任何值得注意的問題有人看到

EDIT2:如何我是否改變循環以使$ t1一次循環通過1個指令集?這是我現在的關鍵問題,而不是來自新mips用戶的愚蠢語法。

EDIT3:我已將代碼更新爲所有建議但結果似乎仍不正確:(

.text  
Main:  
la $t1, 0x400000  
li $t5, 0  
li $t3, 2  
li $t4, 3  
li $t2, 0  
la $s0, 0x400000 

loop:  
lw $t1, 0($s0)  
addi $s0, 4  
addi $t5, 1  
beq $t5, 20 exit  
srl $s4, $t1, 26  
beq $s4, $t2 R  
beq $s4, $t3 J  
beq $s4, $t4 J  
addi $s3, 1  
j loop  

R: 
addi $s1, 1  
j loop  

J:  
addi $s2, 1  
j loop  

exit:  
sw $s1, RType  
sw $s2, JType  
sw $s3, IType  
jr $ra 
+0

仍然需要幫助才能正確計數代碼 – Learning2Code 2013-05-02 07:09:19

回答

1

我看到一組問題:

1)初始化寄存器(不要假定寄存器初始值爲零)。例如,addi $t5, 1需要先前的add $t5, $zero, $zero(或li)。

2)beq jump指令需要兩個寄存器。例如,你必須改變beq $s4, 3 J

li $t6, 3 
beq $s4, $t6, J 
+0

如何更改循環以使$ t1按順序依次循環1個指令集?這是我現在的關鍵問題,而不是來自新mips用戶的愚蠢語法。 – Learning2Code 2013-05-02 06:59:23

0

除了米格爾的點,我想補充一點,您所使用的指令在一個陌生的方式設置。也許你的彙編程序能夠弄清楚你的意思,但它仍然使代碼混淆閱讀。

lw $t3, 2 
lw $t4, 3 

這些應該是li。指令lw用於從內存中加載單詞。


la $t0, 4($t1) 

這應該是lw,除非你只想檢查指令從地址0x400004,你應該放下偏移開始。

我也似乎無法找到你增加$t1的地方,所以你將在循環的每次迭代中使用相同的地址。

+0

如何更改循環以使$ t1一次循環1個指令集?這是我現在的關鍵問題,而不是來自新mips用戶的愚蠢語法。 – Learning2Code 2013-05-02 06:54:20