2014-10-05 3 views
1

내 컴퓨터 구조 교본에서이 예제 프로그램에 대해 혼란스러워합니다. 여기 Y86 프로그램 합계 합계

은 ...

enter image description here

C 코드의 그리고 여기에 생성 된 Y86 코드의 ...

enter image description here

내 질문은 0x046

mrmovl 8(%ebp), %ecx 

함께 정확히 시작을 설정하는 이유는 무엇입니까? 스택 포인터 앞에 8 바이트? 나는 모든 것이 어디 있는지 거의 혼란 스럽다고 생각합니다. 스택이 0x100을보고있는 것처럼 정확히 % ecx가 거기에서 8 바이트 떨어져 있고 Count가 % ebp에서 12 바이트 떨어져 이미 설정되어있을 때 4 씩 증가하는 이유는 무엇입니까? 스택 포인터가 정확히 무엇을보고 있는지에 대한 나의 이해는 잘못된 것이다.

답변

1

코드는 다음과 같은 순서로 스택에 푸시 것들 :

  • Count (4)
  • Start (array)
  • 복귀 %eip (암시 call 의해 압박);
  • %ebp.

코드는 다음 %esp%ebp 설정하고, 스택은 다음과 같습니다. (부분에 주로 관심이 %EBP 이상을 표시 당신은)

stack layout

희망이 사물을 분명히합니다. 자세한 내용은 here을 참조하십시오.

+0

제 생각에는 * 시작이 스택에 푸시 된 세 번째 최신 항목 이었기 때문에 최신 및 최신 2 번째 항목 (각각 4 바이트)을 지나서 *로 시작해야합니다. 바이트 시작. * 시작 바이트는 배열에 대한 주소를 포함하고 _that_는 4 씩 증가합니다. 프로그램 끝에서 스택에 .pos 100을 설정합니다. 그래서 4 바이트를 스택에 넣고 100-103 번지 또는 0FD-100 번지에 있습니까? – Weston