2012-04-07 11 views
2

私はより良い開発者になるために、余暇にアセンブリ言語を学んでいます。私はAmazonから本を買いました。すぐに納品され、私が掘り下げる前に基本的な概念に慣れようとしています。アセンブリとレジスタ

私は一般的な目的のために使用する汎用レジスタについて混乱します。私はCプログラミング言語を知っており、アセンブリとWindows APIのための呼び出し規約について読んでいます。

ただし、非常に単純なタスクがある場合は、 2つの数字をCなどへの参照なしで追加して、どのレジスタを使用しますか?

これは基本的な質問です。

+1

簡単なプログラムを書いて、逆アセンブルされたコードを見てみませんか? – Michael

+0

@Michael、Cコンパイルされたコードを表示するにはどうすればよいでしょうか。私はあなたがILASM/ILDASMであり、私はそれをJavaで行う方法を知っています。私はC言語でそれを行う方法がわかりません。 – w0051977

+0

@ w0051977、多くのCコンパイラにはバイナリライブラリや実行可能ファイルの代わりにアセンブリソースを出力するオプションがあります。コンパイラのドキュメントを確認してください。 –

答えて

3

あなたが望むものはどれですか。

第1世代の8086プロセッサでは、汎用レジスタ(AX、BX、CX、DX)の中には半特殊な目的もあります。たとえば、LOOPオペコードは、ループカウンタがCXであるとみなします。 DIVオペコードは結果をAXおよびDXに格納します。また、いくつかのアドレッシングモードではBXまたはSIまたはDIをオフセットとして使用できますが、他の汎用レジスタをオフセットとして使用することはできませんでした。

次世代のプロセッサ世代では、これらの特殊な目的のいくつかは薄れています。たとえば、ほとんどのオペコードではBXだけでなくオフセットとしても使用できます。ほとんどの場合、汎用レジスタは互換性があります。

歴史的な先例に従いたい場合は、(E)AXは「アキュムレータ」です。あなたが一連の数字を集計しているときの合計の合計。だからあなたが追加をしていて、結果を入れるレジスタが不明な場合は、(E)AXが良いデフォルトの選択肢になります。

関連する問題