2012-06-05 2 views
0
int i; 
void set_array(int num) { 
    for (i=0; i<10;i++) { 
     A[i] = compare(num,i); 
    } 
} 

int compare (int a, int b) { 
    if ((a-b) >= 0) 
     return 1; 
    else return 0 
} 

여기에 몇 가지 문제가 발생합니다.C MIPS하려면 - 간단한 코드 번역

내 큰 문제는 어떻게 compare (num, i)를 A [i]에 삽입 할 수 있습니까?

그런데, 나는 이것에서 완전히 초보자입니다. 너무 쉽게 물어 보면 유감입니다.

+1

내가 코드를 포맷하려고했지만 나는 그것을 건드리고 싶지 않아 그래서 유효 아니다 :

대략적인 윤곽이 될 것입니다. '{'와'}'가 일치하도록 시도하고, 필요한 곳에';'가 있는지 확인하십시오. 대부분의 사람들은 코드를 들여 쓰기 때문에 블록 ('{}')이 끝나는 곳을 쉽게 볼 수 있습니다. –

답변

1

C에서는 값을 "삽입"할 수 없습니다.

: 첫째, 당신도

int A[10]; 

10 가정으로 [글로벌] 테이블 A를 선언 한 것은 for 루프 제한, 또는

코드에서 다른 곳으로 다음
int *A; 

에 따라, 크기입니다

A = malloc (10 * sizeof *A); 

이렇게하면 10 개의 요소에 할당 된 공간이 생깁니다. 그런 다음 각 요소의 값을 설정할 수 있습니다 (compare() 할당과 동일).

1

이것은 여러 단계의 과정입니다. 첫 번째 부분은 비교하고 호출하는 인수를 전달합니다. compare가 완료되면 값을 반환합니다. A [i]에 저장하는 것은이 반환 값입니다. 온도가 $ V0 (반환 값)에 불과하다 어디

int temp = compare(num,i); 
A[i] = temp; 

:

당신은 그것을 생각할 수 있습니다.

A [i]가 A의 요소의 크기 * A의 요소 크기 인 메모리 위치. A의 유형이 무엇인지 구체적으로 지정하지 않았으므로이 응답의 경우, int 배열 또한 int 또한 4 바이트 (또는 단어) MIPS 컴퓨터에서 가정합니다.

A [0]은 A + 0의 주소입니다. A [1]은 A + 4의 주소입니다. A [2]는 A + 8의 주소입니다.

set_array: 
    # save $ra to stack 
    la  $s1, A   # assuming $s1 isn't used for anything 
    # loop code starts here 
          # A[i] = compare(num,i); 
    move $a0, $a0  # num (Here for completeness, it does nothing) 
    move $a1, $s0  # I am just assuming variable 'i' is in $s0 
    jal  compare  # call compare 
    sw  $v0, 0($s1) # store the return value in A+4*i 
    addiu $s1, $s1, 4 # inc it by 4, for the next element 
    # i = i + 1 
    # jump back up 
    # restore $ra 
    jr  $ra 

# ... 

compare: 
    # code to compare and 
    # return 1 or 0 in $v0 
    jr  $ra