[解決済み] x86_64アセンブラのRBPレジスタは何のためにあるのですか?
2022-03-05 06:47:07
質問
コンピュータアーキテクチャーの授業で必要なので、アセンブリを少し勉強しようと思っています。フィボナッチ数列を表示するようなプログラムをいくつか書きました。
関数を書くときは必ずこの3行を使うことを認識しました。
gcc
をその
C
と等価)。
pushq %rbp
movq %rsp, %rbp
subq $16, %rsp
それについて2つ質問があります。
-
まず第一に、なぜ私が
%rbp
? もっとシンプルに%rsp
に移動し、そのコンテンツは%rbp
を2行目に書いてください。 -
から何かを差し引かなければならないのはなぜですか?
%rsp
? つまり、常に16
私がprintf
のような、7つか8つの変数を使用します。24
または28
.
私は仮想マシン(4GB RAM)、インテル64ビットプロセッサ上でManjaro 64ビットを使用しています。
解決方法を教えてください。
rbp
はx86_64のフレームポインタです。 あなたの生成したコードでは、スタックポインタのスナップショットを取得します(
rsp
を調整することができます。
rsp
(ローカル変数のためのスペースを確保したり)
push
から一定のオフセットでアクセスできます。
rbp
.
多くのコンパイラは最適化オプションとしてフレームポインタの省略を提供しています。
rsp
を解放し、代わりに
rbp
を、関数で使用するための別の汎用レジスタとして使用します。
AT&Tのアセンブラ構文から推測すると、GCCの場合、このスイッチは次のようになります。
-fomit-frame-pointer
. このスイッチを使ってコンパイルし、どのようなアセンブリコードが得られるか見てみましょう。 からの相対的な値にアクセスするときに、おそらく気づくでしょう。
rsp
ではなく
rbp
この場合、ポインタからのオフセットは関数全体で変化します。
関連
-
[解決済み】ポインタと整数の比較で警告が出る
-
[解決済み】C言語でint64_t型を表示する方法
-
[解決済み] Cプログラムで「配列の添え字が整数でない」。
-
[解決済み】Errno: 11, Resource Temporarily Unavailable(リソースが一時的に利用できない
-
[解決済み] C言語では「?」演算子は何をするのですか?
-
[解決済み] C++でextern "C "を使用した場合の効果は?
-
[解決済み] const int*、const int * const、int const *の違いは何ですか?
-
[解決済み] ++iとi++の違いは何ですか?
-
[解決済み] なぜGCCは、速度の代わりにサイズに最適化すると、15-20%速いコードを生成するのですか?
-
[解決済み】C/C++の"-->"演算子とは何ですか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] strtokのセグメンテーションフォールト
-
[解決済み】警告:互換性のないポインタ型からの代入
-
[解決済み】デバッガgdbの使用時に不明な終了シグナルが発生する。
-
[解決済み】「無効なイニシャライザー」と表示されるのですが、何が間違っているのでしょうか?
-
[解決済み] struct で "warning: useless storage class specifier in empty declaration" (警告: 空の宣言での無駄なストレージクラス指定子)
-
[解決済み] テスト
-
[解決済み】 「配列のイニシャライザーはイニシャライザーリストまたは文字列リテラルでなければなりません」と表示されるのですが?
-
[解決済み】サイズ8の無効な読み取り - Valgrind + C
-
[解決済み】int型配列へのポインタのスカラ・イニシャライザの過剰要素
-
[解決済み】ベースポインタとスタックポインタとは一体何でしょうか?これらは何を指しているのでしょうか?