Transcript Slide 1

2010 R&E Computer System Education & Research
Lecture 8. MIPS Instructions #1 – Arithmetic and
Logical Instructions
Prof. Taeweon Suh
Computer Science Education
Korea University
MIPS
• Stanford University led by John Hennessy
started work on MIPS in 1981
 John is currently a president of Stanford Univ.
• MIPS has 32-bit and 64-bit versions
 We focus on 32-bit version
• Currently, MIPS is primarily used in many
embedded systems
 Nintendo 64
 Sony Playstation and Playstation 2
 Cisco routers
2
Korea Univ
CISC vs RISC
• CISC (Complex Instruction Set Computer)
 One assembly instruction does many (complex) job
 Variable length instruction
 Example: x86 (Intel, AMD)
• RISC (Reduced Instruction Set Computer)




Each assembly instruction does a small (unit) job
Fixed-length instruction
Load/Store Architecture
Example: MIPS, ARM
3
Korea Univ
• Let’s go over MIPS instructions
 Again, if you completely understand one CPU, it is
pretty easy to understand other CPUs
• For the term project, you should implement the
MIPS ISA into hardware
4
Korea Univ
Overview of a MIPS Operation
(Computer Hardware)
• Every computer must be able to perform arithmetic
• MIPS arithmetic in assembly form
add
R3, R1, R5
# R3 = R1 + R5
• An instruction operates on operands (R3, R1, and R5 are all operands)
• # indicate a comment, so assembler ignores it
 Operands of arithmetic instructions come from special locations called
registers or from the immediate field in instructions
• All CPUs (x86, PowerPC, MIPS…) have registers inside
 Registers are visible to the programmers
• Again, abstraction layer!
• When CPU completes a arithmetic operation (such as addition), its result is stored in a
register
 MIPS has a register file consisting of 32 32-bit registers
5
Korea Univ
Simple Illustration of the CPU Internal
Organization
add
Registers
R3, R1, R5
# R3 = R1 + R5
CPU (MIPS)
32 bits
R0
R1
R2
R1
Memory
Address Bus
R3
…
+
R3
add R3, R1, R5
R5
Data Bus
R30
R31
• What kinds of other instructions do you think CPU should have?
6
Korea Univ
MIPS Register File
• MIPS register file has thirty-two 32bit registers
Register File
 Two read ports
 One write port
32 bits
src1 addr
• Registers are implemented with
flip-flops
src2 addr
5
R0
32 src1
5
R1
R2
data
R3
 For example, one 32-bit register
requires 32 flop-flops
dst addr
• Registers are much faster than
main memory since they reside
inside CPU
write data
5
…
32
R30
32 src2
data
R31
write control
• So, compilers strive to use registers
when translating high-level code to
assembly code
7
Korea Univ
Register File in Verilog
module regfile(input
clk,
input
we,
input [4:0] ra1, ra2, wa,
input [31:0] wd,
output [31:0] rd1, rd2);
Register File
32 bits
ra1[4:0]
reg [31:0] rf[31:0];
//
//
//
//
ra2[4:0]
three ported register file
read two ports combinationally
write third port on rising edge of clock
register 0 hardwired to 0
5
R0
5
R1
R2
32
rd1
32
rd2
R3
wa3
wd3
always @(posedge clk)
if (we) rf[wa] <= wd;
5
…
32
R30
R31
we3
assign rd1 = (ra1 != 0) ? rf[ra1] : 0;
assign rd2 = (ra2 != 0) ? rf[ra2] : 0;
endmodule
8
Korea Univ
MIPS Register Convention
Name
$zero
$at
$v0 - $v1
$a0 - $a3
$t0 - $t7
$s0 - $s7
$t8 - $t9
$gp
$sp
$fp
$ra
Register
Number
0
Usage
constant 0 (hardwired)
Preserve
on call?
n.a.
1
2-3
4-7
8-15
16-23
24-25
28
29
30
31
reserved for assembler
returned values
arguments
temporaries
saved values
temporaries
global pointer
stack pointer
frame pointer
return address
n.a.
no
yes
no
yes
no
yes
yes
yes
yes
9
Korea Univ
MIPS-32 CPU
Registers
• Instruction categories
 Arithmetic and Logical
(Integer)
 Load/Store
 Jump and Branch
 Floating Point
R0 - R31
PC
HI
LO
3 Instruction Formats: all 32 bits wide
opcode
rs
rt
opcode
rs
rt
opcode
rd
sa
immediate
jump target
10
funct
R format
I format
J format
Korea Univ
MIPS Instruction Fields
• MIPS fields are given names to make them
easier to refer to
32-bit
rs
op
rt
rd
shamt
funct
op
6-bits
opcode that specifies the operation
rs
5-bits
register of the first source operand
rt
5-bits
register of the second source operand
rd
5-bits
register of the result’s destination
shamt 5-bits
shift amount (for shift instructions)
funct
function code augmenting the opcode
6-bits
11
Korea Univ
MIPS (RISC) Design Principles
• Simplicity favors regularity
 Fixed size instructions
 Small number of instruction formats
 Opcode always occupies the first 6 bits in instructions
• Smaller is faster
 Limited instruction set
 Limited number of registers in register file
 Limited number of addressing modes
• Make the common case fast
 Arithmetic operands from the register file (load-store machine)
 Allow instructions to contain immediate operands
• Good design demands good compromises
 Three instruction formats
12
Korea Univ
MIPS Essential Instructions
13
Korea Univ
MIPS Instructions
• For the complete instruction set, refer to the
“Appendix B.10 MIPS R2000 Assembly Language”
• For detailed information on the MIPS instruction set,
refer to the Appendix A (page 469) in MIPS R4000
specification linked in the class web
• We are going to cover essential and important
instructions in this class
14
Korea Univ
MIPS Arithmetic Instructions
• MIPS Arithmetic instructions include add, sub,
addi, addiu, mult, div and some more
 Check out the appendix for the list of all arithmetic
instructions
High-level code
MIPS assembly code
compile
# $s0 = a, $s1 = b, $s2 = c
add $s0, $s1, $s2
a = b + c
15
Korea Univ
MIPS Arithmetic Instruction - add
• Instruction format (R format)
add
rd, rs, rt
• Example:
add
$t0, $s1, $s2 # $t0 <= $s1 + $s2
Name
opcode
0
rs
rt
17
18
rd
sa
8
0
funct
32
MIPS architect defines the opcode and function
binary
hexadecimal
Register
Number
$zero
0
$at
1
$v0 - $v1
2-3
$a0 - $a3
4-7
$t0 - $t7
8-15
$s0 - $s7
16-23
$t8 - $t9
24-25
000000
10001
10010 01000 00000
100000
$gp
28
000000
10001
10010 01000 00000
100000
$sp
29
$fp
30
$ra
31
0x0232 4020
16
Korea Univ
MIPS Arithmetic Instruction - sub
• Instruction format (R format)
sub
rd, rs, rt
• Example:
sub $t2, $s3, $s4 # $t2 <= $s3 - $s4
opcode
0
rs
rt
19
20
rd
sa
10
0
funct
34
MIPS architect defines the opcode and function
binary
hexadecimal
Name
Register
Number
$zero
0
$at
1
$v0 - $v1
2-3
$a0 - $a3
4-7
$t0 - $t7
8-15
$s0 - $s7
16-23
$t8 - $t9
24-25
000000
10011
10100 01010 00000
100010
$gp
28
000000
10011
10100 01010 00000
100010
$sp
29
$fp
30
$ra
31
0x0274 5022
17
Korea Univ
Immediate
• R-type instructions have all 3 operands in registers
• Operands could be stored in instructions itself in Itype instructions
 They are called immediates because they are immediately
available from the instructions (I-type)
• They do not require a register or memory access
 16-bit immediate field in MIPS instructions limits values to
the range of (-215 ~ +215–1) since it uses 2’s complement
opcode
rs
rt
immediate
18
I format
Korea Univ
Revisiting 2’s Complement Number
• In hardware design of computer arithmetic, the 2s
complement number provides a convenient and
simple way to do addition and subtraction of
unsigned and signed numbers
• Given an n-bit number N in binary, the 2s
complement of N is defined as
2n – N for N ≠ 0
0 for N = 0
 Example:
• In 4-bit number, 3 is 4’b0011
 2’s complement of 3: 24 -3 = 4’b1101
• A fast way to get a 2s complement number is to flip
all the bits and add “1”.
19
Korea Univ
Number System Comparison with N-bit
Number System
Range
Unsigned
[0, 2N-1]
Sign/Magnitude
[-(2N-1-1), 2N-1-1]
2’s Complement
[-2N-1, 2N-1-1]
• Thus, 16-bit can represent a range of
 Unsigned: [ 0 ~ +(216-1)] = [ 0 ~ +65535]
 Sign/Magnitute: [-(216-1-1) ~ +(216-1-1)] =[-32767 ~ +32867]
 2’s complement: [-216-1 ~ +216-1-1] =[-32768 ~ +32867]
20
Korea Univ
MIPS Arithmetic Instruction - addi
• Instruction format (I format)
addi
rt, rs, imm
• Example:
addi $t0, $s3, -12
#$t0 = $s3 + (-12)
Name
opcode
8
binary
hexadecimal
rs
rt
19
immediate
8
-12
001000
10011
01000 11111 11111
110100
001000
10011
01000 11111 11111
110100
0x2268 FFF4
21
Register
Number
$zero
0
$at
1
$v0 - $v1
2-3
$a0 - $a3
4-7
$t0 - $t7
8-15
$s0 - $s7
16-23
$t8 - $t9
24-25
$gp
28
$sp
29
$fp
30
$ra
31
Korea Univ
MIPS Logical Instructions
• MIPS logical operations include and, andi, or,
ori, xor, nor, sll, slr, sra and some
more
• Logical operations operate bit-by-bit on 2 source
operands and write the result to the destination
register
High-level code
MIPS assembly code
compile
# $s0 = a, $s1 = b, $s2 = c
and $s0, $s1, $s2
a = b & c
22
Korea Univ
AND, OR, and NOR Usages
• and, or, nor
– and: useful for masking bits
•
Example: mask all but the least significant byte of a value:
0xF234012F AND 0x000000FF = 0x0000002F
– or: useful for combining bit fields
•
–
Example: combine 0xF2340000 with 0x000012BC:
0xF2340000 OR 0x000012BC = 0xF23412BC
nor: useful for inverting bits:
•
Example: A NOR $0 = NOT A
23
Korea Univ
Logical Instruction Examples
Source Registers
$s1 1111 1111 1111 1111 0000 0000 0000 0000
$s2 0100 0110 1010 0001 1111 0000 1011 0111
Assembly Code
Result
and $s3, $s1, $s2
$s3
or
$s4, $s1, $s2
$s4
xor $s5, $s1, $s2
$s5
nor $s6, $s1, $s2
$s6
24
Korea Univ
Logical Instruction Examples
Source Registers
$s1 1111 1111 1111 1111 0000 0000 0000 0000
$s2 0100 0110 1010 0001 1111 0000 1011 0111
Assembly Code
Result
and $s3, $s1, $s2
$s3 0100 0110 1010 0001 0000 0000 0000 0000
or
$s4, $s1, $s2
$s4 1111 1111 1111 1111 1111 0000 1011 0111
xor $s5, $s1, $s2
$s5 1011 1001 0101 1110 1111 0000 1011 0111
nor $s6, $s1, $s2
$s6 0000 0000 0000 0000 0000 1111 0100 1000
25
Korea Univ
MIPS Logical Instructions
• Instruction format (R format)
and (or, nor)
rd, rs, rt
• Examples:
and $t0, $t1, $t2
#$t0 = $t1 & $t2
or
#$t0 = $t1 | $t2
$t0, $t1, $t2
nor $t0, $t1, $t2
opcode
0
binary
hexadecimal
Name
#$t0 = not($t1 | $t2)
rs
rt
9
10
rd
sa
8
0
funct
39
Register
Number
$zero
0
$at
1
$v0 - $v1
2-3
$a0 - $a3
4-7
$t0 - $t7
8-15
$s0 - $s7
16-23
$t8 - $t9
24-25
$gp
28
000000
01001
01010 01000 00000
100111
$sp
29
000000
01001
01010 01000 00000
100111
$fp
30
$ra
31
0x012A 4027
26
Korea Univ
MIPS Logical Instructions (Cont)
• Instruction format (I format)
andi(ori) rt, rs, imm
• Example:
andi $t0, $t1, 0xFF00
#$t0 = $t1 & ff00
ori
#$t0 = $t1 | ff00
opcode
13
binary
hexadecimal
$t0, $t1, 0xFF00
rs
rt
9
8
immediate
0xFF00
Name
Register
Number
$zero
0
$at
1
$v0 - $v1
2-3
$a0 - $a3
4-7
$t0 - $t7
8-15
$s0 - $s7
16-23
$t8 - $t9
24-25
001101
01001
01000 11111 11100
000000
$gp
28
001101
01001
01000 11111 11100
000000
$sp
29
$fp
30
$ra
31
0x3528 FF00
27
Korea Univ
Sign Extension & Zero Extension
• Most MIPS instructions sign-extend the immediate
 For example, addi does sign-extension to support
both positive and negative immediates
• An exception to the rule is that logical operations
(andi, ori, xori) place 0’s in the upper half
 This is called zero extension
28
Korea Univ
Revisiting Basic Shifting
• Shift directions
 Left (multiply by 2)
 Right (divide by 2)
• Take floor value if the result is not an integer
• Floor value of X (or X) is the greatest integer number less
than or equal to X, E.g.
 5/2 = 2
 -3/2 = -2
• Shift types
 Logical (or unsigned)
 Arithmetic (or signed)
29
Korea Univ
Revisiting Logical Shift
• Shift Left
 MSB: Shifted out
 LSB: Shifted in with a “0”
 Examples:
• (11001011 << 1) = 10010110
• (11001011 << 3) = 01011000
• Shift right
 MSB: Shifted in with a “0”
 LSB: Shifted out
 Examples:
• (11001011 >> 1) = 01100101
• (11001011 >> 3) = 00011001
• Logic shifts can be useful to perform multiplication or division of
unsigned integer
• Logical shift right takes floor value if the result is not integer
Modified from Prof H.H.Lee’s slide, Georgia Tech
30
Korea Univ
Revisiting Arithmetic Shift
• Shift left
 MSB: Shifted out, however, be aware of overflow/underflow
 LSB: Shifted in with a “0”
 Examples:
• (1100 <<< 1) = 1000
• (1100 <<< 3) = 0000 (Incorrect!)  Underflow
• Shift right
 MSB: Retain “sign bit”
 LSB: Shifted out
 Examples:
• (1100 >>> 1) = 1110 (Retain sign bit)
• (1100 >> >3) = 1111 (-4/8 = -1 )  Floor value of -0.5
• Arithmetic shifts can be useful to perform multiplication or
division of signed integer
• Arithmetic shift right takes floor value if the result is not integer
Modified from Prof H.H.Lee’s slide, Georgia Tech
31
Korea Univ
MIPS Shift Instructions
• Shift instructions shift the value in a register left or right by
up to 31 bits (5-bit shamt field)
 sll rd, rt, shamt: shift left logical
 srl rd, rt, shamt: shift right logical
 sra rd, rt, shamt: shift right arithmetic (sign-extension)
Name
• Instruction Format (R format)
• Examples:
sll $t0, $s1, 4
srl $t2, $s0, 8
sra $s3, $s1, 4
opcode
0
rs
0
#$t0 = $s1 << 4 bits
#$t2 = $s0 >> 8 bits
#$t0 = $s1 << 4 bits
rt
17
rd
sa
19
4
Binary ?
Hexadecimal: ?
32
funct
3
Register
Number
$zero
0
$at
1
$v0 - $v1
2-3
$a0 - $a3
4-7
$t0 - $t7
8-15
$s0 - $s7
16-23
$t8 - $t9
24-25
$gp
28
$sp
29
$fp
30
$ra
31
Korea Univ
MIPS Shift Instructions (Cont)
• MIPS also has variable-shift instructions
 sllv rd, rt, rs: shift left logical variable
 srlv rd, rt, rs: shift right logical variable
 srav rd, rt, rs: shift right arithmetic variable
• Instruction Format (R format)
• Examples:
sllv $s3, $s1, $s2
srlv $s4, $s1, $s2
srav $s5, $s1, $s2
opcode
0
rs
18
Name
#$s3 = $s1 << $s2
#$s4 = $s1 >> $s2
#$s5 = $s1 << $s2
rt
17
rd
sa
21
0
Binary ?
Hexadecimal: ?
33
funct
7
Register
Number
$zero
0
$at
1
$v0 - $v1
2-3
$a0 - $a3
4-7
$t0 - $t7
8-15
$s0 - $s7
16-23
$t8 - $t9
24-25
$gp
28
$sp
29
$fp
30
$ra
31
Korea Univ