Kim Seon Deok
[컴퓨터 구조] 2-2. MIPS 본문
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
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
'컴퓨터 구조' 카테고리의 다른 글
[컴퓨터 구조] 4-3. Pipeline Processor (0) | 2022.11.13 |
---|---|
[컴퓨터 구조] 4-2. Multiple - Cycle Processor (0) | 2022.11.12 |
[컴퓨터 구조] 4-1. Single - Cycle Processor (0) | 2022.11.12 |
[컴퓨터 구조] 2-1. ARM (0) | 2022.11.10 |
[컴퓨터 구조] 1. Abstraction and Computer tech (0) | 2022.11.04 |