2012-06-05 82 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

這是一個多步驟的過程。第一部分是傳遞參數來比較和調用它。比較完成後,它將返回一個值。這是您將存儲在A [i]中的返回值。

你可以把它看作是:

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

如果溫度無非是$ V0(返回值)以上。

其中A [i]是A +的地址的內存位置* A的元素的大小。對於這個答案,因爲您沒有真正指定A的類型,我會認爲它是int數組。此外,我還假設MIPS機器上的int爲4個字節(或一個字)。考慮到這一點,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