質問編集履歴

1 修正

strike1217

strike1217 score 585

2016/09/09 19:00  投稿

アセンブリとC言語
以下のようなプログラムを作ってみました。
#include <stdio.h>
int main(){
int i = 9;
printf("%d", i);
return 0;
}
これを逆アセンブルしたところ以下のようになりました。
0000000100000f50 <_main>:
100000f50: 55 push %rbp
100000f51: 48 89 e5 mov %rsp,%rbp
100000f54: 48 83 ec 10 sub $0x10,%rsp
100000f58: 48 8d 3d 47 00 00 00 lea 0x47(%rip),%rdi # 100000fa6 <_main+0x56>
100000f5f: c7 45 fc 00 00 00 00 movl $0x0,-0x4(%rbp)
100000f66: c7 45 f8 09 00 00 00 movl $0x9,-0x8(%rbp)
100000f6d: 8b 75 f8 mov -0x8(%rbp),%esi
100000f70: b0 00 mov $0x0,%al
100000f72: e8 0d 00 00 00 callq 100000f84 <_main+0x34>
100000f77: 31 f6 xor %esi,%esi
100000f79: 89 45 f4 mov %eax,-0xc(%rbp)
100000f7c: 89 f0 mov %esi,%eax
100000f7e: 48 83 c4 10 add $0x10,%rsp
100000f82: 5d pop %rbp
100000f83: c3 retq
int i = 9; の部分が movl $0x9,-0x8(%rbp) に相当するのはわかるのですが、
この -0x8 は何ですか??
それと、前後の
lea 0x47(%rip),%rdi # 100000fa6 <_main+0x56>
movl $0x0,-0x4(%rbp)
mov -0x8(%rbp),%esi
mov $0x0,%al
この4つは何をしているのでしょうか??
教えてください。
  • C

    9154 questions

    C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

  • アセンブリ言語

    251 questions

    アセンブリ言語とは、機械語を人間にわかりやすい形で記述した低水準言語です。

思考するエンジニアのためのQ&Aサイト「teratail」について詳しく知る