問題タブ [gnu-assembler]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
linux - ガスでアセンブルするときのプッシュの無効な命令サフィックス
GNU アセンブラーでファイルをアセンブルすると、次のエラーが発生します。
hello.s:6: エラー: 「プッシュ」の無効な命令サフィックス
組み立てようとしているファイルは次のとおりです。
ここで何が問題で、どうすれば修正できますか?
質問のエラーと指示は異なりますが、問題はこの質問に多少関連しています。
linux - FreeBSD システムでの単純なアセンブリ プログラムからの偽の結果
Linux で作成した最も単純なアセンブリ プログラムでさえ、FreeBSD マシンで実行するのに問題がありました。問題のあるコードは次のとおりです(これをできるだけ単純にしようとしています):
Linux マシンは予期される結果である 60 を返しますが、FreeBSD マシンは戻りコードとして一貫して 164 を返します。これがなぜなのか誰か知っていますか?もしそうなら、何が起こっているのか説明してもらえますか?また、どちらも実際に x86 CPU を実行していることに言及する必要があります。前もって感謝します :)
assembly - cltq はアセンブリで何をしますか?
実際、私のプログラムは次のように単純です。
しかし、アセンブリの出力はかなり長いです:
私が理解していないのは、このブロックです:
c - GCC: 一部レジスタの使用禁止
変なお願いですが、出来る気がします。GCC のレジスタ アロケータがそれらを使用しないように、いくつかのプラグマまたはディレクティブをコード (C で記述) の領域に挿入したいと考えています。
このようなことができることを理解しています。これにより、この変数用にこのレジスタが確保される可能性があります
問題は、新しい命令 (ハードウェア シミュレータ用) を直接挿入していて、GCC と GAS がまだこれらを認識していないことです。新しい命令は既存の汎用レジスタを使用できますが、それらのいくつか (つまり、r12->r15) を確保したいと考えています。
現在、私はモックアップ環境で作業しており、実験を迅速に行いたいと考えています。将来的には、GAS を追加し、組み込み関数を GCC に追加しますが、今は簡単な修正を探しています。
ありがとう!
assembly - `movl(%eax)、%eax`の括弧はどういう意味ですか?
私は十分にグーグルで検索しましたが、角かっこが何()
を意味するのか理解できませんでした。また、私はいくつかの構文を次のように見ていますmovl 8(%ebp), %eax
誰かが私にいくつかの良い参考文献を提案できますか?Googleの上位20件の結果から何も見つかりませんでした。
assembly - GNU GAS アセンブラーで nasm -f bin のような単純なバイナリーを生成する方法は?
一般的に次のような構造を持つ NASM ファイルがいくつかあります。
私はそれらを次のように組み立てています:
代わりに GAS を使用してこれらのいくつかを書きたいと思います。2 つの質問:
GAS ではどのディレクティブを使用する必要がありますか? 「.org」ディレクティブは見つかりましたが、GAS には「.bits」ディレクティブがないようです。
プレーン バイナリ ファイルを生成するには、
gcc
何を渡す必要がありますか?as
つまり、-f bin
オプションが NASM で行うことです。
assembly - NASMからGASへ:equ'dシンボルの呼び出し
次の行があるNASMファイルがいくつかあります。
このbmdev.asm
ファイルには、次のようなequディレクティブがあります。
を含むファイルはbmdev.asm
、それらのアイテムを呼び出すことができます。つまり
これをGASに変換する方法はありますか?私が直接翻訳をしようとすると、すなわち
それは正しいものに分解されていないようです:
NASM呼び出しは、次のように分解されます。
ここでの目標は、NASMではなくGASを介してBareMetalOSのバイナリを生成することです。
動作するバイナリの完全な逆アセンブル:
動作しないバイナリの完全な逆アセンブル:
この質問の(うまくいけば)より明確なバージョンを投稿しました。これを閉じます。
gcc - 古い32ビットGASコードを現在のGASアセンブラ(pushfl / popl)に変換する必要があります
私は現在のマシンで古いプロジェクトをコンパイルしようとしています。この古いプロジェクトが古い(2.x)バージョンのGCC / GASを使用していたことを知っているので、現在のバージョンでコンパイルできるようにクリーンアップする必要があります。
問題のコード:
gas
pushfl
それは指示ではないと文句を言います。私が読んだところによると、これは古い非推奨のGNUニーモニックですが、x86_64に相当するものがあるはずです。
pushfl
このコードをx86_64ガスに変換する方法に答えるだけでなく、ニーモニックがどこでどのようにpushfq
定義され、文書化されているかを誰かが説明できれば素晴らしいと思います。それがGASの作品だと確信しています...
注:これをgcc4.6.1とgas2.21でコンパイルしたい
assembly - GAS で eq'd シンボルを呼び出す
以下は小さな NASM プログラムです。
組み立てます:
それを分解します:
GASバージョンは次のとおりです。
組み立ててリンクします。
それを分解します:
ご覧のとおり、逆アセンブルされたコードはわずかに異なります。call
NASMのコード:
対ガス:
GAS バージョンを適切に実装する方法について何か提案はありますか?
FASM のプログラムは次のとおりです。
それは正しいことをします: