質問: アセンブラ初心者です。 アセンブラ初心者です。 macos上のターミナルでgccをつかいアセンブラのソースコードを表示させてみたら .cstring lc0: .ascii "%d \0" .text .globl _main _main: pushl %ebp movl %esp, %ebp pushl %ebx subl $36, %esp call l9 "l00000000001$pb": l9: popl %ebx movl $1, -16(%ebp) jmp l2 l3: movl $1, -12(%ebp) jmp l4 l5: movl -16(%ebp), %eax imull -12(%ebp), %eax movl %eax, 4(%esp) このようになったのですが1つ疑問があります。それはjmp命令のところでjmp l2またはjmp l4とありますがl2とl4のソースコードは表示されていません....。この部分はどうして表示されないのでしょうか?またどのようになっているのでしょうか?教えてください><ちなみにfor文をつかった単純なかけ算のプログラムをcで書きました。
回答: 確かなことはいえませんが、コンパイラによる最適化かなんかの影響で外部モジュールにジャンプしているのでは? hoge.c -> hoge.out は、 l9 l3 l5 を宣言して、 l2 l4 を呼び出している foo.out (外部)は、 l2 l4 を宣言して、 l3 l5 を呼び出している こんな感じのときに hoge.out と foo.out をリンカーでリンクすると実行ファイルができあがるのですから。 厳密には違うところがあると思いますが、イメージとしてはこんな感じだと思います。