スタック、スタックポインタ$sp
は4だけデクリメントされる。MIPSは、境界をダブルワード、ダブル(8バイト)を格納するために、MIPSでポインタ
addi $sp, $sp, -4
s.d $f10, 0($sp)
8バイトであり、これは、私には意味をなさないメモリに取り込まれますが、スタックポインタは単一の単語境界を使用しているかのように動きます。 2つの倍精度値を格納するには、スタックポインターは、予想通り16ではなく、12ずつ減らされているようです:なぜこの現象が発生するのですか?サブルーチンが再帰的に呼び出されると問題が発生します(最初のアライメント、2番目のアライメントは実行されません)
を編集します。このコードはMARS 4.5で実行しています。 s.d $f10, 8($sp)
は
lui $1,0
addu $1,$1,$29
sdc1 $f10,8($1)
この間にスタックポインタは移動されません。ステップスルーすると、sdc1
は、$f10
と$f11
の両方を一度にスタックに入れます。
このコードを生成している人(つまり、what/whoがスタックポインタをどれくらい減らすかを決定しています)ですか? MARSでは、 's.d'はペソ命令です。おそらく、完全なプログラムの文脈における擬似命令拡張を見ることは、あなたの質問に答えるのに役立ちます。 – Zack
@Zack元の投稿を更新しました。 – qwr
私はまた、スタックポインタが8ではなく4で減るべきだと思います。あなたが8が正しくないと思うように導くのは何ですか? – Zack