MIPS에는 32개의 register들이 존재한다.

 

이 register들은 두종류로 분류할 수 있다.

 

Not preserved register / Preserved register

 

Not preserved register

- 이 register들은 processor가 마음대로 가져다 쓰고,

  다시 원래 값을 복구시켜야 하는등의 일을 하지않아도 되는 temporary register들이다.

 

temporary register : $t0 ~ $t9

 $a0 ~ $a3, $v0 ~ $v1

 

Preserved register

- 이 register들은 사용한 후 원래의 값들을 돌려줘야 하는 레지스터 들이다.

 

saved register : $s0 ~ $s7

 

 

 

 

 

Registers 정리

 

 

procedure 호출시 원래값을 돌려주지 않아도 되는 registers ( 12 )

$t0, $t1, $t2, $t3, $t4, $t5, $t6, $t7, $t8, $t9

 

procedure 호출시 원래값을 돌려주어야 하는 registers ( 8 )

$s0, $s1, $s2, $s3, $s4, $s5, $s6, $s7

 

procedure 호출시 parameter 전달을 위해 사용하는 registers ( 4 )

$a0, $a1, $a2, $a3

 

procedure 호출시 return value를 전달하기 위해 사용하는 registers (2 )

$v0, $v1 ( $t 레지스터들과 마찬가지로 값에 신경쓰지 않아도 됨)

 

procedure 호출시 돌아갈 주소(return address)을 저장하기 위해 사용하는 register

$ra (return address, jal 사용시 바로 다음 번지가 자동저장)

 

0이 저장되어있는 특수 register

$zero (값 변경 불가능, 0)

 

stack point를 저장하는 특수 register

$sp (stack pointer)

 

$gp (global pointer)

 

procedure frame의 첫번째 워드를 가리키도록(frame pointer) 하는 특수 register

$fp (frame pointer)

Posted by croute

댓글을 달아 주세요