Encode different instruction by 4 bits
| ALU control | Function |
|---|---|
| 0000 | AND |
| 0001 | OR |
| 0010 | add |
| 0110 | subtract |
| 0111 | set - on - less - than |
| 1100 | NOR |
R-type
| 0 | rs | rt | rd | shamt | funct |
|---|---|---|---|---|---|
| 31:26 | 25:21 | 20:16 | 15:11 | 10:6 | 5:0 |
Load / Store
| 35 or 43 | rs | rt | address |
|---|---|---|---|
| 31:26 | 25:21 | 20:16 | 15:0 |
Branch
| 35 or 43 | rs | rt | address |
|---|---|---|---|
| 31:26 | 25:21 | 20:16 | 15:0 |

opcode(instruction[31-26])을 통해 RegDst, Branch, MemRead, MemtoReg, ALUOp, MemWrite, ALUSrc, RegWrite 값을 결정하는 Control을 추가하였다.
기능
| 신호 이름 | 인가되지 않은 경우(0) | 인가된 경우 (1) |
|---|---|---|
| RegDst | rt가 Write register 가 된다 | rd가 Write register가 된다 |
| RegWrite | Nothing | Write register에 Write data 를 쓴다 |
| ALUSrc | Read data2가 ALU의 두 번째 operand가 된다 | 하위 16비트(instruction[15:0])가 sign extend된 값이 ALU의 두 번째 operand가 된다 |
| PCSrc (branch && zero) | PC + 4가 새로운 PC값이 된다 | branch target이 새로운 PC 값이 된다. PC + 4 + target |
| MemRead | Nothing | address 입력이 지정하는 데이터 메모리 내용을 Read data 출력으로 내보낸다 (???) |
| MemWrite | Nothing | address 입력이 지정하는 데이터 메모리 내용을 Write data 입력 값으로 바꾼다 |
| MemtoReg | ALU 출력이 레지스터의 Write data 입력이 된다 | 데이터 메모리 출력이 레지스터의 Write data 입력이 된다 |
add rd, rs, rt

control signal
| signal | value | description |
|---|---|---|
| RegDst | 1 | rd를 select한다 |
| RegWrite | 1 | rd에 write가 가능하게 한다 |
| ALUSrc | 0 | rt가 ALU의 두 번째 operand가 되게 한다 |
| ALUOp | OP | to select an appropriate operation for ALU |
| MemRead | 0 | memory를 읽지 못하게 한다 |
| MemWrite | 0 | memory에 쓰지 못하게 한다 |
| MemtoReg | 0 | ALU의 출력이 register에 write하는 값이 되게 한다 |
| PCSrc | 0 | 다음 PC를 선택한다 |
lw rt, rs, imm

control signal
| signal | value | description |
|---|---|---|
| RegDst | 0 | rt에 write할 준비를 한다 |
| RegWrite | 1 | rt에 쓸 수 있게 한다 |
| ALUSrc | 1 | ALU의 두 번째 operand로 immediate을 선택한다 |
| ALUOp | OP | add |
| MemRead | 1 | reading memory가 가능하게 한다 |
| MemWrite | 0 | writing memory는 불가능하게 한다 |
| MemtoReg | 1 | 메모리의 출력을 레지스터에 write하게 한다 |
| PCSrc | 0 | 다음 PC를 선택한다 |
sw rt, rs, imm
control signal
| signal | value | description |
|---|---|---|
| RegDst | X (Don't care) | Not used |
| RegWrite | 0 | writing register가 불가능하게 한다 |
| ALUSrc | 1 | ALU의 두 번째 operand로 immediate을 선택한다 |
| ALUOp | OP | add |
| MemRead | 0 | reading memory가 불가능하게 한다 |
| MemWrite | 1 | writing memory가 가능하게 한다 |
| MemtoReg | X (Don't care) | Not used |
| PCSrc | 0 | 다음 PC를 선택한다 |
beq rs, rt, imm

control signal
| signal | value | description |
|---|---|---|
| RegDst | X (Don't care) | Not used |
| RegWrite | 0 | writing register가 불가능하게 한다 |
| ALUSrc | 0 | ALU의 두 번째 operand로 rt를 선택한다 |
| ALUOp | OP | sub |
| MemRead | 0 | reading memory가 불가능하게 한다 |
| MemWrite | 0 | writing memory가 불가능하게 한다 |
| MemtoReg | X (Don't care) | Not used |
| PCSrc | 1 | PC + 4 + target으로 이동한다 |

| 000010 (2) | address |
|---|---|
| 31:26 | 25:0 |
(ppt)
(교재)
(그림)
control signal
| signal | value | description |
|---|---|---|
| RegDst | X (Don't care) | Not used |
| RegWrite | 0 | writing register가 불가능하게 한다 |
| ALUSrc | X | Not used |
| ALUOp | X | Not used |
| MemRead | 0 | reading memory가 불가능하게 한다 |
| MemWrite | 0 | writing memory가 불가능하게 한다 |
| MemtoReg | X (Don't care) | Not used |
| PCSrc | X | Not used |
| Jump | 1 | to select next PC |