Operating System

[System Software] MIPS Operators

Sara.H 2021. 1. 26. 23:53

[3강 : MIPS Instruction Set Architecture II - 비트 포멧 및 산술연산]

 

MIPS 에서 기계어는 다음과 같은 형식이다 

연산자 + 계산결과 + Operand 1 + Operand 2 와 같은 형식으로 이루어져있다. 

 

이 때 인풋으로 들어가고 나오는 것들을 레지스터와 메모리에서 취한다고 해서 '밉스의 메모리 레지스터 모델' 이라는 말을 사용하는 것 ... 아직 정확히 무슨 의미인지는 모르겠음. 

 

레지스터의 값을 피연산자로 사용하는 경우 

- 레지스터는 총 32개로 구분되므로 5비트 만으로도 충분히 표현 가능. 

하지만, 메모리의 값을 피연산자로 하는 경우 32비트의 공간이 필요. 

 

=> 밉스의 전체 기계어 인스트럭션 자체가 32비트인데, 도대체 어떻게 메모리의 위치를 표현해야 하는가? 

 

 

위의 표는 기계어에서 비트마다 어떤 종류의 값들이 올 수 있는지를 나타낸다. 

* 첫 6비트는 연산자를 위해서 존재하는 공간. 

- 연산자가 2^6 즉, 64가지 밖에 존재하지 않는가 하는 의문이 들 수 도 있는데, 사실은 레지스터만을 피연산자로 취할 경우 남는 공간을 활용해서 더 다양한 연산을 지원하기도 함.

 

* 두번째부터 네번째까지는 레지스터의 값을 담을 수 있는 5비트 공간. 정확히 말하면 레지스터의 주소가 담기는 것. 

 

* Immediate 이라는 것은 레지스터에 굳이 담지 않아도 밉스에서 미리 알고 있는 정수값들을 담을 수 있는 공간. 

- Add Immediate 과 같은 연산은 `레지스터값 + 이미디어트 상수` 와 같은 형태의 계산이다. 

 

* 타겟 어드레스 : 26비트를 활용해서 메모리의 주소를 나타낸다. 다 나타낼 수 없고, 일부만 표현 가능함을 알 수 있다. 피연산자에 레지스터 번호를 적어두고, 레지스터에서 메모리의 주소를 가져오는 방식으로 계산하게 된다. 

 

덧셈 뺄셈과 달리 곱셈과 나눗셈은 별도의 레지스터를 필요로 한다. 

- LO, HI 레지스터를 이용한다. 

- 곱셈의 경우 두 32비트를 곱하면 결과가 64비트가 나오기 때문에, 별도의 레지스터를 동원한다. 

- 나눗셈의 경우 몫과 나머지를 저장하기 위해서 별도의 레지스터를 동원한다. 

- HI, LO 레지스터의 값을 피연산자로 지정하기 위한 mfhi, mflo 와 같은 연산도 존재한다.