Stack Memory, Stack Frame
962 단어 어셈블리 언어 입문어셈블리 언어 입문
스택 메모리, 스택 프레임
레지스터는 다양한 용도로 사용된다.
기존의 rax, rbx 등과 같은 범용 레지스터가 있고,
스택을 위한 Pointer Register 가 존재한다.
ip(Instruction Pointer)
- 다음 수행 명령어 위치
sp(StackPointer)
- 현재 스택 TOP 위치
bp(BasePointer)
- 스택 상대주소 계산용
%include "io64.inc"
section .text
global CMAIN
CMAIN:
push 1 ;스택 : [1]
push 2 ;스택 : [1,2]
call MAX ;스택 : [1,2,ret], ret: 현재부분의 리턴 주소 (함수에 들어갔다가 빠져나올 용도)
PRINT_DEC 8, rax
NEWLINE
; 위까지 실행하면 크래쉬가 난다. (스택을 비워주지않아서)
add rsp, 16 ;스택 포인터를 16 더해서 초기
xor rax, rax
ret
MAX:
push rbp ;스택에 베이스 포인터 고정 / 스택 : [1,2,ret,이전bp값] / 함수안에서 또 다른 함수를 호출했을때 돌아오기위해 사용
mov rbp, rsp ; rbp 고정 (현재 스택포인터 위치를 rbp에 넣어줌), 스택에 있는 1,2 를 상대주소로 접근하기위해서
mov rax, [rbp+16]
mov rbx, [rbp+24]
cmp rax, rbx
jg L1
mov rax, rbx
L1:
pop rbp
ret
Author And Source
이 문제에 관하여(Stack Memory, Stack Frame), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@doidoi88/Stack-Memory-Stack-Frame저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)