7

アセンブラ言語を学び始めたばかりです。EQUのコンセプトに出くわしました。DC.Bに到達するまで、最初は完全に理にかなっています。DC.BとEQUの違いは何ですか?すべての定数にEQUを使用することはできませんか?

4

1 に答える 1

13

私はあなたの特定のアセンブラ構文に精通していないので、この答えは知識に基づいた推測です。

EQUディレクティブは、アセンブリソーステキストの他の場所で参照できる名前付きシンボリック定数(多くの場合、他のEQU定義を含む他のアセンブラ値から計算される)が必要であることをアセンブラに通知するために使用されます。あなたは常に書く必要があります

 symbolname EQU constantexpression

これにより、ソーステキストの他の場所に定数式の代わりにsymbolnameを書き込むことができます。ただし、この名前自体は、最終的にアセンブルされたプログラムのバイナリデータに直接影響しません。

「DC.B」(「定数(バイト)の定義」は、最終的にアセンブルされたプログラムで、ソースファイルの相対位置に1バイトのデータが埋め込まれていることをアセンブラに通知するために使用されると思います」。

optionalname DC.B  constantexpression

定数式の計算値を、アセンブルされたプログラムのバイナリデータのデータバイトに配置します。

だから、あなたは書くかもしれません

 AnEvenNumber  EQU    2
 MyEvenNumber  DC.B   AnEvenNumber

最初の行は名前付き定数のみを生成し、2番目の行がないと、バイナリに影響を与えません。2行目は、名前付きシンボル定数で指定された値を含むバイトをバイナリに生成します。

DC.Bディレクティブでは、オプションの名前も使用できることに注意してください。このシンボルは、コード内の他の場所でも使用できます。アセンブラの洗練度によっては、次のように定義できる場合があります。

 LocationOfEvenNumber EQU  MyEvenNumber

      DC.W    LocationOfEvenNumber

これで、バイナリデータのバイトを「指す」バイナリファイル内の単語が生成されます。

于 2012-07-26T15:45:31.773 に答える