• ベストアンサー

アセンブラのコードについて質問です。

call L_puts$stub というのはcall命令の意味は分かりますが後ろのL_puts$stubというのはどういった意味なのでしょうか?何かを足しているんですよね....?

質問者が選んだベストアンサー

  • ベストアンサー
  • petertalk
  • ベストアンサー率69% (156/225)
回答No.3

おそらく、Hello World を表示するようなサンプルコードをコンパイルして アセンブラのソースを出力させたと思われるので、 その前提で書いてみます。 L_puts$stub はスタブ関数です。 スタブ関数とは、とりあえず置いておく関数という意味です。 文字列の表示のために _puts を呼び出したいのですが、 _puts の実体は、動的リンクで呼び出されるために、 リンク時にはアドレス解決ができないので、とりあえず、 スタブ関数を置いておきます。 実行時には、実際の _puts のアドレスが解決されるので、 このスタブ関数は _puts に直接ジャンプするコードに置き換えられ、 文字列が表示されるようになります。 ですから、アセンブラのソース上では、L_puts$stub は、 _puts の参照や、halt命令が並んでいるだけの意味不明なコードに見えますが、 実行時には、_puts を直接呼び出すコードになる、と理解してください。

izuuuu
質問者

お礼

まさしくズバリでした。 もう少し条件を詳しく書くべきでしたね><すいません。 理解できました。ありがとうございます。

その他の回答 (2)

  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.2

ひとくちに「アセンブラ」といっても, ターゲットとするプロセッサやアセンブラによっていろいろな書き方がある. そして, それらの情報を出さない限り答えることはできない.

  • kmee
  • ベストアンサー率55% (1857/3366)
回答No.1

アセンブリ言語は、CPUによって違います。 また、アセンブラによっても詳細な点で違います。(書式、疑似命令、独自拡張マクロなど) まずは、それをはっきりさせましょう。 単に「L_puts$stub」というラベルのような気がしますが。

関連するQ&A