x86アセンブリに関する正規の本はありますか?[閉まっている]


25

アセンブリに関する本はたくさんあります。ただし、彼らは通常、MIPSやARMなど、気にしないISAを扱います。これらのアーキテクチャは扱いません。私がそれらを学ぼうとする理由はありません。

しかし、x86アセンブリブックは...存在しないようです。

たとえば、Windows Portable Executableファイルを生成するトイコンパイラをビルドしようとしているとします。

ベストプラクティス、設計方法論、およびx86アセンブリに関するその他の有用な情報を説明するための事実上の標準である本はありますか?その本はそれを特別なものにしていますか?


組立経験はどれくらいありますか?最適化なしでGCCを使用して単純なCプログラムをアセンブリにコンパイルし、次にコードをリバースエンジニアリングしてCプログラムに戻したことがありますか?
ブライアン

10
@ブライアン:それを行う前にアセンブリを知る必要があります。
ビリーONeal

x86命令セットのコピーを見ました。それは2巻であり、おそらく私が今まで見た中で最大の本です。楽しんでください:)
AngryBird

2
ビリー、アセンブリーがまったくわからない場合は、一般的なアイデアを得るためにそれらのいずれかから始めるのはかなり良いでしょう。アセンブリはアーキテクチャに非常に近いため、アセンブリ命令はアーキテクチャ固有の設計を大きく反映しています。x86アセンブリから始めて、Kip Irvineの「Intelベースのコンピューター用のアセンブリ言語」を読みました。この本は、実際にはコミュニティカレッジのオンラインクラスとペアになっています。あなたがどんな学習者なのかはわかりませんが、ガイド付きの指導が学習に最適だと思います。
ブライアン

@ブライアン:「どれか」とはどういう意味ですか?私は「それら」が何であるか理解していません-どんな本ですか?アセンブラーはありますか?ISAはありますか?私はすでにMIPSアセンブラーで遊んでいます。しかし、x86には何も見つかりません。
ビリーONeal

回答:


18

私は大学時代に教科書としてx86プロセッサ用アセンブリ言語を使用していましたが、非常にわかりやすいことがわかりました。私は古い第4版を持っていますが、それを第6版と比較しましたが、あまり大きな変化はありませんでした。人々は彼が自分のライブラリをI / Oに使用していることに不満を持っていますが、彼は後の章でそれを「ハード」な方法で行う方法を教えてくれます。


1
とても良い本です!
コーダー

「Intelベースのコンピューターのアセンブリ言語」というタイトルのアーバインの本の第5版を読みました。:)
ブライアン

1
これはかなり悪い提案だと思います。第2版のほとんどは、本質的にCのろくでなしバージョンである著者自身の難解なシステムHigh Level Assemblyに固有のものであるからです。あなたが無料で彼のサイトで見つけることができ、公開されたことがないdosバージョンは素晴らしい読み物です。これは、約50%長くもだと(あるHLAについて何か欠けている時間の無駄を)。
エヴァンキャロル

1
@EvanCarroll私は混乱しています。リンクを間違った本に変更し、リンクを変更した本を批判しました。それは意図的ではなかったのですか?
マーリンモーガングラハム

1
完全に私の間違い。@ MerlynMorgan-Grahamはキャッチと修正の両方であなたに良いです。
エヴァンキャロル


9

Art of Assembly Programmingは、x86プログラミングについてかなり豊富な優れたリソースです。

x64 ABIのドキュメントも役立ちます。AMDのウェブサイトにあるバージョンへのリンクを見つけようとしていましたが、もう見つけられないようですので、これが必要だと思います。

学習中にかなり[少し]役立つことができるのは、アセンブリで最初から完全なアプリを書くのではなく、そのほとんどをC(または実際に他のコンパイルされた言語)で書き、アセンブリコードのチャンクをそれ。それを行ったら、逆にしてアセンブリプログラムを書き、そこからいくつかのC関数を呼び出します。

編集:タイプミスを修正。


1
別の提案:簡単なプログラムをCで記述し、アセンブリにコンパイルし、アセンブラがアセンブリできるようにクリーンアップしてから、アセンブリバージョンを強化します。最小限の機能(キーボードからの読み取り、コンソールへの書き込み)を迅速に実行するための良い方法です。
TMN

4

x86アセンブリの学習に非常に役立つ本は、Pentium Processor Optimization Toolsです。この本の主な焦点はアセンブリコードの最適化ですが、途中でPentiumのアセンブリを学習し、参考資料としても適しています。

絶版になっていますが、使用済みを見つけるのは難しくありません。

「アセンブリコードオプティマイザー」を含むフロッピーディスクが付属しています。実際にはコードを最適化しませんが、代わりに、パイプラインストールなどの非効率性がどこにあるかを示すコメント付きのリストを生成します。

本に付属しているツールは、著者の会社が販売していた機能的な製品の限定版ですが、理由から、私はそれらが長い間廃業していることに慣れていません。理由はわかりませんが、このようなツールはホットケーキのように売れると思います。

マイクロプロセッサのさまざまなモデルでサポートされている多くのバリアントがあるため、x86は一般に非常に複雑なトピックです。基本を理解したら、ターゲットとする正確なチップについては、IntelまたはAMDのデータブックを参照してください。残念ながら、あるモデルのCPUで高速に実行されるコードは、別のチップではそれほど高速ではない場合があります。


本当にパフォーマンスに向いていない。バイナリを生成できるようにしたいだけです。まだ見てください:)
ビリーONeal

2
また、アセンブリのオペコードだけでなく、特定のアセンブラの使用方法も学ぶ必要があります。各アセンブラーの処理はまったく異なります。大量のアセンブリコードを作成する場合は、人間のコーダーを念頭に置いて開発されたmasmを使用してください。インラインアセンブリの小さなスニペットを作成するだけの場合は、GCCをGNU as(gas)インラインアセンブリとして使用できます。GNU asの構文は、masmの構文とはまったく異なります。主にgccのバックエンドとして使用するために作成され、実行可能コード生成を行うため、人間のコーダーが必要とする機能の多くを提供しません。
マイククロフォード

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.