함수(또는 프로시저나 서브루틴)는 코드를 재사용(reuse)하는 주요 수단이다.

함수는 호출(call)하여 사용한다.

함수는 호출 뒤 다시 원래 자리로 돌아가야한다.

다만, 어디서 함수로 들어갔는지를 기억해야하는데,

이때 함수가 들어간 위치가 바로 프로그램 카운터(PC) 값이다.

Untitled

위의 그림과 다음의 함수 호출 과정 예제와 비교해보자

주소 명령어 피연산자 설명
100 pca 프로그램 카운터 → 누산기
101 add 5(즉시) 함수에서 돌아올 주소(100+5=105)
102 store 200(직접) 반환 주소를 메모리(200번지)에 저장
103 load 3(즉시) 값(함수의 파라미터값)을 누산기에 넣기
104 bra 300(직접) 함수를 호출(함수로 분기)
105 함수 반환 뒤 실행 계속
200 함수에서 돌아올 주소를 저장하기 위해 미리 확보해둔 메모리 위치
300 cube 함수 시작
cube 함수의 나머지 명령어들
310 bra 200(간접) 저장했던 주소로 돌아감(간접 주소 지정을 사용해 분기

이 과정에는 상당히 많은 작업이 필요하다. 따라서 대부분 기계는 이런 과정을 돕는 명령어들을 제공한다. 예를 들어, 링크 레지스터를 사용한 BL이라는 명령어는 함수로 호출하는 명령어와 현재 명령어의 다음 위치(PC + 4)를 저장하는 명령어를 하나로 합친 것이다.