🎵 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