-5

アセンブリ言語を学習しようとしていますが、各コマンドの目的を理解するのに助けが必要です。以下は、それらが使用されるプログラムです。

 push   %ebp
 mov    %esp,%ebp
 sub    $0x10,%esp
 mov    0x8(%ebp),%eax
 add    $0x1,%eax
 mov    %eax,-0x4(%ebp)
 mov    -0x4(%ebp),%eax
 leave  
 ret
4

3 に答える 3

3

非常に基本的なアセンブリ言語入門書

まず、アセンブリ言語は特定のプロセッサ(CPU)またはプロセッサフ​​ァミリに関連していることを知っておく必要があります。たとえば、質問に示されているスニペットは、Intelx86アーキテクチャ用のようです。非常に多くのアセンブリ言語命令がCPUのレジスタの内容に基づいて、またはそれに基づいて作用するため、これは重要です。したがって、個々の命令の詳細を詳しく調べる前に、CPUのアーキテクチャ、つまり使用可能なレジスタの名前と特性、およびそれらの役割について理解する必要があります(これらのレジスタの一部は本質的に一般的ですが、他のレジスタは非常に特殊な役割を持っています)。また、アーキテクチャの一部は、外部メモリ位置に対処する方法です。

第二に、アセンブリ言語命令の種類はごくわずかです

  • フロー制御命令(テスト、ジャンプ、[サブルーチンから]の戻りなど)
  • データコピー命令(レジストリおよび/またはメモリとの間でメモリコンテンツを移動する)
  • スタック管理命令(これらは、特殊レジスタであるSPという名前のスタックポインタにも作用する特殊な種類のデータコピー命令です)。
  • 算術命令(加算、減算、乗算など)
  • ブール演算(シフト[レジスタの内容]、ビット単位および、ビット単位またはなど)

第三に、物事をより複雑にすることがある(しかし、アセンブリロジックを非常に強力にする)のは、アドレッシングモードです。基本的にアドレッシングモードは、特定の命令に使用されるメモリ位置を決定するために使用されます。アドレッシングモードの例は直接および間接であり、前者は命令のオペランドとして直接読み取り/書き込みを行うアドレスを提供し、後者はメモリアドレスオペランドも提供しますが、読み取り/書き込みに使用される実効アドレスが取得されます。最初に提供されたアドレスの内容を読み取り、その内容を操作が行われるべきアドレスとして使用します。

上記の基本的な理解があれば、おそらくプロセッサの取扱説明書を読み始めて、すべてをより理解することができます。

たぶん、次のウィキペディアのエントリから始めてください。

そして多分この8ページの入門コースノート(pdf)のようなドキュメント

最後の注意点:コードを直接見て、それが何をするのかを理解しようとすることは、アセンブリ言語を理解するための非常に効果的な方法です。ただし、(ペーストビンへの)元の投稿は逆アセンブラを参照していることに注意しました。逆アセンブラが混乱して(たとえば、コードが含まれているのと同じようにデータの領域を処理する場合)、非常に意味のない命令リストを生成する場合があることに注意してください。また、実際のソースコード(逆アセンブルによって生成されたソース)を読むことで、作成者のコメントと、ロジックを理解するのに役立つ適切なラベル名の恩恵を受けることができます。

于 2013-03-10T03:09:36.097 に答える
1

これはあなたの目的にとってかなり良い本です:

コンピュータシステム:プログラマーの視点

于 2013-03-10T02:42:08.557 に答える
1

すばやく検索すると、x86アセンブリ言語の次のリファレンスが得られました

なぜアセンブリ言語を学びたいのかは別の問題です!

于 2013-03-10T02:44:35.193 に答える