[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 와 같은 연산도 존재한다.
'Operating System' 카테고리의 다른 글
[System Software] C언어&어셈블리 예제 (0) | 2021.02.07 |
---|---|
[System Software] 논리연산 & Data Transfer 연산 / Branch & Jump 연산 (0) | 2021.02.07 |
[System Software] ISA / MIPS (0) | 2021.01.24 |
[OS] Communication in Client - Server Systems (0) | 2020.06.27 |
[OS] Process : A Program in Execution (0) | 2020.06.27 |