2013-04-20 1 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

답변

0

나는 오류가 어디 모르겠지만,이 경우에 의견과 코드가 일치하지 않습니다

1

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

이어야

li $t0, 0  # $t0 = 0 

2

add $t1, $t1, $a1  # $t1 = $a1 (t1 = 1) 

move $t1, $a1  # $t1 = $a1 (t1 = 1) 

3

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

스택에 푸시

li $t1, 0  # t0 = 0 

4

되어야 있어야하는

이다,691,363 (210)
addi $sp, $sp, -4 
sw $t0, 0($sp) 

터지는 : 당신은 정확히 잘못 위치에 대한 자세한 정보를 제공 할 수있는 경우

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

, 우리는 더 나은 도움이 될 수 있습니다.