Professional Documents
Culture Documents
Chap3 MIPS
Chap3 MIPS
Chap3 MIPS
fit@hcmus
fit@hcmus
REMIND
£ ISA
£ RISC vs CISC
fit@hcmus
PREREQUITES
£ Address, index
£ Byte addressing
£ Little/ Big Endian byte order
£ MIPS addressing mode
fit@hcmus
Address/ Index
Bit 31
Bit 0
Bit 0
Big-endian Little-endian
00 00 07 E4 E4 07 00 00
fit@hcmus
fit@hcmus
Instruction Format
op rs rt rd sh fn
31 25 20 15 10 5 0
R 6 bits 5 bits 5 bits 5 bits 5 bits 6 bits add $t0, $t0, $t1
Opcode Source Source Destination Shift Opcode
register 1 register 2 register amount extension
op rs rt operand / offset
31 25 20 15 0
I 6 bits 5 bits 5 bits 16 bits
addi $t0, $t0, 5
Opcode Source Destination Immediate operand lw $t1, 8($t0)
or base or data or address offset
bne $t0, $t1, Label
op jump target address
31 25 0
J 6 bits 1 0 0 0 0 0 0 0 0 0 0 0 26
0 bits
0 0 0 0 0 0 0 1 1 1 1 0 1 j Label
Opcode Memory word address (byte address divided by 4)
I-format
fit@hcmus
MIPS addressing mode R-format
o Pseudo-direct addressing
fit@hcmus
fit@hcmus
MIPS Operations
£ Arithmetic
£ Logical
£ Data transfer
£ Branch (Unconditional/ conditional)
fit@hcmus
Arithmetic operations
C code:
A=B + C
C code:
f = (g + h) – (i + j)
C code:
a = b
MIPS code:
add $t1, $t0, $zero # a " $t1, b " $t0
#$zero contains the constant value 0
fit@hcmus
Arithmetic operations: Multiply & Division
£ Two 32-bit registers for product
HI: most-significant 32 bits
LO: least-significant 32-bits
£ Use HI/LO registers for
result
rs rt HI LO p HI: 32-bit remainder
p LO: 32-bit quotient
remainder quotient £ Use mfhi, mflo instructions
to access the result
rs rt HI LO
fit@hcmus
Arithmetic operations: Multiplication
Syntax 1: mult rs, rt / multu rs, rt
mflo rd
Syntax 2: mul rd, rs, rt
Single-precision:
add.s $f0, $f1, $f2
Double-precision:
£ Arithmetic
£ Logical
£ Data transfer
£ Branch (Unconditional/ conditional)
fit@hcmus
Logical Operations
£ Arithmetic
£ Logical
£ Data transfer
£ Branch (Unconditional/ conditional)
fit@hcmus
Data transfer
41
fit@hcmus
Data transfer operations
42
fit@hcmus
Data transfer operations
lw rt, offset(rs) # load a word at the
address $s0 + 12 from the memory
sw rt, offset(rs) # store a word to the
memory at the location $s0 + 12
43
fit@hcmus
Example
45
fit@hcmus
Discussions
46
fit@hcmus
Discussions
47
fit@hcmus
fit@hcmus
MIPS Operations
£ Arithmetic
£ Logical
£ Data transfer
£ Branch (Unconditional/ conditional)
fit@hcmus
Branch operations:
50
fit@hcmus
Branch operations: Conditional branch
Syntax (I-format): oprs , rt , target address
rs: the first source register number
rt: the second source register number
Target Address: the address of the next instruction
beq rs, rt, label #if (opr1 == opr2) goto
label
bne rs, rt, label #if (opr1 != opr2) goto
label
51
fit@hcmus
Example
C Code: MIPS code:
if(a==b) #a " $t0, b " $t1, i " $t2
i = 1; beq $t0, $t1, Label
else addi $t2, $zero, 0
i = 0; Label
addi $t2, $zero, 1
52
fit@hcmus
Branch operations: Unconditional branch
Syntax (J-format): opTarget Address
rs: the first source register number
rt: the second source register number
Target Address: the address of the next instruction
j label #goto label
53
fit@hcmus
Example
C Code: MIPS code:
Do{ #a " $t0
Task 1; Loop:
}while(a!=0) Task 1
Task 2 bne $t0, $zero, Loop
j Task 2
54
fit@hcmus
Discussion
a > b
slt $t0, $s1, $s0 # if (b < a) then $t0 = 1
bne $t0, $0, Label # if (b < a) then goto Label
Another Task # else then do something
Label
56
fit@hcmus
Example
a ³ b
slt $t0, $s0, $s1 # if (a < b) then $t0 = 1
beq $t0, $0, Label # if (a ³ b) then goto Label
Another Task # else then do something
Label
a £ b
slt $t0, $s1, $s0 # if (b < a) then $t0 = 1
beq $t0, $0, Label # if (b ³ a) then goto Label
Another Task # else then do something
Label
57
fit@hcmus
Discussion
f g h i j k
$s0 $s1 $s2 $s3 $s4 $s5 59
fit@hcmus
Example: Switch..case in MIPS
bne $s5, $0, L1 # if (k != 0) then goto L1
Add $s0, $s3, $s4 # else (k == 0) then f = i + j
J Exit # end of case " Exit (break)
L1:
addi $t0, $s5, -1 # $t0 = k – 1
bne $t0, $0, L2 # if (k != 1) then goto L2
add $s0, $s1, $s2 # else (k == 1) then f = g+ h
J Exit # end of case " Exit (break)
L2:
addi $t0, $s5, -2 # $t0 = k – 2
bne $t0, $0, Exit # if (k != 2) then goto Exit
sub $s0, $s1, $s2 # else (k == 2) then f = g - h
Exit:
60
fit@hcmus
fit@hcmus
System calls
62
fit@hcmus
System
calls
63
fit@hcmus
Example
64