2013-05-02 133 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