STACK은 history 기능, 뭔가를 쌓는 구조의 Memory 영역, LIFO, 마지막에 집어넣은 Data가 가장 처음으로 나오는 Data

push는 stack에 자료를 집어넣는 용어, pop은 stack에서 자료를 빼는 것

어떻게 채워지느냐, 보통 Stack은 높은 주소에서 낮은 주소로 쌓아감.

Stack이 자라는 방향이 높은 주소로 자라는 것은 Ascending, 낮은 주소로 자라는 것은 Descending stack으로 분류

현재 stack pointer가 방금 push나 pop을 한 data를 포함하면 Full, 아니면 empty로 분류

stack pointer가 data를 넣은 후 변하느냐 아니면 먼저 변하고 sp가 먼저 변하느냐에 따라 After와 Before로 분류

stack에는 multiple register transfer addressing 명령어를 이용하여 push/pop

ST는 store = push, LD는 load = pop, M은  Multiple이라는 의미로 다 포함

IB는 Increase Before로서 sp를 data를 넣기 전에 증가 시킨다

IA는 Increase After로서 sp를 datas를 넣고 난 후에 증가 시킨다

DB는 Decrease Before로서 sp를 data에 넣기 전에 감소 시킨다

DA는 Decrease After로서 sp를 data 넣고 난 후에 감소

 

명령어 r9!, {r0, r1, r5} : R9가 가리키는 곳에 R0, R1, R5를 넣고 넣은 개수 3개 만큼 R9을 update하라는 의미

 

서브 루틴 호출 시 수행되는 일
1. 전달 인자와 돌아갈 주소를 스택에 push
2. 함수 호출(즉, pc를 불리워진 함수의 주소로 jump 시킴
3. 지역변수에 대하여 스택에 공간을 할당하는 일)
4. 호출된 함수를 수행하는 일
5. stack에서 부터 할당된 지역변수 저장고간의 해제
6. 돌아갈 주소를 stack으로부터 꺼내와 함수로부터의 복귀
7. 전달인자에 의해 사용되던 공간을 해제

Linked Register를 이용해서(R14), Branch하기 전에 돌아올 주소를 R1에 넣어두고 복귀할 때 R14를 pc에 넣고 돌아오는 mechanism 이용

 

'개발' 카테고리의 다른 글

Simple AMP: Zynq SoC Cortex-A9 Bare-MetalSystem with MicroBlaze Processor  (0) 2020.01.16
tvm  (0) 2019.12.21
어셈블리어  (0) 2019.12.17
AArch64 generic timer  (0) 2019.12.09
plot graph color  (0) 2019.10.04

+ Recent posts