teratail header banner
teratail header banner
質問するログイン新規登録

質問編集履歴

1

コードの修正とアセンブリの結果の追記

2018/12/04 16:23

投稿

退会済みユーザー
title CHANGED
File without changes
body CHANGED
@@ -67,4 +67,69 @@
67
67
  Target: x86_64-apple-darwin18.2.0
68
68
  Thread model: posix
69
69
  InstalledDir: /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin
70
- ```
70
+ ```
71
+
72
+ ### 追記
73
+ コードをシンプルなものに変えて実行しました.
74
+ ```C
75
+ #include <stdio.h>
76
+
77
+ void __cdecl some_func(
78
+ int a, int b, int c, int d, int e, int f, int g, int h, int i, int j
79
+ ) {} // do nothing
80
+
81
+ int main() {
82
+ some_func(1, 2, 3, 4, 5, 6, 7, 8, 9, 10);
83
+ return 0;
84
+ }
85
+ ```
86
+ アセンブリは以下のようになりました.(一部略)
87
+ ``` sample.s
88
+ _some_func:
89
+ .
90
+ .
91
+ .
92
+ movl 40(%rbp), %eax
93
+ movl 32(%rbp), %r10d
94
+ movl 24(%rbp), %r11d
95
+ movl 16(%rbp), %ebx
96
+ movl %edi, -12(%rbp)
97
+ movl %esi, -16(%rbp)
98
+ movl %edx, -20(%rbp)
99
+ movl %ecx, -24(%rbp)
100
+ movl %r8d, -28(%rbp)
101
+ movl %r9d, -32(%rbp)
102
+ movl %ebx, -36(%rbp) ## 4-byte Spill
103
+ movl %r10d, -40(%rbp) ## 4-byte Spill
104
+ movl %r11d, -44(%rbp) ## 4-byte Spill
105
+ movl %eax, -48(%rbp) ## 4-byte Spill
106
+ .
107
+ .
108
+ .
109
+ _main:
110
+ .
111
+ .
112
+ .
113
+ movl $1, %edi
114
+ movl $2, %esi
115
+ movl $3, %edx
116
+ movl $4, %ecx
117
+ movl $5, %r8d
118
+ movl $6, %r9d
119
+ movl $7, %eax
120
+ movl $8, %r10d
121
+ movl $9, %r11d
122
+ movl $10, %ebx
123
+ movl $0, -12(%rbp)
124
+ movl $7, (%rsp)
125
+ movl $8, 8(%rsp)
126
+ movl $9, 16(%rsp)
127
+ movl $10, 24(%rsp)
128
+ movl %ebx, -16(%rbp) ## 4-byte Spill
129
+ movl %r11d, -20(%rbp) ## 4-byte Spill
130
+ movl %r10d, -24(%rbp) ## 4-byte Spill
131
+ movl %eax, -28(%rbp) ## 4-byte Spill
132
+ callq _some_func
133
+ ```
134
+ アセンブラについて詳しくないのですが,確かにすぐにスタックにしまっているわけではないみたいです.
135
+ これは結局最後の4つだけ右からスタックにしまっているということで大丈夫ですか?