Kim Seon Deok

[컴퓨터 구조] 2-2. MIPS 본문

컴퓨터 구조

[컴퓨터 구조] 2-2. MIPS

seondeok 2022. 11. 11. 21:51

 

 

 

 

MIPS는 16비트의 ARM 과는 다르게 32비트를 사용한다.(레지스터 32개)

 

 

MIPS displacement Addressing

MIPS는 RICS 타입이기 때문에 메모리를 직접 액세스 하는 것은 load,store밖에 없다.

워드는 항상 4의 배수로 align되므로 데이터가 한꺼번에 오갈 수 있는 양은 32비트이다.

주소의 단위는 byte이다. MIPS에서 32비트 레지스터는 메모리와 데이터를 주고받아야 하기때문에, 메모리 또한 32비트의 폭을 가지고 있어야 한다.

예를 들어 3번지 메모리를 레지스터로 읽어온다면, 3번부터 시작해서 4바이트 즉, 3,4,5,6을 읽어와야 한다.

하지만 이렇게 되면 데이터가 연결된 위치의 자리가 바뀌게 되고 구현이 복잡해지기 때문에 성능이 느려지게 된다.

따라서 word 단위 엑세스는 4의 배수로만 하도록 align을 맞춘다.

 

 

 

MIPS instruction set

LOAD : 레지스터2에 있는 메모리 주소로부터 20비트 떨어진 위치에서 1word를 가져와 1번 레지스터에 로드

STORE : 레지스터2에 있는 값 메모리 주소로 보고 그 위치로부터 20만큼 떨어져있는 주소에 s1을 가져다 놓음

beq : 2개의 레지스터를 비교해보고 2개가 같다면 (뺄셈 결과 : 0) 현재 PC값에서 100개의 명령어를 jump

jump : PC에 10000(2500*4)값을 집어넣음

 

 

 

 

MIPS register model

- 단순하고 일반적인 것을 빠르게 만들고자 하는 디자인 법칙에 따라 레지스터 0번을 굉장히 자주 사용하는 숫자 0으로 고정함

- 부동소수점연산을 하기 위한 레지스터가 별개로 있다.

- HI와 LO를 사용해 반복적인 곱셈과 나눗셈을 해결한다.

 

 

 

 

 

MIPS register naming

 

MIPS레지스터 32개

1번 레지스터는 어셈블러 전용으로 예약되어 있고

26, 27번 레지스터는 os kernel로 운영체제가 사용하는 레지스터이다.

 

 

 

 

 

MIPS memory model

메모리 주소 : 0x00000000 ~ 0xffffffff

16진수 1자리는 4비트이므로 전체적인 주소공간은 32비트가 되어 총 4G만큼의 addressable space를 가진다.

 

 

MIPS R-format instructions

op rs rt rd shamt funct
6비트 5비트 5비트 5비트 5비트 6비트

op : operation code(opcode)

rs : first source register number

rt : second source register number

rd : destination register number

shamt : shift amount

funct : fuction code

 

 

 

MIPS instructions

- arithmetic / login instructions

  •    3 operand format : result and two sources
  • registers, 16 immediate
  • compare operations

- data transfer(Load/ store)

- Conditional branch instructions 

- Unconditional jump instructions : switch case, for, while, go to

- iteratice in hardware

- uses HI and LO registers that must be explicitly accessed

 

ARM instruction format에서 레지스터 하나를 가리키기 위해 32비트의 레지스터를 사용했고 instruction 중 4비트를 할당했다. MIPS의 경우 레지스터 필드하나를 가리키기 위해 5비트가 필요하다. MIPS에서 1word = 32비트

 

 

Add operation

op rs rt rd shamt func
6비트 5비트 5비트 5비트 5비트 6비트
add    rd, rs, tr
IR     <- mem[PC] ; //PC가 가리키는 메모리 주소번지로부터 1word를 읽어서 IR로 가져옴
R[rd]  <- R[rs] + R[rt] ;
PC     <- PC + 4; // 프로그램 1줄은 4바이트. 메모리주소는 바이트단위주소이므로  PC값 4바이트만큼 증가

 

 

Sub operation

op rs rt rd shamt func
6비트 5비트 5비트 5비트 5비트 6비트

Sub은 Add와 다르게 2의보수를 취한다.

sub     rd, rs,rt
IR     <- mem[PC];
R[rd]  <- R[rs] + -R[rt] + 1 ;  // 2의 보수
PC     <- PC + 4;

 

lw operation

op rs rt immediate
6비트 5비트 5비트 16비트
lw    rt, rs, imm16  
IR      <- mem[PC] ;  // PC가 가리키는 메모리주소번지에 있는 값을 끄집어내서 IR에 로드
Addr    <- R[rs]+signExt(imm16) ;  //  signExt : 16비트를 signextension해서 32비트로 확장. 액세스할 주소에 있는 값 꺼내서 rt에 로드
R[rt]   <- mem[Addr] ;  // 메모리 주소번지가 가리키는 주소의 메모리 값을 가져와서 rt에 넣음
PC      <- PC + 4 ;

rs가 갖고있는 메모리주소로 가서 immediate값이 가리키는 만큼 더 가서 그 메모리 주소값을 가져와 rt에 넣음

addr : 액세스할 주소 

 

 

 

sw operation

op rs rt immediate
6비트 5비트 5비트 16비트

 

sw          rt, rs, iimm16
IR          <- mem[PC];
addr        <-  R[rs] + signExt(imm16);
mem[addr]   <- R[rt];  // rt에 있는 값 어드레스 메모리가 가리키고 있는 곳으로 스토어
PC          <- PC + 4;

 

beq operation

op rs rt immediate
6비트 5비트 5비트 16비트
beq    rt, rs, immm16   //  rt, rs를 비교해서 값이 같으면 imm16만큼 뜀
IR     <- mem[PC];    // PC가 가리키는 메모리 주소에서 IR을 가져옴
Cond   <-  R[rs] + -R[rt] + 1;  //  2의보수
PC     <- Cond ? PC + 4 ; PC + 4 + (signExit(imm16) << 2)  // 2번 왼쪽 시프트. 즉 4배

 

PC값은 Cond값에 따라 달라지는데 Cond 값이 0이 아니면 PC + 4, 0이면 PC + 4 + imm16

beq  $1, $2, 100  if($1 == $2)  PC <- PC + 4 + 100 (field = 25)

명령어 1개는 4바이트이다. imm16값은 100으로 이는 점프할 명령어의 개수이다.

따라서 바이트로 묶으면 field = 25(25 * 4 = 100)

 

 

 

 

 

MIPS addressing mode

 

1. Immediate addressing : ADD, SUB의 immediate

2. Register addressing : 3개의 레지스터를 지정. ADD, SUB

3. Base addressing : LOAD, STORE(rs : base address)

LOAD - 액세스 결과값 rt로 가져다놓음

STORE - 액세스 결과값 메모리로 가져다 놓음

4. PC-relative addressing : BEQ (shift left2를 해서 현재 PC값과 더해 얼마만큼 뛰어야 할 지 결정)

5. Procedure addressing

op - 6비트. address - 26비트.  

opcode가 6비트기 때문에 나머지 26비트로 액세스하게 되다 보니 비트수가 모자라다.

따라서 현재 PC에서 나머지 6비트를 가져와 붙여서 새로운 메모리주소를 만들어야 한다.

 

 

 

ARM & MIPS similarities

ARM과 MIPS는 모두 4기가의 Adress space를 가지며 메모리공간이 align되어있고, instruction size가 32비트이다.

ARM의 데이터 어드레싱 모드가 더 다양하고 MIPS는 더 단순한 형태이다.

ARM은 32비트 레지스터 16개, MIPS는 32비트 레지스터 32개를 사용한다.

 

 

 

 

Instruction encoding

ARM은 MIPS와 비슷한 형태이지만 맨 앞에 Cond코드가 추가된 형태이다.

BEQ

ARM : cond + r1+r2+뛰어야 될 양

MIPS : cond + 번지 >> 이전에 산술연산한 결과로 돌아가고 cond가 붙어있기 때문에 훨씬 간단.

 

 

 

 

 

출처 : https://www.cs.fsu.edu/~hawkes/cda3101lects/chap3/index.html?$$$F3.13.html$$$https://www.academia.edu/30985916/Instruction_Set_Mips

https://eeinger.tistory.com/2

 

[컴퓨터 구조]Addressing Mode 종류

Addressing Mode 종류 nImmediate : operand = in the instruction.=> I - format을 사용하여 immediate에 있는 값을 바로 씀.(주소 필요없음)사용하는 instruction : addi, subi, ori, andi, slti ... (끝에 i붙은것)nRegister : operand = [R

eeinger.tistory.com

 

 

 

 

 

 

Comments