RISC : Reduced Instruction Set Computer
CISC : Complex Instruction Set Computer
Add and subtract, three operands
operator vs operatand ?
Two sources and one destination
add a, b, c : b와 c를 더해서 그 합을 a에 넣어라.
Design Principle 1 : Simplicity favours regularity
(간단하기 위해서는 규칙적인 것이 좋다)
C code vs Compiled MIPS code
f = (g + h) - (i + j)
add t0, g, h // temp t0 = g + h
add t1, i, j // temp t1 = i + j
sub f, t0, t1 // f = t0 - t1
What register means?
MIPS has a 32 x 32-bit register file
Numbered 0 to 31
32-bit data called a 'word'
- MIPS 구조에서 레지스터의 크기는 32비트이다
- MIPS에서는 32비트가 한 덩어리로 처리되는 일이 매우 빈번해서 이를 워드라고 부른다
- 레지스터의 개수는 한정되어 있고, 보통 32개의 레지스터가 있다.
$t0 ~ $t9 for tempeorary values. (저장하기 위한)
$s0 ~ $s7 for saved variables.
This register names map to real register
Design Principle 2 : Smaller is faster
(작은 것이 더 빠르다)
f = (g + h) - (i + j);
add $t0, $s1, $s2
add $t1, $s3, $s4
sub $s0, $t0, $t1
g = h + A[8];
lw $t0, 32($s3) # load word
add $s1, $s2, $t0
- 피연산자 중 하나(A[])가 메모리에 있기 때문에, 먼저 A[8]을 레지스터로 옮긴 후, 연산을 시작해야 한다.
- 배열 원소의 주소는 $s3에 있는 배열의 시작 주소에 32를 더한 값이다. 이 상수 부분을 변위(offset)라고 한다. 또한, 주소 계산을 위해 여기에 더해지는 레지스터 $s3를 base register라고 한다.
A[12] = h + A[8]
lw $t0, 32($s3) # temporary reg(?) $t0 gets A[8]
add $t0, $s2, $t0 # temporary reg(?) $t0 gets h + A[8]
sw $t0, 48($s3) # store h + A[8] back into A[12]
레지스터는 메모리보다 접근시간이 짧고 처리량도 많다
addi $s3, $s3, 4
addi $s2, $s1, -1
Design Principle 3 : Make the common case fast
(자주 생기는 일을 빠르게 하라)
add $t2, $s1, $zero
Given n-bit number, range : 0 to
Using 32 bits, 0 to 4,294,967,295
Given n-bit number, range : to
Using 32 bits, -2,147,483,628 to +2,148,483,647
Bit 31 is sign bit
Non-negative numbers have the same unsigned and 2's complement representation.
0 : 0000 0000 ... 0000
-1 : 1111 1111 ... 1111
Most-negative : 1000 0000 ... 0000
Most-positive : 0111 1111 ... 1111
x + x바 = 1111...111 => -1 x바 + 1 = -x
+2 = 0000 0000 ... 0010 -2 = 1111 1111 ... 1101 + 0000 0000 ... 0001 = 1111 1111 ... 1110
Byte = 8bits
Halfword = 16bits
Word = 32 bits
Doubleword = 64 bits
Quadword = 128 bits