많은 경우에 C 함수 (예 : 정렬 알고리즘 셸 정렬)를 컴파일 할 때 stackaddress (i는 호출되는 것으로 보입니까?) ebp-4/-4 (% ebp)/[ebp] -4 또는 무엇이든간에, 알다시피, 보통 첫 번째 지역 변수에 사용되며, 내 경우에는 사용되지 않습니다.인텔 x86 - 왜 -4 (% ebp)가 아무 것도 말하지 않습니까?
그래서 어떤 로컬 변수에 사용되지 않았기 때문에 어떤 용도로 사용되는지 알고 있는지 궁금 해서요.
또한, 로케일 변수에 스택 공간을 할당하기 위해 스택 포인터에서 20을 뺀다 - 그러나 값은 여전히 -24 (% ebp)로 저장된다. -20까지만 방이 만들어 졌을 때 어떻게 가능할까? ??
는 C-기능은 다음과 같이 lookes :
void shellsort(int a[], unsigned int n) {
unsigned int gap, i, j;
for (gap = n/2; gap > 0; gap = gap == 2 ? 1 : 5 * gap/11) {
for (i = gap; i < n; i++) {
int tmp = a[i];
for (j = i; j >= gap && tmp < a[j - gap]; j -= gap)
a[j] = a[j - gap];
a[j] = tmp;
}
}
}
을 그리고 이것은 86에 gcc -S
32 비트 우분투 사전에
12(%ebp) = n
8(%ebp) = a[]
-8(%ebp) = tmp
-12(%ebp) = j
-16(%ebp) = i
-20(%ebp) = gap
-24(%ebp) = (gap * 4) + gap
감사합니다 :)
이렇게하는 코드를 보여줄 수 있습니까? – harold
질문을 편집하고 {} 서식 지정 버튼을 사용하십시오. –
어떤 플랫폼?어떤 컴파일러와 컴파일러 플래그? 생성 된 어셈블리는 무엇입니까? –