0

AC関数f1には100個の要素のローカル整数配列があり、別の関数f2を呼び出します。MIPSに準拠した後、次の説明のうち正しいものはどれですか。(a)この関数が呼び出されると、スタックは正確に100バイト増加します。(b)この関数が呼び出されると、スタックは正確に400バイト増加します。(c)この関数が呼び出されると、スタックは404バイト以上増加します。(d)上記のいずれでもない。

関数f1には整数配列の要素が100個あるため、答えはDだと思います。したがって、各整数は4バイトを使用するため、100バイトが必要です。ただし、関数f2の情報が不足しているのは、f2がスタックに格納されている整数配列を持つ可能性があるためです。関数f2が整数配列を持っているかどうかわからないという事実、そして持っていたとしても、その関数が配列をスタックに格納することを選択したかどうかはわかりません。Dが正解であると思います。関数があるからといって、スタックに含まれている可能性のあるものすべてにスペースを割り当てるとは限らないと考えるのは正しいですか?

ありがとうございました!

4

1 に答える 1

1

戻りアドレスがレジスタで渡されるアーキテクチャでは、「leaf」関数は単にbr [r15]. これは、リーフ関数 f2 を呼び出すために、最初に戻りアドレスを r15 に設定し、次に f2 を呼び出すいくつかの命令を f1 が呼び出す必要があることを前提としています。しかし、r15 の以前のコンテンツはどうなるでしょうか。f1はどこに戻りますか?

MIPS がリターン アドレスのスタック ベースの格納を使用する場合でも、同じ概念が適用されます。

于 2012-10-18T05:59:05.260 に答える