2013-10-24 2 views
0

배열을 50 번 합친 코드가 있습니다. 이제이 코드를 적어도 하나의 지침으로 줄여야합니다. 내가 생각할 수있는 것은이 루프를 100 배로 늘린 다음 루프 당 하나의 요소를 추가하는 것입니다. 그러나 이것은 명령 카운트를 많이 증가시킵니다. 만이 코드를 다시 작성할 수MIPS 합계 배열에 대한 최적화

 addi $t1, $0, 50 
LOOP: lw $s1, 0($s0) 
     add $s2, $s2, $s1 
     lw $s1, 4($s0) 
     add $s2, $s2, $s1 
     addi $s0, $s0, 8 
     subi $t1, $t1, 1 
     bne $t1, $0, LOOP 

참고 다른 sumArray 알고리즘을 쓰지

답변

1

이 하나 개의 명령을 적게함으로써, 거꾸로 배열 합산 어드레스와 루프 카운터를 "결합"하는 것이다 :

 addi $t1, $s0, 400 # $t1 = $s0 + 50*2*sizeof(word) 
LOOP: lw $s1, -4($t1) 
     add $s2, $s2, $s1 
     lw $s1, -8($t1) 
     add $s2, $s2, $s1 
     sub $t1, $t1, 8 
     bne $t1, $s0, LOOP 
+0

귀하의 요지를 볼 수는 있지만 많은 지시 사항을 줄일 수 있습니까? 원래 코드 351 개가있는 동안 코드는 1 회 = 151 회 더한 루프를 25 회 실행합니다. – Casper

+0

죄송합니다. 처음에는 200이 400이어야합니다. 원래 코드와 동일한 반복 횟수를 수행해야하며 반복 당 명령어 하나를 적게 사용해야합니다. 마지막 라인 인 bne에 대해 – Michael

+0

, $ s0과 비교하면 어떨까요? 그냥 $ 0이라고 생각합니까? – Casper

관련 문제