ISA의 대표적인 기계어 집합인 MIPS의 원리와 연산 수행에 대해 알아본다.
- (Recap)컴퓨터마다 CPU에서 사용되는 기계어 집합이 다르다. (Instruction Set Architecture의 종류는 여러가지다.)
- ISA의 종류: IBM System/360, IA-32(x86), IA-64, MIPS, SPARC, Alpha, PA-RISC
- MIPS Register & Memory Model
- MIPS 레지스터 모델
- 피연산자 값을 저장할 범용 레지스터의 개수: 32개($0-$31)
- 레지스터 하나의 크기는 4 byte이다. 따라서 범용 레지스터는 (4 byte)*32(개) 만큼의 공간이 필요하다.
- 32개의 레지스터를 구분하기 위해서는 5bit가 필요하다(2^5 =32이므로)
- 범용 레지스터 외에도 몇 가지 레지스터들이 존재한다:
- PC(Program Counter register): 다음에 실행될 명령어의 주소를 담고 있는 32bit 레지스터
- LO/HI: 곱셈과 나눗셈의 결과를 저장하기 위해 predefined된 레지스터
- MIPS 메모리 모델
- 총 접근 가능한 메모리 크기 = 2^32 bytes = 4GB = 2^30 words(1 word = 4 byte이므로)
- cf) 메모리는 byte단위로 주소가 매겨진다.
- 오른쪽 그림에서 볼 수 있듯이 Memory의 가장 낮은 주소값은 0x0000 0000이다.(이는 16진수이므로 32bit의2진수 값으로도 표현할 수 있다. 2진수 4자리 = 16진수 1자리임을 기억하자.) 반대로 가장 높은 주소 값은 0xffff ffff이다.(32bit 이진수로 표현했을 때 모든 자리의 값이 1이다.)
- MIPS에서는 메모리의 주소를 나타내기 위해 32bit가 제공된다.
- 총 접근 가능한 메모리 크기 = 2^32 bytes = 4GB = 2^30 words(1 word = 4 byte이므로)
- MIPS 아키텍쳐에서는 모든 기계어의 길이가 4byte로 균일하다.
- 고급 언어에서 작성된 함수 단위의 프로그램은 기계어로 바뀌더라도 그 형태(함수 단위)를 유지한다.
- 마찬가지로 레지스터들도 어느 정도 정해진 역할이 있다.
- MIPS Instructions
- Arithmetic/Logic Instructions: CPU내의 ALU에서 진행되는 산술 논리 연산(=,-,*,/, AND, OR)
- Data Transfer(Load/Store) Instructions: Load - 메모리 데이터를 CPU에 전달 / Store - CPU의 값을 메모리에 저장하는 것
- MIPS에서는 Load/Store 관련 명령어들을 제외하고는 메모리에 접근하지 않는다. 즉, Load/Store명령어를 제외하고는 메모리가 피연산자로 사용되지 않는다. (나머지 instruction들은 시간 단축을 위해 메모리에 접근하지 않고 레지스터만을 사용)
- 메모리에 있는 값을 사용해 연산을 해야 하는 경우, 연산 과정을 나누어 i)Load 명령어로 메모리 값을 레지스터에 옮긴 후 ii)레지스터만을 피연산자로 사용하는 산술 연산을 진행한다.
- Conditional branch Instructions
- PC를 바꾸는 명령어
- Unconditional jump instructions
- PC를 바꾸는 명령어
'System SW' 카테고리의 다른 글
[2.3] MIPS Instruction Set Architecture III - 논리연산 & Data Transfer 연산 (0) | 2022.10.12 |
---|---|
[2.2] MIPS Instruction Set Architecture II - 비트 포맷 및 산술 연산 (0) | 2022.10.12 |
[1] System Software & Instruction Set Architecture (0) | 2022.10.12 |
[3.2] Procedure Call in MIPS II (0) | 2022.10.02 |
[3.1] Procedure Call in MIPS I (프로그램의 메모리 주소 공간 구조) (0) | 2022.10.02 |
댓글