2017-11-25 7 views
0

원래 질문 : 다음 스켈 레탈 프로그램에서 실행이 위치 1에 도달하면 정적 및 동적 체인을 포함한 모든 활성화 레코드 인스턴스가있는 스택을 보여줍니다. 가정 Bigsub는 레벨 1서브 프로그램 구현 - 활성 레코드 인스턴스 스택 묘사

enter image description here

에 있고 답은 enter image description here

하지만 난 정적 링크가 정적 부모의 그것의 하단을 가리켜 야하기 때문에 답변이 잘못된 생각 ARI, 꼭대기가 아니라 동적 링크 만 꼭대기를 가리켜 야합니다.

예를 들어 B와 C의 정적 링크는 A의 맨 위가 아니라 A의 맨 아래를 가리켜 야하며 A의 정적 링크는 BIGSUB의 맨 아래를 가리켜 야합니다. 그렇지 않습니까? 감사합니다.

답변

0

활성화 레코드의 레이아웃은 구현에 따라 다릅니다. 레코드를 사용하기위한 의사 코드를 보면 예제가 올바른지 알 수 있습니다. 기록의 상단/바닥는 구현에 따라 어느 (당신이 다음 어떤에서했던 것처럼 나에게 바닥을하지만 나는 최고를 사용합니다).

예에서 레코드의 다른 쪽 끝 ("위쪽")을 가리키는 것은 이러한 주소가 항상 STACK[DYNAMIC_LINK_ADDRESS]+1이기 때문에 불필요합니다. V 예제의 루틴은 매개 변수 또는 지역 변수를 정의하지 않으므로 활성화 레코드가 사용되는 방법을 상상하기 어렵습니다.

각 루틴이 XY 개의 변수를 정의한 경우 스택은 양수 오프셋을 사용하여 스택에서 매개 변수와 변수를 찾을 수있는 곳을 가리키는 동적 링크와 정적 링크를 모두 포함하는 다음 의사 테이블처럼 보일 수 있습니다. 변수가 로컬이거나 로컬이 아닌 경우 동일한 오프셋이 사용되고 A.X은 A)에 대한 활성화 레코드의 경우 +02에 있습니다.

N-17: DL -> 12 
N-16: SL -> 07 
N-15: B.X 
N-14: B.Y 
N-13: RET C 
N-12: DL -> 07 
N-11: SL -> 07 
N-10: C.X 
N-09: C.Y 
N-08: RET A 
N-07: DL -> 02 
N-06: SL -> 02 
N-05: A.X 
N-04: A.Y 
N-03: RET BITSUB 
N-02: BIGSUB.X 
N-01: BIGSUB.Y