2011-08-10 3 views
1

나는이 숙제를 풀려고했지만 해결책을 찾지 못했습니다. 아래는 문제입니다.MIPS에서 C로 번역 할 때의 문제

다음 MIPS 코드를 고급 언어 프로그램으로 번역하십시오. $ t0, $ t1 및 $ t2에 배열 A, B 및 C의 기본 주소가 들어 있다고 가정합니다.

add $t4, $zero, $zero 
Loop: 
add $t5, $t4, $t1 
lw $t6, 0($t5) 
add $t5, $t4, $t2 
lw $t7, 0($t5) 
add $t6, $t6, $t7 
add $t5, $t4, $t0 
sw $t6, 0($t5) 
addi $t4, $t4, 4 
slti $t5, $t4, 256 
bne $t5, $zero, Loop 
Also find the decimal value in the offset field of bne 

명령.

여기 제가 시도했지만, 아직 256의 위치를 ​​찾지 못했습니다.

int *temp4 = 0; 
while(1) 
{ 
    *int temp5 = temp4 +B[0]; 
    a: 
     *int temp6 = temp5; 
     temp5 = C[0] + temp4; 
     *temp7 = temp5; 
     temp6 = temp6 + temp7; 
     temp5 = temp4 + A[0]; 
     temp6 = temp5; 
     temp4 += 4; 
     if(temp5 < temp4) 
      goto __; 
     if(temp5 != 0) 
      goto a; 
} 

답변

4

나는 당신이 지나친 생각을하고 있습니다. 그 코드가 무엇을

보인다 이후 같은 많은 숙제 이유, 설명하려고하지 않음이

for (int i =0 ; i< 64; i++){ 

    A[i] = B[i] + C[i]; 

} 

같은 것입니다. 여기

내가 시도 것입니다,하지만 난 아직 당신은 물건을 혼합하는 256

의 위치를 ​​찾을 수 없습니다. slti 끝에 i이 표시되어 있습니까? 즉, 중간 피연산자를 사용합니다 (이 경우 256). 따라서 slti $t5, $t4, 256 명령어가 수행하는 작업은 $t4의 내용이 256보다 작은 경우 $t5 레지스터에 1을 설정하는 것입니다. 그렇지 않은 경우 $t50이됩니다.

따라서 bne의 내용이 $t4의 내용이 256보다 큰 경우에만 폴링 (즉, 점프)하지 않으므로 루프가 256/4 반복을 수행합니다.

+0

문에 $ t5, $ t4, $ t1을 추가하십시오. t1은 값으로 초기화되지 않습니다. 당신은 무엇이 붙잡을까요? –

+0

'$ t1'은 배열 B의 기본 주소를 포함합니다. 가정합니다. mips에서는'la $ t1, arrayB'처럼 간단합니다. – Tom