回答編集履歴

4

誤記修正

2019/03/06 10:27

投稿

cateye
cateye

スコア6851

test CHANGED
@@ -34,7 +34,7 @@
34
34
 
35
35
  ```
36
36
 
37
- アセル結果(最適化はしていません)
37
+ パイル結果(最適化はしていません)
38
38
 
39
39
  ```asm
40
40
 

3

ソース追記

2019/03/06 10:27

投稿

cateye
cateye

スコア6851

test CHANGED
@@ -15,3 +15,141 @@
15
15
  アプリケーションは、プログラムですからそれが実行できるOSが必要です。(OSもプログラムだけれど・・・)
16
16
 
17
17
  例えばfirefoxというウェブブラウザがありますが、OS単位(windows,macOS,Linux・・・)のものが配布されています。
18
+
19
+ 「追記」カーニハンの「hello, world」をclangでコンパイルしてみました
20
+
21
+ ```c
22
+
23
+ #include <stdio.h>
24
+
25
+
26
+
27
+ main( )
28
+
29
+ {
30
+
31
+ printf("hello, world\n");
32
+
33
+ }
34
+
35
+ ```
36
+
37
+ アセンブル結果(最適化はしていません)
38
+
39
+ ```asm
40
+
41
+ .text
42
+
43
+ .file "hw.c"
44
+
45
+ .globl main # -- Begin function main
46
+
47
+ .p2align 4, 0x90
48
+
49
+ .type main,@function
50
+
51
+ main: # @main
52
+
53
+ .cfi_startproc
54
+
55
+ # %bb.0:
56
+
57
+ pushq %rbp
58
+
59
+ .cfi_def_cfa_offset 16
60
+
61
+ .cfi_offset %rbp, -16
62
+
63
+ movq %rsp, %rbp
64
+
65
+ .cfi_def_cfa_register %rbp
66
+
67
+ subq $16, %rsp
68
+
69
+ movabsq $.L.str, %rdi
70
+
71
+ movb $0, %al
72
+
73
+ callq printf
74
+
75
+ xorl %ecx, %ecx
76
+
77
+ movl %eax, -4(%rbp) # 4-byte Spill
78
+
79
+ movl %ecx, %eax
80
+
81
+ addq $16, %rsp
82
+
83
+ popq %rbp
84
+
85
+ .cfi_def_cfa %rsp, 8
86
+
87
+ retq
88
+
89
+ .Lfunc_end0:
90
+
91
+ .size main, .Lfunc_end0-main
92
+
93
+ .cfi_endproc
94
+
95
+ # -- End function
96
+
97
+ .type .L.str,@object # @.str
98
+
99
+ .section .rodata.str1.1,"aMS",@progbits,1
100
+
101
+ .L.str:
102
+
103
+ .asciz "hello, world\n"
104
+
105
+ .size .L.str, 14
106
+
107
+
108
+
109
+
110
+
111
+ .ident "clang version 9.0.0 (trunk 354955)"
112
+
113
+ .section ".note.GNU-stack","",@progbits
114
+
115
+ .addrsig
116
+
117
+ .addrsig_sym printf
118
+
119
+
120
+
121
+ ```
122
+
123
+ これを実行ファイルにすると・・・main()のみ抜粋(真ん中の16進数が機械語です)
124
+
125
+ ```asm
126
+
127
+ 0000000000400500 <main>:
128
+
129
+ 400500: 55 push %rbp
130
+
131
+ 400501: 48 89 e5 mov %rsp,%rbp
132
+
133
+ 400504: 48 83 ec 10 sub $0x10,%rsp
134
+
135
+ 400508: 48 bf b4 05 40 00 00 movabs $0x4005b4,%rdi
136
+
137
+ 40050f: 00 00 00
138
+
139
+ 400512: b0 00 mov $0x0,%al
140
+
141
+ 400514: e8 e7 fe ff ff callq 400400 <printf@plt>
142
+
143
+ 400519: 31 c9 xor %ecx,%ecx
144
+
145
+ 40051b: 89 45 fc mov %eax,-0x4(%rbp)
146
+
147
+ 40051e: 89 c8 mov %ecx,%eax
148
+
149
+ 400520: 48 83 c4 10 add $0x10,%rsp
150
+
151
+ 400524: 5d pop %rbp
152
+
153
+ 400525: c3 retq
154
+
155
+ ```

2

追記

2019/03/06 10:22

投稿

cateye
cateye

スコア6851

test CHANGED
@@ -10,6 +10,8 @@
10
10
 
11
11
  ではなく、プログラムを実行したいOSの数だけ『C言語コンパイラ』が存在・・・ですかね?
12
12
 
13
+ (実際はCコンパイラも、ソースから実行するOS用にコンパイルできます)
14
+
13
15
  アプリケーションは、プログラムですからそれが実行できるOSが必要です。(OSもプログラムだけれど・・・)
14
16
 
15
17
  例えばfirefoxというウェブブラウザがありますが、OS単位(windows,macOS,Linux・・・)のものが配布されています。

1

追記

2019/03/05 13:16

投稿

cateye
cateye

スコア6851

test CHANGED
@@ -1,3 +1,15 @@
1
1
  色々勘違いが有るようですが、以下を参考にされたらどうでしょう?
2
2
 
3
3
  [プログラミングの楽しさ: プログラムが動く仕組み](http://yasuho.hatenablog.com/entry/20060329/p1)
4
+
5
+ 「追記」
6
+
7
+ > プログラムを実行したいアプリケーションの数だけ『C言語コンパイラ』が存在
8
+
9
+
10
+
11
+ ではなく、プログラムを実行したいOSの数だけ『C言語コンパイラ』が存在・・・ですかね?
12
+
13
+ アプリケーションは、プログラムですからそれが実行できるOSが必要です。(OSもプログラムだけれど・・・)
14
+
15
+ 例えばfirefoxというウェブブラウザがありますが、OS単位(windows,macOS,Linux・・・)のものが配布されています。