1

アセンブリの関数に関するいくつかのことを理解するのに少し助けが必要です。パラメータまたは2を受け取り、それをレジスタ%eaxに配置することで、数値のようなものを返す単純な関数を作成できます。私の質問は、どのようにリストを返すのですか?おそらく100個の数値の定義済みデータセットを検索する関数を作成しています。特定の範囲(0〜9、10〜19、20〜29など)の数値の現在の合計を保持する必要があるため、変数範囲ごとに。レジスターの数は有限であるため、スタックを調整するなどして、ローカル変数用のスペースを作成する必要があります。しかし、どうすればこれらの値をすべて返すことができますか?これらの変数がどこにあるかを指すアドレスを%eaxで返すと仮定しますが、値はローカルであり、スタック上に作成されるため、tこれらにアクセスできませんか?私はあなたができると思いますが、それはローカル変数とそのスコープについて私が知っているすべてに反します。これらの値はヒープか何かに置かれることになっていますか?組み立て用のヒープについては何も教えられていないので、それが自分のやるべきことなのか、何かがわからないのかわかりません...?どんな助けでも大歓迎です。ありがとう。

4

3 に答える 3

0

リスト/配列に含まれる要素の数がわかっている場合は、その関数内(Cmalloc()または同等のものを使用)または関数外(ここでも、malloc()配列/リストを次のように使用または宣言)でメモリを割り当てることができます。変数または相互に参照する変数のセット)を指定し、リスト/配列の最初の要素のアドレスを関数に渡します。

または、関数内の要素ごとにリスト/配列を作成し、そこから最初の要素のアドレスを返すこともできます。当然、最初の要素を割り当ててから、後続の要素のためのスペースを確保するために割り当てを増やす必要があります(Cを使用realloc())。または、すべての要素を個別に割り当てて(Cを使用してmalloc())、それらをチェーンすることができます(つまり、要素はそれらをリストにチェーンする目的でポインタ/アドレスを含めます)。

于 2013-02-21T20:07:40.517 に答える
0

「リスト」とは、「配列」を意味すると仮定します。数値の配列へのポインタを返したい場合は、その配列にメモリを割り当てる必要があります。呼び出し元に渡してもらうか、呼び出しmallocてバッファーを割り当てます。これは、Cプログラムの場合と同様にアセンブリプログラムでも機能します。最後に、の配列へのポインタを返しますeax

于 2013-02-21T19:52:38.350 に答える
0

ヒープ上に作成されたリストにメモリインデックスを返します。または、それをメモリインデックスに渡してデータをパラメータとして書き込み、出力変数として使用します。次に、そのメモリインデックスはスタックベースまたはヒープベースになります。

于 2013-02-21T19:52:49.800 に答える