2013-04-20 77 views
-1

您好我正在嘗試調試此代碼。它爲寄存器提供了錯誤的值。代碼是測試一些簡單的算術運算並將值存儲在不同的寄存器中。感謝您的幫助!qtspim的MIPS代碼

.ent main 
main: 
addi $a0, $0, 10  # r4 = 0 + 10 
addi $a1, $0, 1   # r5 = 0 + 1 
sltiu $s1, $a1, 2  # set if a1 < 2 
add $t0, $t0, $0  # $t0 = 0 
add $t1, $t1, $a1  # $t1 = $a1 (t1 = 1) 

$count: 
add $t0, $t0, $t1  # $t0 = $t0 + $t1 (t0 += 1) 
slti $s1, $t0, 10  # if(a1 < 10) s1 = 1 else s1 = 0 

beq $s1, $a1, $count # while to < 10 
sub $s1, $s1, $a0  # s1 = s1 - a1 
and $s1, $s1, $a0  # s1 = s1 $ a0 
or $s2, $0, $s1  # s2 = 0 | a0 

j $store    # store result 

$recount: 
sub $s1, $s1, $a1  # t0 = 0 

$store: 
sw $s1,0($29)   # store s1 on stack 
slti $t3, $s1, 0  # if s1 < 0 
beq $s1, $0, $recount # goto recount 
lui $t3, 5    # load 5 into $t3 
slt $s3, $t3, $t0  # if t3 < t0 
beq $s1, $0, $end  # goto end 
add $t0, $t0, $0  # t0 = 0 
sw $s1, 0($29)   # store $s3 in $s1 
lw $s4, 4($29)   # pop stack 

$end: 
jr $31 
.end main 
+0

_在哪裏它給你錯誤的價值?儘可能具體,以便人們不必追蹤你的整個代碼。 – Michael 2013-04-21 07:42:41

回答

0

我不知道哪裏的錯誤,但在這些情況下的註釋和代碼不對應:

add $t0, $t0, $0  # $t0 = 0 

應該

li $t0, 0  # $t0 = 0 
add $t1, $t1, $a1  # $t1 = $a1 (t1 = 1) 

應該是

move $t1, $a1  # $t1 = $a1 (t1 = 1) 
sub $s1, $s1, $a1  # t0 = 0 

應該是

li $t1, 0  # t0 = 0 

推進棧上是

addi $sp, $sp, -4 
sw $t0, 0($sp) 

大跌眼鏡:

lw $t0, 0($sp) 
addi $sp, $sp, 4 

如果你能提供到底在哪出錯的詳細信息,我們可以幫助更好。