2008년 7월 28일 월요일

ARM 스택 명령어

ARM 아키텍처는 스택 오퍼레이션을 수행하기 위해 다중-레지스터 전송 명령어를 사용하고 있다. 팝(pop) 동작(스택에서 데이터를 제거하는 일)을 위해 LDM 명령어를 사용하며, 푸시(push) 동작(스택에 데이터를 집어넣는 일)을 위해서는 STM 명령어를 사용한다. 스택을 사용할 때에는 스택을 메모리 위쪽으로 증가시킬 지 아래쪽으로 증가시킬 지를 결정해야 한다. 스택은 ascending(A)이나 descending(D) 중 하나이다. ascending 스택은 메모리의 상위 주소 방향으로 스택이 자라는 것을 말하며, descending 스택은 메모리의 하위 주소 방향으로 스택이 자라는 것을 의미한다.

full 스택(F)을 사용하는 경우, 스택 포인터 sp는 마지막으로 사용된 위치의 주소(예를 들어, sp는 스택상에 마지막 아이템을 가르킴)를 가르키고 있다. 반면 empty 스택(E)은 sp가 처음 사용되지 않을 영역의 주소(예를 들어, 스택의 마지막 아이템 다음의 빈공간)를 가르키고 있다.

스택을 처리하기 위해 보번해야 되는, 스택 베이스, 스택 포인터, 스택 리미트의 3개의 인자가 있다. 스택 베이스는 메모리에서 스택의 시작 위치를 나타낸다. 스택 포인터는 초기에는 스택 베이스를 가리키지만, 데이터가 스택으로 들어가면 스택 포인터는 메모리의 하단으로 이동하여 스택의 가장 맨 위를 계속 가르키고 있다. 스택 포인터가 스택 리미트를 넘어가면 스택 오벼플로우 에러가 발생된다.

댓글 없음: