지난 글에서는 register set 과 register window overflow / underflow 에 대해 정리하였다. SPARC는 CWP, WIM 2가지 값을 이용해 오버플로우나 언더플로우가 발생하는지 확인하고, 처리하였다. 이번 글에서는 서브루틴에 매개변수를 전달하는 방법을 정리하였다. 서브루틴의 매개변수 전달 서브루틴의 매개변수를 전달할 때, 전에는 그냥 %o0 ~ %o5 를 사용한다고 정리하였다. 그런데 만약 매개변수의 개수가 6개를 넘어가면 어떻게 해야할까? SPARC에서는 매개변수의 순번에 따라 데이터를 넘기는 방식이 다르다. 6번째 매개변수까지 6번째 매개변수까지는 전에 정리했던대로 o-register 를 이용하여 매개변수를 전달한다. %o0~%o5 를 사용할 수 있다. %o6 은 ..
지난 글에서는 구조체가 메모리에 어떻게 저장되는지를 정리하였다.구조체도 배열과 마찬가지로, 먼저 선언된 변수가 낮은 주소의 값 (%fp에서 먼 쪽)을 가진다.그래서 먼저 선언된 변수의 위치를 기준으로 직접 경계 정렬을 하여 전체 구조체가 가지는 사이즈를 계산한 뒤,구조체의 시작 위치를 구조체 내 변수중 가장 큰 사이즈의 배수로 맞추어 선언하면 되었다. 이번 글부터는 서브루틴에 대해 좀 더 자세하게 정리하고자 한다.서브루틴서브루틴은 '특정 작업을 여러번 수행하는 연속된 명령어의 나열' 으로 볼 수 있다.서브루틴의 실행 과정을 한번 정리해보자. 1. 인자값 설정o-register 에 값을 할당하여 매개변수로 넘길 값을 설정한다.(인자값은 o0 ~ o5 까지 6개 레지스터 범위에서 사용가능하며, 이를 넘어가는..
지난 글에서는 큰 수 덧셈과 뺄셈에 대하여 정리하였다. 간단하게 요약하면 큰 수를 더하고 뺄 때는 cc 명령어를 사용해 캐리를 넘겨주고, x 명령어를 사용해 캐리를 받아 여러 레지스터를 사용해 큰 수를 연산하였다. 이번 글에서는 SPARC 프로세서의 곱셈과 서브루틴에 대해 정리하고자 한다. 곱셈 곱셈은 기본적으로 bitshift 와 덧셈의 조합이다. 예를 들어 101 x 204 를 한다고 해보자. 초등학교 때로 돌아가 어떻게 큰 수의 곱셈을 했는지 따져보면 101 x 4 x 1 101 x 0 x 10 101 x 2 x 100 이렇게 곱셈을 하고 다 더해서 곱셈을 계산했던 기억이 있을 것이다. 컴퓨터도 마찬가지로 이진수에 대해 위와같은 연산을 함으로써 곱셈을 구현한다. 이때 1, 10 100 처럼 1, 2..