오래 못 할 짓 하지 않기

[ 컴퓨터 구조 ] 4. MIPS 에 관하여 본문

2학년 2학기/컴퓨터 구조

[ 컴퓨터 구조 ] 4. MIPS 에 관하여

쫑알bot 2023. 9. 17. 22:18
728x90
  • MIPS 의 목적

1) Performance를 최대화

2) 비용 최소화

3) design 시간 줄이기

 

 

 

  • Register 관련해서 4가지 종류가 있다.

1) 일반적인 목적 

: 주소나 값들 갖고 있는 목적 , 주로 Int관련 register 

32 * 32 bits 레지스터 : 32개의 레지스터, 각각 32비트를 갖고 있다.

+ 0번(첫 번째) 레지스터는 항상 0을 가지고 있다!

 

 

2) 소수 관련 목적

: 소수점 아래를 32비트씩 나눠 가져가서 계산함

 

 

 

3) HI(32bits) LO(32bits)

: 나누기와 곱하기 관련 연산

32비트 * 32비트 곱하기를 하면, 자리수가 넘칠 수가 있다.

높은 쪽 32비트는 HI가 커버하고, 그 아래는 LO가 커버한다.

 

나누기에서는 HI에는 몫, LO에는 나머지를 넣는다.

 

 

4) PC (program counter)

: 머신의 Instruction을 읽어들이는 register

 

 


 

MIPS Design Principles

 

1) Simplicity favors Regularity

    간단하게 하려면, 규칙이 있어야 한다.

 

한 Operation에 몇 개의 Operator를 넣을지 (규칙을)정해야 식을 간단하게 보기 편하다.

MIPS의 목적을 달성하기 위해!!

 


 

 

2) Smaller is faster

 

MIPS 는 32개의 Register만 사용가능하다.

   - 많아지면 Propagation Delay가 길어지면서 CLK Cycle도 길어지기 때문에

      작은 단위로 돌리는 게 더 빠를 수가 있다.

 

   - Register에 접근할 때, Decoder를 사용하여 접근한다. 근데 5*2^5 Decoder와 6*2^6 Decoder중 어느 것이 계산 결과를 빨리 내어줄까? 

 

Register가 32개가 속도,계산 갯수 단위로 제일 합리적이다.

 


 

3) Make common case fast

 

Constants 자주 쓰이는 상수들에 관해서 어떻게 처리할까 생각중...

 

1) Memory access는 시간이 좀 걸린다. 

2) Register 에 넣는다 → 0번 Register에 0을 넣는 건 ㅇㅋ, 근데 어떤 게 많이 자주 쓰이는지 어떻게 알 수 있냐?

 

 

해결법 : Instructions 안에 넣는다!

Immediate 가 이러기 위해 존재

 

자주 일어나는 일을 빠르게 처리하는 방식으로 만들면 성능이 향상된다! 

 

 

 


 

4) Good design demands a compromise.

서로 합의가 되어있어야 그 안에서 이쁜 구상을 할 수 있다.

 

위와 같이 2진수 코드로(Machine Language) 만들어 졌을 때는 

32비트가 한 Instruction을 나타내고, 그 구성이 저렇게 나누어져 있다는 합의를 한 것이다.

 

 

R-type은 이런 Format을 가진다! 

 

type마다 다름.

 

 

 

 

연습문제!

 

더보기

priciple1 - 2

priciple2 - 1

priciple3 - 3

priciple4 - 4

 

 


MIPS Instruction

 

  • 기본적으로 있어야 하는 것들

- Arithmetic / Logic

- Data Transfer ( MEM → Register(CPU) )

- Control

 

 

1. Arithmetic 

1) ADDI = s1 register에 있는 값 + 100 의 값의 주소에 있는 데이터를 s0 register에 넣어라 

2) MF@@( Move From @@)

 

 

+ Logical

1) ANDI , ORI도 가능

 

위에 있는 Inst를 조합해서 없는 Inst도 만들 줄 알아야 한다. 

 

밑에 Question 답

더보기

S1 과 S2에 대한 진리표를 만든다

> 그 결과 T에 대한 값도 넣는다

> 그 T에 대한 NOR을 한다.

문제 2)

더보기

ADD t0 s0 s1

ADD t1 s2 s3

SUB s4 t0 t2 

 

 


2. Data Transfer

 

- 데이터를 메모리에서 Register로 가져오는 명령어

- MIPS에서는 Memory Access 관련된 명령어가 2개 밖에 없다 : LW / SW

         * ADD S1 S3 S5 ( 얘네는 레지스터에 access하는 것)

 

Word 단위로 가져오기 때문에  4개의 byte로 가져온다.

Immediate 로 32인 이유 : A[8] = word 단위로 8개 = 4*8 = 32.

s3 주소에서 +32 

 

+ SW는 Source 가 먼저, Destination이 뒤에 온다. 

 

(다음 과제가 이런 식이라고 하셨음)

더보기

 

우선 이 배열의 시작은 A[0] = $s0 , A[3] = $s0 +12

연산 할 것은 A[1] = A[3] +3; 

lw $t0 , 12($s0)   ← t0 레지스터에 s0+12 주소에 있는 A[3]를 가져온다

addi $t2 , $t0 ,3   ← t2 레지스터에 t0레스터의 값에 3을 더한 결과를 넣는다.

sw $t2, 4($s0)     ← t2 레지스터의 값을 s0+4 주소에 있는 A[1]에 넣는다.

 

 

3. Control Instructions

 

MIPS에 Branch Inst는 두 가지 종류가 있다.

 

1) Conditional Branch : BEQ(같으면) / BNE(같지 않으면) / SLT / SLTI

 

- BEQ 명령어 구성

 

S1, S2가 같으면, Label 로 (그냥 함수 이름이라고 생각하면 됨) 가서 branch해야하는데 

현재 위치와 branch하는 곳의 차이를 계산함. PC 값을 Label 까지의 word간격으로 계산한다.

 

- BNQ 명령어 구성

 

- slt 명령어 구성

set if less than : 작으면 destination 의 값을 0이나 1로 해라

s1의 값 < s2의 값 이면 t1 = 1 or t0 = 0 

 

 

 

(연습)

이거 양쪽으로 왔다갔다 할 줄 알아야 함!

 

 

Exercise

 

 

 

 

2) Un  ""        " "           : J(ump) / JR(Jump Register) / JAL 

 

- JUMP

word address로 위치를 표현한다~!, direct address이다.

+ PC값을 TargetAddress로 바꾼다 정도만 알면 됨

PC = TargetAddress

 

- JUMP Register

마지막 register의 값을 PC값으로 바꾼다!

PC = ra

 

- JUMP and Link

레지스터에 PC값을 저장해두고,

PC에는 TargetAddress값을 넣는다.

 

ra =PC

PC = TagetAddress

 


(출처) 

 

한동대학교 용환기교수님 - 컴퓨터구조 

 

 

 

'2학년 2학기 > 컴퓨터 구조' 카테고리의 다른 글

[ 컴퓨터 구조 ] # Qtspim  (0) 2023.09.21
컴구 quiz 대비  (0) 2023.09.21
[ 컴퓨터 구조 ] 3. Instruction Set Completeness  (0) 2023.09.11
[ 컴퓨터 구조 ] 2. Addressing Mode  (0) 2023.09.07
컴퓨터 구조 1  (0) 2023.09.01