2

コードをスタック ポインターからフレーム ポインターのみを使用するように変換する必要があります。私は MIPS を初めて使用します。

この再帰 C コードとその MIPS コードを以下に示します。スタック ポインターを使用していますが、フレーム ポインターを使用するように変更するにはどうすればよいですか?

ここに私のCコードがあります

int fact(int n)
{
    if(n!=1)
     return n*factorial(n-1);
}

    int comb (int n, int k)
    {
    return fact (n) / fact (k) / fact (n - k);
    }

ここに私のMIPSコード

comb:           
 sub $sp, $sp, 16
 sw $ra , 0($sp)
 sw $s0, 4($sp) 
 sw $a0, 8($sp) 
 sw $a1, 12($sp)
 jal fact       
 move $s0, $v0  
 lw $a0, 12($sp) 
 jal fact       
 div $s0, $s0, $v0 
 lw $a0, 8($sp) 
 lw $a1, 12($sp) 
 sub $a0, $a0, $a1 
 jal fact       
 div $s0, $s0, $v0 
 move $v0, $s0  
 lw  $ra, 0($sp) 
 lw  $s0, 4($sp) 
 addi $sp, $sp, 16 
 jr $ra         
4

3 に答える 3

2

スタック ポインターの代わりにフレーム ポインターを使用するように MIPS コードを変換しないでください。これは、MIPS呼び出し規則に違反し、コードが他の人のコードで動作しなくなるためです。

スタック ポインターは関数の実行中に値を変更しないため、フレーム ポインターは通常、ハンド コーディングされた MIPS アセンブラーでは使用されません。実際、スタック ポインタの値が決して変わらないように、独自のコードは正しくコーディングされています。

于 2014-04-13T02:17:10.373 に答える