컴퓨터 구조

컴퓨터 구조 (07)

cheesecrust1008 2022. 9. 29. 21:25

jal 은 branch 로 link를 시킨 후에 return adress를 저장한다.

 

따라서 위와 같은 구조로 만들어 진다. 

 

한편, 레지스터 들은 각각의 별명에 기능이 함축되어 있다. 

$zero 는 항상 0 이고, $2 - $3의 별명은 $v0 - $v1 으로 이 의미는 return 결과 같이거나, system call code 이다.

 

$a0 - $a4 는 arguments 로 함수의 입력값등에 쓰인다.

$t0 - $t7 는 tmp 로 연산을 할 때에 사용한다. 

$s0 - $s7 는 저장되는 임시 Register (서브루틴 호출시 저장된다) 함수 호출시 함수 시작부분에서 해당 Register를 Stack에 저장한다.

$t8 - $t9 는 추가적인 레지스터 이다.

 

 

 

$gp 는 global pointer, $sp 는 stack pointer 이다. $fp 는 frame pointer, $ra 는 return address 이다.

 

 

위에서의 system call code 의 의미는 syscall 을 수행 시킬때에 해당 코드에 따라 동작을 수행하는 것이다.

 

함수의 호출 과정 :

위와 같은 코드가 있다고 했을 때에 함수의 arg 는 $a0, $a1, $a2, $a3  에 저장되고, 함수 안의 f는 $s0에 저장되고, arg 들을 계산 하면서 나오는 결과 들은 $t 에 저장된다. 

 

그리고 return 값은 $v0에 저장 된다. 

 

하지만, 이는 해당 함수 안에서의 작동이다. 함수 밖에서 해당 함수를 부를 때에

위와 같이 이미 선언한 변수가 있다면, 이는 함수 안에서 똑같이 쓰이는 레지스터 이기 때문에 sw 를 활용해서 메모리에 저장한 후에 함수가 끝나면 lw 를  활용해서 꺼내온다.

 따라서 함수를 실행시킨다면 위와 같이 실행된다. 

위의 $sp 에서 -12 를 한 이유는 저장해야할 변수가 3개 이기때문에 하나에 4byte 이기 때문에 4 * 3 = 12로 12를 빼준다. 

 

빼는 이유는 stack에는 거꾸로 채우기 때문에 sp를 줄인다음에 아래서 부터 위로 채운다.  그리고 다 쓴 후에는 $sp에 다시 더해서 원 상태로 만든다. 

spim에서의 재귀 

 

'컴퓨터 구조' 카테고리의 다른 글

컴퓨터 구조  (1) 2022.10.04
컴구 translation and startup  (1) 2022.09.30
컴퓨터 구조(06)  (1) 2022.09.23
컴퓨터 구조(05)  (0) 2022.09.20
컴퓨터 구조 (04)  (0) 2022.09.16