- ベストアンサー
NASMアセンブラの特殊シンボル$による、文字列の長さ取得について
- NASMアセンブラの特殊シンボル'$'は、アドレスを示すシンボルであり、文字列の長さを取得する際に使用されます。
- 具体的には、バッファの先頭アドレスを示す'$'から現在のアドレスを引くことで、文字列の長さを計算することができます。
- しかし、'$'が振り分けられたアドレスが後方にある場合、計算結果は負の値になることに注意が必要です。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
buf: db 'Hello' buflen: というのは、次のように書くものの簡略表記です(; の後ろはコメント)。 buf: db 'H' ; buf + 0 db 'e' ; buf + 1 db 'l' ; buf + 2 db 'l' ; buf + 3 db 'o' ; buf + 4 buflen: これなら buflen 番地が、buf + 5 の位置になるというのが納得いくのではありませんか?
その他の回答 (2)
- Tacosan
- ベストアンサー率23% (3656/15482)
そもそも 0 buf: db 'Hello' 1 buflen equ $ - buf の 2行目でなぜアドレスが 1 になるのか, 説明してもらえませんか?
補足
Tacosanさん、ご回答頂き、誠に感謝申し上げます。 ご指摘のあった箇所について、説明させて頂きます。 >0 buf: db 'Hello' >1 buflen equ $ - buf >の 2行目でなぜアドレスが 1 になるのか, 説明してもらえませんか? 2行目で1になる理由は、すいません自己推測です。。。 私の考えでは、ソースの最初から順にアドレッシングがされると思っています。 ですから、私の考えた仮のアドレッシングでは、素直に2行目は1になると思いました。 $というシンボルはbufの後のアドレス、即ちアドレス5を差し、bufは0のアドレスを差すものなのでしょうか? とすると、buf: db、buflen equ という宣言はバイト数に含まれないのでしょうか? お忙しい中、申し訳ございませんが、再度ご教授宜しくお願い致します。 切にお願い申し上げます。
- Tacosan
- ベストアンサー率23% (3656/15482)
なぜ $ が 1 で buf が 5 なのか, 説明してもらえますか? そのアドレスだと $ は 5, buf は 0 にならないといけない.
補足
Tacosanさん、ご回答頂き誠にありがとうございます。 ご指摘あった箇所についてお答えさせて頂きます。 >なぜ $ が 1 で buf が 5 なのか, 説明してもらえますか? $が1であるというのは、下記の文で$シンボルが記述されているアドレスが1だからです。 0 buf: db 'Hello' 1 buflen equ $ - buf そして、bufが5なのは'Hello'が五文字だからです。 これは私の勘違いなのでしょうか? もしかして、$ - bufにすると、$は'Hello'の直後のアドレス5を持っており、 bufはbufが記述された、行のアドレスを持っているから、Tacosanの仰る通り、 0になるのでしょうか? お忙しい中、申し訳ございませんが、ご教示宜しくお願い致します。
お礼
sakusaker7さん、ご回答頂き誠に感謝申し上げます。 sakusaker7さんのご教示とても勉強になりました。 そして、自分の疑問がやっと解けました! お忙しい中、私の質問にお答え頂き、心より感謝申し上げます! ありがとうございました。