[解決済み] エラー: `push' の命令サフィックスが無効です [重複].
質問
私は、アセンブリでスタックを介して関数に引数を渡すことを研究しようとしています。私は64ビットシステムのfedora 20を使用しています。
を試したところ、以下のようなコードになりました。
pushl %ebp
popl %ebp
エラーが出ます。
Error: invalid instruction suffix for `push'
このエラーをどのように克服すればよいのでしょうか?
でコンパイルしました。 as -ggstabs -o Function_Stack.o Function_Stack.c
解決方法は?
このエラーは、非常に単純な事実から生じています。
push
32ビットモードでは、16ビットと32ビットの即値を引数として受け付けます。しかし
push
64ビットモードで使用する命令では、16ビットと64ビットの即値しか受け付けません。明らかに64ビットでコンパイルしているので、アセンブラはそのような命令をエンコードできないので、エラーを出します。また、オペランド・サイズを強制的に指定するために
l
サフィックスを
push
という命令があります。今ここに書いたことは、すべて
pop
ただし、即値ではなく、レジスタやメモリを受け取ります。
しかし、あなたはまた
が必要です。
32ビットと64ビットのLinuxシステムでは、ABIが異なることに留意してください。ABIは、関数へのパラメータの渡し方、ユーザーモードアプリケーションからカーネルを呼び出す方法などを規定しています。あなたのコードは、引数の受け渡しにスタックを使い、(非常に)時代遅れの
int $0x80
を呼び出す方法です。64ビットABIについて学ぶには、以下を参照してください。
この文書
.
また、32ビットコードを64ビットシステムでコンパイルするオプションもあります。このような実行ファイルは、必要な32ビットランタイムライブラリが64ビットシステムにインストールされていれば動作します。ほとんどのディストリビューションでは、異なる方法でこれを行うことができます。あなたのコンパイラーが
as
には、そのような
--32
スイッチで32ビットコードを出力します。
関連
-
[解決済み] MIPs Assemblyでsllなどを使ってビットをずらすのはなぜですか?
-
[解決済み] popまたはadd esp、4 ? その差は何ですか?
-
[解決済み] MIPS: スタックポインタ($sp)とスタックの関連した使用法
-
[解決済み] エラーです。操作サイズが指定されていません - NASm
-
[解決済み] DOSBox - このプログラムはDOSモードでは実行できません (アセンブリ)
-
[解決済み] ループ内で配列の個々の要素にアクセスするにはどうしたらよいですか?
-
[解決済み] アセンブリ言語 - sarqはコードの中で何をするのですか?
-
[解決済み] ST(0)をEAXに移動させる方法は?
-
[解決済み] 1サイクルあたり4FLOPの理論上の最大値を達成するにはどうすればよいですか?
-
[解決済み] なぜGCCは、速度の代わりにサイズに最適化すると、15-20%速いコードを生成するのですか?
最新
-
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 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】lc3 LDR命令と格納される値について
-
[解決済み] MIPs Assemblyでsllなどを使ってビットをずらすのはなぜですか?
-
[解決済み] ミップスアセンブリの文字列の長さ
-
[解決済み] x86-64におけるmovqとmovabsqの違いについて
-
[解決済み] 8086アセンブリ言語での2つのレジスタのスワッピング(16ビット)
-
[解決済み] ARMv8でリテラル0ではなく、xzrレジスタを使用するのはなぜですか?
-
[解決済み] x86アセンブリの角括弧の意味は何ですか?
-
[解決済み] アセンブルmov命令
-
[解決済み] LC3 LEA 命令と格納された値
-
[解決済み] movqアセンブリ機能