45

たとえば、単純なhello worldタイプのプログラムを作成している場合、.dataセクションには次のようなものが含まれる可能性があります。

section .data

msg     db      'Enter something: '
len     equ     $ - msg

この例の$は何を表しており、なぜ$ - msg文字列の長さに等しいのですか?

4

3 に答える 3

24

この場合、$はアセンブラによる現在のアドレスを意味します。$ --msgは、アセンブラの現在のアドレスからmsgのアドレスを引いたもので、文字列の長さになります。

于 2012-04-28T06:35:48.150 に答える
7

NASM ドキュメント

http://www.nasm.us/doc/nasmdoc3.html#section-3.5

NASM は、式で 2 つの特別なトークンをサポートしており、計算に現在のアセンブリ位置を含めることができます: $ および $$ トークンです。$ は、式を含む行の先頭のアセンブリ位置に評価されます。JMP $ を使用して無限ループをコーディングできます。

http://www.nasm.us/doc/nasmdoc3.html#section-3.2.4

EQU は、シンボルを特定の定数値に定義します。EQU を使用する場合、ソース行にはラベルが含まれている必要があります。EQU のアクションは、指定されたラベル名をその (唯一の) オペランドの値に定義することです。この定義は絶対的なものであり、後で変更することはできません。たとえば、

message         db      'hello, world' 
msglen          equ     $-message

msglen を定数 12 に定義します

于 2015-10-04T18:23:20.247 に答える
3

$ は現在のアドレスを参照するために使用され、$$ はアセンブリの現在のセクションの開始アドレスを参照するために使用されます。

例:

section .text
  Mov A,0x0000
  Mov B,0x0000
  Mov C,0x0000

3 行目の $ は行自体のアドレスを指し、$$ は 1 行目のアドレス (セクションの開始場所) を指します。この規則は、nasm で機能します。

ソース: nasm.us

于 2013-04-09T23:45:26.633 に答える