2016-08-10 17 views
0

NASMマニュアルはセクション3.5で$トークンに次のものが含まれます。

$表現

を含む行の先頭に組立位置に評価し、前のセクション3.1でありソース行に関する注釈:

NASMは行継続文字としてバックスラッシュ(\)を使用します。行がバックスラッシュで終わる場合、次の行はバックスラッシュで終わる行の一部と見なされます。

データを必要に応じて割り当てます(文字列を含む20バイトの配列、最後に2番目の最後のインデックスまでの下線、改行文字):

section .data 
    buf:     ; define 20-byte buffer 
    db 'Hello, world!' ; declare string constant 
    times 19-$+buf db '_' ; declare byte with value '_' after string and up to index 19 in buffer 
    db 0xa    ; declare byte with newline character 0xa (10) at end of buffer 
    len equ $-buf   ; define len to be size of buf 

それは動作しますが、私は BUF $ +は、4行目の代わりに$ -bufの使用されている理由について少し混乱しています。私の理解では、各行はソース行、$は行の先頭を意味し、bufは "buf"というラベルの付いたデータの先頭を指します。

私は bufを$ +の代わりに$ -bufを使用している場合は、NASMは吐き出す:

error: non-constant argument supplied to TIMES 

はここで何が起こっていますか?

答えて

1

$よりも先に-が存在しています。

19-$+buf = buf-$ + 19

それはまだアドレス差ではなく、合計です。


buf "BUF"

はいラベル付きデータの先頭を指しますが、あなたの用語がずさんです。 bufは、bufラベルを貼った位置のアドレスです。これは、既知のオフセットでバイトにアクセスするために使用できる位置です。どのバイトが「buf」とラベル付けされているかを明確に示す方法はありません。この場合、おそらく、_でパッドされた行の後の改行を含む20バイトのバッファ全体がbufによってアクセスされます。

+0

私の文言をより正確にする方法を指摘してくれてありがとう! –

関連する問題