2014-11-15 1 views
-1

MIPS 코드를 구현하기 위해 최소 개수의 레지스터를 사용해야한다는 제약 조건에서 1 + 5 + 9 + ... + N 시리즈를 합산하기 위해 MIPS 코드를 작성해야합니다.인공위성 시리즈를 합산하기위한 MIPS 코드

여기 내 해결책이 있습니다. 어떤 실수를 지적 할 수 있다면 좋을 것입니다.

High-level code: 

    int count = 1; 
    int sum = 1; 

    while(count<N){ 
     count = count + 4; 
     sum = sum + count; 
    } 

Associate variable 'count' with register $t0 and 
      variable 'sum' with register $s0. 

Equivalent MIPS code: 

     addi $t0, $zero, 1 
     addi $s0, $zero, 1 

Loop: slti $t2, $t0, N 
     beq $t2, $zero, Exit 
     addi $t0, $t0, 4 
     addi $s0, $s0, $t0 
     j Loop     

Exit: 
+1

글쎄, 내가 볼 수있는 곳 어디에도 합계를 저장하지 않고있다 ...? –

+0

$ s0에 금액을 저장했습니다. 이것은 시험 과제 였고 강사는 N을 함수 매개 변수로 사용해야하는지 여부에 대한 언급없이 단순히 변수 N을 사용 했으므로 'N'이후 코드가 좋은지 여부는 확실하지 않습니다. MIPS 어셈블리 언어의 모든 것. – nightmarish

+1

당신은 $ s0'1, 5, 9, ... N'을 계산하고 있지만,'1 + 5 + 9 + ... + N'의 합을 어디에도 저장하지 않을 것입니다. –

답변

1

실제 합계를 저장하려면 등록이 필요합니다. N 코드가 하드 코딩 된 경우이 (테스트되지 않은 코드) 같은 것을 할 것입니다;

addi $t0, $zero, 0  ; Sum 
    addi $t1, $zero, 1  ; Counter 

Loop: 

    slti $t2, $t1, N + 1 ; Exit if $t1 > N 
    beq $t2, $zero, Exit 
    add $t0, $t0, $t1  ; $t0 = $t0 + $t1 
    addi $t1, $t1, 4  ; $t1 += 4 
    j Loop     

Exit:      ; $t0 contains the sum here