2

私はより良い開発者になるために暇なときにアセンブリ言語を学んでいます。私はアマゾンから本を購入しました、そしてそれはすぐに配達されるでしょう、そして私は掘り下げる前に基本的な概念に慣れようとしています。

汎用タスクに使用する汎用レジスタについて混乱しています。私はCプログラミング言語を知っており、アセンブリとWindowsAPIの呼び出し規約について読んだことがあります。

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

これが基本的な質問だと思います。

4

1 に答える 1

3

あなたが望むものはどれでも、本当に。

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

後続のプロセッサ世代では、これらの特別な目的のいくつかは衰退しています。たとえば、ほとんどのオペコードでは、BXだけでなく、任意のレジスタをオフセットとして使用できるようになっていると思います。したがって、ほとんどの場合、汎用レジスタは交換可能です。

歴史的な先例をたどりたい場合、(E)AXは「アキュムレータ」であるため、一連の数値を合計するときに、たとえば現在の合計を格納する従来の場所になります。したがって、加算を行っていて、結果を入れるレジスタがわからない場合は、(E)AXがデフォルトの選択として適しています。

于 2012-04-07T16:03:02.357 に答える