에서는 어셈블리 MIPS , 스택 포인터 레지스터 및 프레임 포인터에 대한 다른 레지스터가있다. 프레임 포인터는 무엇이고 그 목적은 무엇입니까? 스택 포인터와 어떻게 다릅니 까?
답변
MIPS 어셈블리에서 스택 포인터는 스택의 상단을 가리 킵니다. 스택에 공간을 할당하면 스택 포인터 ($ sp)가 사용 가능한 메모리를 가리 키도록 이동합니다.
MIPS 어셈블리에서 서브 루틴을 호출 할 때 (레지스터가 당시에는 레지스터 기반 매개 변수가 아닌 경우 레지스터가 프리미엄 임) 매개 변수를 스택에 쓴 다음 스택 포인터를 진행시킵니다.
메소드가 시작되면 매개 변수의 오프셋이되었을 수 있습니다 16($sp)
. 그러나 변수가 스택에 배치되면 스택 포인터가 이동하고 동일한 매개 변수 가 24($sp)
대신 배치 될 수 있습니다 . 이로 인해 코드가 약간 혼동 될 수 있습니다.
프레임 포인터 ($ fp)는 스택 프레임의 시작을 가리키며 서브 루틴 호출 기간 동안 움직이지 않습니다. 이는 스택 프레임의베이스를 가리키며 서브 루틴으로 전달되는 매개 변수는 프레임 포인터에 대해 일정한 지점에 유지됩니다.
프레임 포인터를 수정하는 서브 루틴 호출로 프레임 포인터를 저장하고 복원해야합니다.
더 읽을 거리 :
- UWisc Madison CS 354 MIPS 규칙
- 3 장 MIPS 어셈블리 언어
- UMD CS 311 스택 이해
- UWash Seattle CSE 410 MIPS 통화 규칙 요약
- 위키 백과 프레임 포인터