🙇‍♀️함수 기초

🪐함수 기초

  • 함수 (프로시저 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)이라는 메모리 영역을 사용
    • 함수가 사용하는 일종의 메모장
    • 매개 변수 전달
    • 돌아갈 주소 관리

🪐스택 메모리

  • 스택 메모리, 스택 프레임

stack memory

스택은 높은 주소에서 낮은 주소로 사용함

  • 레지스터는 다양한 용도로 사용
    • a b c d 범용 레지스터
    • 포인터 레지스터 (포인터 = 위치를 가리키는~)
      • ip (Instruction Pointer) : 다음 수행 명령어의 위치
      • sp (Stack Pointer) : 현재 스택 top 위치 (일종의 cursor)
      • bp (Base Pointer) : 스택 상대주소 계산용

태그:

카테고리:

업데이트: