まあ、私はあなたに同意しません。x86の複雑さは誤解されているため、誇張されています。複雑ではないと言っているのではありません。確かにそうですが、それは本格的なコンパイラまたはアセンブラを作成したい場合にのみ当てはまります。アセンブリを学びたいだけなら。それほど複雑ではありません。
x86-64アーキテクチャを分解して、私の主張を証明しましょう。
レジスター:
x86-64は少数のレジスタを指定します。正確にいくつですか?それらを列挙しましょう
- 16汎用レジスタ(RAX、RBX、RCX、RDX、RSI、RDI、RBP、RSP + R8、R9、R10、R11、R12、R13、R14、R15)
- 6つのセグメントレジスタ(CS、DS、SS、ES、FS、GS)
- 64ビットRFlagsと64ビットRIP
- 8つの80ビット浮動小数点(x87)レジスタ(FPR0-FPR7)は、64ビットMMXレジスタ(MM0-MM7)にエイリアスされます。
- 16個の128ビット拡張メディアレジスタ(XMM0-XMM7 + XMM8-XMM16)
- 制御レジスタ(CR0〜4)、デバッグレジスタ(DR0〜3、プラス6および7)、テストレジスタ(TR4〜7)、記述子レジスタ(GDTR、LDTR、IDTR)、タスクレジスタなどの特殊/その他のレジスタ(TR)私たちがほとんど気にする必要はありません。
代替テキストhttp://www.viva64.com/content/articles/64-bit-development/amd64_em64t/01-big.png
アドレッシングモード:
メモリの場所を参照する方法は?
ソース: http: //en.wikipedia.org/wiki/X86#Addressing_modes
32ビットまたは64ビットx86プロセッサでの32ビットアドレスサイズのアドレッシングモードは、次の式で要約できます。

64ビットx86プロセッサ上の64ビットコードのアドレッシングモードは、次の式で要約できます。

と
RIP+[変位]
動作モード:
これらはそれが作動できるモードです:
- リアルモード
- 保護モード
- ロングモード
指図書:
あなたは人々がその大きな命令セットを言うのを聞きます。さて、約500-600の指示があります。しかし、それらのいくつかは、CMPS / CMPSB / CMPSW / CMPSD / CMPSQのように、ほとんど変化のない同じ命令です。このようにグループ化すると、400命令になります。
とても大きいと思いますか?それから私はいくつか質問があります。C標準ライブラリにはいくつの関数がありますか?POSIXライブラリにはいくつの関数がありますか?.NETとJavaはどうですか?クラスとメソッドはいくつありますか?すべての関数/メソッド/クラスを知る必要がありますか?これらのライブラリを学習するためにどのようなアプローチを取りますか?
それぞれから少し学ぶだけです。それらすべてを大まかに調べます。それらの存在を感じ取り、必要なときにリファレンスを使用してください。
これらの命令は、論理的に次のカテゴリに分類できます。
- 汎用の説明
- 基本的なデータ操作(移動とコピー)
- 制御転送(ジャンプ、呼び出し、割り込み)
- 算術および論理命令(add、sub、and、xorなど)
- 文字列およびビット指向の命令
- システムコール
- システムの説明
- x87浮動小数点命令
- 64ビットメディア(MMX)命令
- 128ビットメディア(SSE)命令
それでおしまい!!あなたが知る必要があるのはそれだけです。率直に言ってください。そんなに複雑ですか?
x86アーキテクチャをカバーするアセンブリ言語に関する優れた本を入手してください。個人的には、RajatMoonaによる「GNU/LinuxでのIA32アーキテクチャ用のアセンブリ言語プログラミング」をお勧めします。あなたの時間の多くを無駄にしません。ただし、X86-64は対象外です。
x86-64用のIA32に慣れたら、http: //csapp.cs.cmu.edu/public/1e/public/docs/asm64-handout.pdfを読んでください。