2012-04-28 9 views
24

、.dataセクションのようなものが含まれている場合があります文字列?

+0

@Jamesようにさmsglenを定義します。 – Job

答えて

19

「ここ」のアドレスを意味します。ここでは、 "here"はmsg文字列の最後の後のバイトです。アセンブラのドキュメントでこれを説明します。ドキュメントをお読みください。

+7

msgの直後にlenを宣言しなかったとします。その後、「ここ」はもはや文字列の最後を指していないでしょうか? – InvalidBrainException

+2

それは正しいです。 –

11

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

+2

アセンブラが「現在のアドレス」として何を指しているのかははっきりしません。 "現在のアドレス"とは、 "最後の文がコンパイルされた"ことを意味します( 'msg db '何かを入力します:' ')? – InvalidBrainException

+2

@Terribad - アセンブラはこれまでのセクションに挿入されたバイト数を数えます。 '$'は次のものが行く場所です。 –

0

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

例:$$は(私たちのセクションが開始)1行目のアドレスを参照しながら、3行目の$のための

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

はライン自体のアドレスを参照します。 このコンベンションは、私のためにnasmで動作します。

ソース:$と$$トークン:nasm.us

+2

これは正しくありません。ダブルドル記号( '$$')は、現在のセクションの先頭を指します。 – Virtlink

+0

それを指摘してくれてありがとう。 私は今それを修正しました。 –

4

NASMのドキュメント

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

NASMは計算が現在のアセンブリの位置が関与することができ、式の中で二つの特別なトークンをサポートしています。 $は、式を含む行の先頭にあるアセンブリの位置を評価します。 JMP $を使って無限ループをコードすることができます。

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

EQUは、与えられた一定の値にシンボルを定義:EQUを使用する場合、ソースラインは、ラベルを含まなければなりません。 EQUの作用は、与えられたラベル名をその(唯一の)オペランドの値に定義することです。この定義は絶対的なものであり、後で変更することはできません。いや、そこに彼らは `$`記号の異なる使用について話:だから、例えば、

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

は定数12

関連する問題

 関連する問題