問題タブ [intel-syntax]
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.
assembly - gcc を使用して Intel 構文でアセンブリ コードを生成するにはどうすればよいですか?
このgcc -S
オプションは AT&T 構文でアセンブリ コードを生成しますが、Intel 構文でファイルを生成する方法はありますか? または、2つの間で変換する方法はありますか?
linux - AT&T と比較した Intel アセンブリ構文の制限
私にとって、インテルの構文ははるかに読みやすいです。Intel 構文だけに集中してアセンブリ フォレストをたどると、何か見落としますか? AT&T に切り替えたい理由はありますか (他の人の AT&T アセンブリを読み取ることができる以外に) ? 私の最初の手がかりは、gdb がデフォルトで AT&T を使用していることです。
これが重要な場合、私の焦点は、アセンブリと構文が Linux/BSD および C 言語に関係する可能性があるものだけです。
assembly - ガスの割り込み
簡単なプログラムを Intel 構文から AT&T に変換しようとしています (GAS でコンパイルするため)。アプリケーションの大部分を正常に変換しましたが、int
(割り込み) でまだエラーが発生します。私の機能は次のようなものです:
しかし、コンパイルすると、次のようになりました。
hello.S: アセンブラー メッセージ:
hello.S:13: エラー: msg db のオペランド サイズが一致しません "Hello, World!",0Ah'int'
hello.S:19: Error: no such instruction:
私は何をする必要がありますか?
c++ - C++ でのアセンブリ
次のコードがあります。
私はアセンブリをよく知っていますが、プログラムが画面に 2 を出力しないのはなぜですか?
assembly - AT&T x86 構文設計に関する質問
- AT&T 構文のすべての定数の前に「$」がある理由を誰か説明できますか?
- すべてのレジスタに「%」があるのはなぜですか?
- これは、私に多くの不完全なタイピングをさせようとする単なる別の試みですか?
- また、見つけたのは私だけ
16(%esp)
です[esp+16]
か? - 私はそれが同じものにコンパイルされることを知っていますが、なぜ誰かが必要なくたくさんの「$」と「%」を入力したいのでしょうか? - GNU がこの構文をデフォルトとして選択したのはなぜですか?
- もう 1 つのことですが、at&t 構文のすべての命令の前に : l があるのはなぜですか? -オペランドのサイズについては知っていますが、アセンブラにそれを理解させないのはなぜですか? (そのサイズではないオペランドで movl を実行したいと思うことはありますか?)
- 最後に: mov 引数が逆になっているのはなぜですか?
次のほうが論理的ではないでしょうか。
at&t は次のとおりです。
注: 荒らすつもりはありません。彼らが行った設計上の選択を理解していないだけで、なぜ彼らがそうしたのかを理解しようとしています.
c - デフォルトの AT&T 構文ではなく、icc から Intel 構文の asm 出力を取得しますか?
問題が発生しました。しばらくの間、gcc を使用して C コードをコンパイル/アセンブルし、インテルのアセンブリ構文を読むことに慣れてきました。-masm=intel
アセンブリ ファイルを生成するときにフラグを使用しました。
しかし最近、会社の移転により、彼らは Intel の icc を取得し、そのほうが優れていると主張しました。そこでiccを使う必要があるのですが、デフォルトのアセンブリ構文がAT&Tなのが不思議でした。変えてみたけどダメだったので、インテルのサポートに問い合わせたところ、こちらも不明で、それぞれ矛盾した回答でした。
gcc と icc を統合して、icc のコンパイルの「優位性」を使用しながら、同時に gcc を使用してインテルの構文にコンパイルする方法はありますか?
ubuntu を使用しており、icc バージョン 12.x を取得しています
gcc - Intel構文インラインアセンブリを使用してGCCで変数を設定するにはどうすればよいですか?
このコードが1に設定されていないのはなぜtemp
ですか?実際にそれを行うにはどうすればよいですか?
assembly - 条件付きジャンプのx86アセンブリフラグを変更するにはどうすればよいですか?
私のプロシージャ_Str_compareでは、-1、0、または1が正しく返されますが、別のアセンブリプロシージャからこの_Str_compareメソッドを呼び出すと、条件ステートメントが正しく機能しない理由がわかりません。たとえば、以下の例:
assembly - GNUAssemberIntel構文を使用したメモリアドレス指定
このページには、GASのIntelとAT&Tの構文の違いの良いリストが含まれていますが、変位のみで住所を指定する場合については説明していません。
ここでは、AT&T構文を使用して4行を組み立てました。
予想通り、最初の2行は異なります。1つ目は即値8をraxに移動し、2つ目はアドレス8の内容をraxに移動します。しかし、Intel構文では、次の奇妙な動作が発生します。
ここでは、1行目と2行目が同じマシンコードにアセンブルされています。最初は角かっこが間違っていると思ったので、テストに3行目と4行目を追加しました。角かっこは、少なくともレジスタが関係している場合は、メモリアドレス指定に使用できます。
私が読んだすべてのドキュメントは、少なくともベースレジスタまたはインデックスレジスタ、場合によってはスケールとディスプレイスメントを備えたメモリアドレス指定の例を示していますが、ディスプレイスメントだけではありません。
私はNASMアセンブラを使用したIntel構文の経験があります。NASMアセンブラはとを区別しmov rax, 8
ますmov rax, [8]
。
これはGASのバグですか?または、そうでない場合、NASMに相当するものを指定するにはどうすればよいmov rax, [8]
ですか?
変位のみのアドレスを指定することはおそらく珍しいことですが、この構文を使用してすべてのメモリアドレス指定形式を完全に理解したいと思います。
assembly - 「$-label」のような文字列の長さを計算する場合、x86アセンブリでドル記号($)はどういう意味ですか?
たとえば、単純なhello worldタイプのプログラムを作成している場合、.dataセクションには次のようなものが含まれる可能性があります。
この例の$は何を表しており、なぜ$ - msg
文字列の長さに等しいのですか?