🎵 Red Hot Chili Peppers - Can't Stop
🎶 Guns N' Roses - Sweet Child O' Mine
| 의미 | Instructions |
|---|---|
a = b+c | add a, b, c |
a = b+c+d+e | add a,b,c |
| add a,a,d | |
| add a,a,e | |
f = (g+h)-(i+j) | add t0, g, h |
| add t1, i, j | |
| sub f, t0, t1 |
| 역할 | add a, b, c 수행 시 | |
|---|---|---|
| Registers | Operand의 값 저장 | a, b, c 값 저장 |
| ALU (Arithmetic Logic Unit) | Operation 수행 | add 등의 연산 |
| Control Unit | ALU와 register 동작 제어 | order add to ALU |
| No. | Name | Purpost |
|---|---|---|
| 0 | $zero | 0 |
| 2-3 | v1 | return value |
| 4-7 | a3 | Arguments (params) |
| 8-15 | t7 | temporaries |
| 16-23 | s7 | saved |
| 24-25 | t9 | temporaries |
| 28 | $gp | global pointer |
| 29 | $sp | stack pointer |
| 30 | $fp | frame pointer |
| 31 | $ra | return address |
| 의미 | Instructions |
|---|---|
f = (g+h)-(i+j) | add t0, g, h |
| add t1, i, j | |
| sub f, t0, t1 |
f, g, h, i, j - $s0 ~ $s3에 할당
$s: 메모리에 저장
| 의미 | Instructions |
|---|---|
g = h + A[9] | lw s3) |
| add $s1, $s2, $t0 |
$s1 = g
$s2 = h
$3 = Base Addr of arr A
| Data Size | load | store | offset 단위 | A[8]접근 |
|---|---|---|---|---|
| Word | lw | sw | 4 | 32($3) |
| Half Word | lh | sh | 2 | 16($s3) |
| Byte | lb | sb | 1 | 8($s3) |
Operand 하나가 상수일 경우
| 구분 | 필요 Inst |
|---|---|
| 4를 변수에 넣고 a과 합산 | 변수에 4할당 -> load var -> add |
| 4 to a | add only |
상수 Operand지원
addi: add immediate
addi $s3, $s3, -4 subtract immediate 지원 불가
write 불가능
1. add $t2, $s1, $zero means $t2 = $s1
2. nor $t2, $s1, $zero means ~$s1
Instruction: HW를 위한 명령어
Instruction Set:
MIPS ( Microprocessor w/o Interlocked Pipeline Stages )
| 구분 | Desc. | Instructions |
|---|---|---|
| Arithmetic | 산술 연산 | add, addi, sub |
| Logical | bit-by-bit AND, OR, NOR 등의 bitwise 논리연산 | andi, ori, nori, sll, srl |
| Data Transfer | 레지와 멤 간의 데이터 이동 | lw, lh, lb, sw, sh, sb |
| Branch/Jump | Instruction흐름의 변경 | |
| - Conditional branch: 조건에 따른 흐름 변경 | beq, bne, slt, slti, j, jr, jal | |
| - Unconditional Jump: 무조건 흐름 변경 |
** Arithmetic And Logical Operaion are Data Procession
| Ops | C | MIPS |
|---|---|---|
| Shift Left | << | sll |
| Shift Right | >> | srl |
| Bitwise AND | & | and, andi |
| Bitwise OR | | | or, ori |
| Bitwise NOT | ~ | nor |
not 표현: nor $s1, $s2, $zero: $s1 = ~($s2|$zero) = ~$s2
| load | store | note | |
|---|---|---|---|
| byte ops | load byte (lb) | store byte (sb) | sign-extension |
| halfword ops | load halfword (lh) | store halfword (sh) | sign-extension |
| unsigned byte ops | load byte unsigned (lbu) | ||
| unsigned halfword ops | load halfword unsigned (lwu) |
lui $40, 61 ➡️ $s0 = 61 << 16
to
ori $s0, $s0, 2304 ➡️ $s0 = $s0 | 2304
immediate 연산은 16-bit 데이터만을 표현
ori $s1, $zero, 100 to $s1 = 100