人気マンガがだれでも無料♪電子コミック読み放題!!

アセンブラ初心者です。
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で書きました。

このQ&Aに関連する最新のQ&A

A 回答 (2件)

確かなことはいえませんが、コンパイラによる最適化かなんかの影響で外部モジュールにジャンプしているのでは?



hoge.c -> hoge.out は、 L9 L3 L5 を宣言して、 L2 L4 を呼び出している
foo.out (外部)は、 L2 L4 を宣言して、 L3 L5 を呼び出している

こんな感じのときに hoge.out と foo.out をリンカーでリンクすると実行ファイルができあがるのですから。
厳密には違うところがあると思いますが、イメージとしてはこんな感じだと思います。
    • good
    • 0

で C で書いたとかいうソースは見せてくれないんですか?

    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!


人気Q&Aランキング