C++ Rookiss Part1 C++ 프로그래밍 입문 : 함수 기초
🙇♀️함수 기초
🪐함수 기초
- 함수 (프로시저 procedure 서브루틴 subroutine)
call PRINT_MSG
함수 호출
함수 만들기
PRINT_MSG:
PRINT_STRING msg
NEWLINE
ret
- ex) 두 값중 더 큰 값을 반환하는 max
- 근데 값을 어떻게 넘겨받지? 반환 어떻게?
- eax와 ebx 입력값을 ecx에 반환
MAX: cmp eax, ebx jg L1 mov ecx, ebx jmp L2 L1: mov ecx, eax L2: ret
- 그런데 인자가 10개라면 어떻게 할까?
- eax, ebx에 이미 중요한 값이 있으면 어떻게 할까?
- [ ! ] .data .bss 사용하면?
- 인자를 도대체 몇개를 할당해야 하지?
다른 메모리 구조가 필요하다
- 꿈이 유효한 동안에는 그 꿈을 유지시켜야 함 (유효 범위의 개념이 있다)
- 꿈이 끝나면 그 꿈을 부셔버려도 됨 (정리의 개념이 있다)
-
꿈에서도 또 꿈을 꿀 수 있다는 것을 고려해야 함 (유동적으로 유효 범위가 확장 가능)
- [ ! ] 스택(stack)이라는 메모리 영역을 사용
- 함수가 사용하는 일종의 메모장
- 매개 변수 전달
- 돌아갈 주소 관리
🪐스택 메모리
- 스택 메모리, 스택 프레임
스택은 높은 주소에서 낮은 주소로 사용함
- 레지스터는 다양한 용도로 사용
- a b c d 범용 레지스터
- 포인터 레지스터 (포인터 = 위치를 가리키는~)
- ip (Instruction Pointer) : 다음 수행 명령어의 위치
- sp (Stack Pointer) : 현재 스택 top 위치 (일종의 cursor)
- bp (Base Pointer) : 스택 상대주소 계산용