<aside> 💡 목차
</aside>
<aside> 💡 MIPS는 레지스터-레지스터 아키텍처를 사용하는
RISC(Reduced Instruction Set Computer) 명령어 집합 구조입니다.
→ RISC는 복잡한 명령어를 여러 개의 단순한 명령어로 수행하여, 성능을 향상시키고 설계를 단순화하는 것을 목표로 합니다.
ARM, apple M1, PISK5 가튼 오픈 하드웨어가 바로 MIPS로 설계되었습니다.
</aside>
<aside> 💡 해당 수업에서는 GP만 가지고 수업합니다.
32개의
범용 레지스터(GP)$_{32bit}$와 (데이터를 임시로 저장하는 데 사용됩니다) 32개의부동 소수점 레지스터(FP)$_{32bit}$로 구성됩니다.
MIPS 레지스터 모델에서 32개의 32비트 부동 소수점 레지스터 중 2개를 묶어 하나의 64비트 부동 소수점 레지스터로 사용할 수 있습니다.
</aside>
<aside> 💡 MIPS는 다음을 숙지해야한다
MIPS는 언어$_{ISA}$를 고려하지 않아
MIPS는 복잡성의 차이를 고려하지 않아
MIPS는 CPU나 프로그램에 따라 다르게 측정될 수 있어
MIPS는 명령어의 개수만을 고려하므로, 명령어를 단순화하면 하나당 시간은 줄어들지만 명령어의 수는 증가합니다
→ 이로인해 MIPS 값이 커질 수 있음
</aside>
<aside> 💡 범용 레지스터 GP와 필수 레지스터들의 구조및 크기
0 |
0 상수 고정 | |
|---|---|---|
1 |
0~31 | |
~ |
범용 레지스터 GP 영역 | 32bit |
31 |
각 비트당 32bit | |
PC |
다음에 실행할 명령어 저장 | 32bit |
LO |
곱셈 나눗셈 하위 32비트 | 32bit |
HI |
곱셈 나눗셈 상위 32비트 | 32bit |
각 레지스터는 32비트씩 값을 가짐
MIPS는 레지스터-레지스터 아키텍처입니다.
즉, 메모리에 접근하는 로드/스토어(load/store) 명령어를 제외한 모든 명령어가 레지스터에서 동작합니다. 이렇게 하면 메모리 접근이 줄어들어 성능이 향상됩니다.
</aside>
GP 범용 레지스터이 중 $0 레지스터는 항상 0을 저장하고 있습니다.
컴퓨터를 사용하다보니, 가장 많이 사용되는 숫자는 다름아닌 0이었기 때문에, 어딘가에 저장되어있는 0이라는 숫자를 꺼내는것보다, 그냥 레지스터에 상수로 0을 박는게 더 합리적인 선택이었습니다.
PC 다음 실행할 명령어의 주소 레지스터
PCProgram Counter는 다음에 실행할 명령어의 주소를 저장합니다. PC = 명령어를 실행할 위치를 가르키는 포인터 포인터도 값을 가지기에 레지스터 영역을 차지함예를 들어, A가 B에게 인사를 하면 B는 A에게 인사를 돌려줄 것입니다. 그러나 A가 B에게 인사를 하지 않으면 B도 A에게 인사를 하지 않을 것입니다. 분기와 프로시저 호출을 제외하고는 PC가 보이지 않아 상대방에게 영향을 주지 않는다는 의미는 이와 같습니다.
LO와 HI 곱셈과 나눗셈을 위한 레지스터
LO와HI레지스터는 반복적인 곱셈과 나눗셈을 위해 사용됩니다. LO 레지스터는 하위 32비트 결과를 저장하고 ****HI 레지스터는 곱셈이나 나눗셈의 상위 32비트 결과를 저장합니다큰 두 숫를 더해도, 자리수가 크게 변하지 않지만, 큰 두 수를 곱하면 자리수가 크게 변한다. 32bit * 32bit 를 하면 64bit가 필요해지는 경우가 생겼다.또 나누기를 할 때 나머지 몫과 결과 두개의 결과가 담겨야하니 LO, HI 두 값을 이용하여 값을 저장한다. 예를들어 10 / 3 을 할 때, 나눈 값인 3과 나머지값 1을 데이터에 담아야하니 두 레지스터 값을 이용하는것이다.
<aside> 💡 즉, LO , HI 레지스터를 사용하는 이유는 오버&언더플로우 처리를 위한것
HI 및 LO 레지스터를 사용하는 주된 이유는 큰 숫자에 대한 산술 연산을 수행할 때 오버플로 또는 언더플로의 가능성을 처리하기 위한 것 (곱하기 - 오버 / 나누기 - 언더)
→ 32비트를 초과하는 결과는 HI LO 나눠서 저장하자!
</aside>
질문!!! 10 / 3 하면 몫이 3 나머지가 1인데, HI에 3이 저장되고, LO에 1이 저장되는것이 맞습니까?
아니다!!!!→ 몫이 LO
→ 나머지 HI
반대로 구현해도 상관은 없으니 외우지는 마라
| 속성 | 범용 레지스터(GP) | PC | HI, LO 레지스터 | |
|---|---|---|---|---|
| 용도 | 데이터 임시 저장 | 다음에 실행할 명령어의 주소 저장 | 반복적인 곱셈과 나눗셈 | |
| 크기 | 32개의 32비트 | 32비트 | 32비트 | |
| 사용 범위 | 모든 명령어 | 모든 명령어 | 곱셈 및 나눗셈 명령어 | |
| 이름,위치 | $0, $1 ~ $31 |
$PC |
$LO , $HI |
~~$f0, $f1 ~ $f31~~ |
| 사용 예 | 함수의 인수와 반환 값 저장, 임시 데이터 저장 | 곱셈 및 나눗셈의 결과 저장 | ||
| 기타 | 범용 레지스터는 MIPS의 레지스터 파일에서 가장 많이 사용되는 레지스터입니다. | PC는 CPU가 다음에 실행할 명령어의 주소를 가리키는 데 사용됩니다. | LO : 하위 32비트 | |
| HI : 상위 32비트 |