0-12. 스택 메모리(Stack)

Crat3 ㅣ 2023. 4. 28. 17:31

0. 레지스터

레지스터는 다양한 용도로 사용한다.

기존의 a, b, c, d의 범용 레지스터도 있으며

특정 위치를 가리키는 포인터 레지스터도 있다.

IP(Instruction Pointer) : 다음 수행 명령어의 위치

SP(Stack Pointer) : 현재 스택의 Top 위치

BP(Base Pointer) : 스택의 상대주소를 계산할 때 사용

 

1. 스택 메모리

메모리의 저장구조

 

 

 

2. 스택 프레임

스택 프레임

높은 주소에서 낮은 주소로 쌓음

rbp 레지스터를 스택에 저장하여 해당 위치를 기준으로 원하는 값을 뽑아낼 수 있다.

main:

push 1
push 2
call MAX
PRINT_DEC 8, rax
NEWLINE

add rsp, 16  ; 크래쉬를 방지하기 위해 Stack Pointer를 16비트 만큼 이동

xor rax, rax
ret


MAX:
push rbp
mov rbp, rsp

mov rax, [rbp+16]
mov rbx, [rbp+24]
mov rax, rbx
jg L1

mov rax, rbx

L1:
pop rbp
ret

 

'어셈블리' 카테고리의 다른 글

0-11. 함수(Function, 프로시저)  (0) 2023.04.28
0-10. 배열과 주소(Array, Address)  (0) 2023.04.28
0-9. 반복문(Loop)  (0) 2023.04.28
0-8. 분기문(If)  (0) 2023.04.28
0-7. 시프트 연산과 논리 연산  (0) 2023.04.28