Upload
reynard-pearson
View
218
Download
0
Embed Size (px)
Citation preview
www.eej.ulster.ac.uk/~ian/modules/COM181/files/COM181_L4.pptx
COM181 Computer Hardware
Lecture 4: The MIPs CPU
"Adapted from Computer Organization and Design, 4th Edition, Patterson & Hennessy, © 2008.” This material may not be copied or distributed for commercial purposes without express written permission of the copyright holders.
Also drawn from the work of Mary Jane Irwin ( www.cse.psu.edu/~mji )
You should read the MIPs handout after this lecture, also we will revisit the MIP instruction set in tutorials and the next lecture
08/08/13 1
www.eej.ulster.ac.uk/~ian/modules/COM181/files/COM181_L4.pptx
208/08/13
Assembly language
High-level language e.g a = b + c;Machine language e.g 000000 01000 01001 01010 00000 100001
Assembly language is between high-level and machine
Each statement defines one machine operation
Directly represents architectureSo if the hardware chip can’t multiply then there will be no multiply statement (you can multiply by successive addition!)
MIPs has very limited, simple, instructions.It has 32 registers and can add, subtract, and, or, ex-or and shift
There is one instruction to move (copy) 32 bit data from memory to a register and one instruction to move(copy) 32 bit data to memory(i.e you can’t just add the contents of a memory location to another – they have to be brought into registers to do the addition)Assembler program translates to machine language
www.eej.ulster.ac.uk/~ian/modules/COM181/files/COM181_L4.pptx
308/08/13
INSTRUCTION SET ARCHITECTURES (ISA): TypesCISC: complex instruction set computer: Traditional computer architecture
Unique instructions for as many operations as possible
RISC: reduced instruction set computer: Look at actual instruction use, focus on most frequent ones
Advantages Disadvantages
Each instruction can do more work More complex hardware circuits
Programs use less memory More expensive to develop and build
Easier to program directly or to write compilers Usually slower
Advantages Disadvantages
Easier to learn Larger, more complex programs
Simpler circuits Harder to program
Cheaper and more reliable to design and build Depends on compiler for optimization
Faster, quicker to implement when foundry improves silicon processes
www.eej.ulster.ac.uk/~ian/modules/COM181/files/COM181_L4.pptx
408/08/13
Stored programStored program conceptInstructions and data are stored in the same memoryInstructions are simply another kind of dataInstructions are executed sequentially unless branch elsewhere or stop
Fetch-execute cycle- Instruction fetch
Get the next instruction from memory- Decode
Figure out what operation to perform on which operands
- Operand fetchGet the operand values
- ExecutePerform the operation
- Store resultRepeat until done
www.eej.ulster.ac.uk/~ian/modules/COM181/files/COM181_L4.pptx
508/08/13
InstructionsAny instruction set must perform a basic set of operationsMay have more complex combinations or special operations as wellTypes of operations
Data transfer: load, store
Arithmetic: add, subtract, multiply, divideLogic: and, or, xor, complement
Compare: equal, not equal, greater than, less than
Branch/jump: change execution order
www.eej.ulster.ac.uk/~ian/modules/COM181/files/COM181_L4.pptx
608/08/13
MIPSMIPS
"Microcomputer without interlocked pipeline stages"Name is pun on acronym for "millions of instructions per second"
RISC architecture developed in middle '80'sExtended through several versions - current: MIPS IV
Used in many "embedded" applicationsGame machines: Sony, NintendoTV set top boxes: LSI Logic shipped 7 million in 2001Routers: CiscoLaser printersPDAs
High-performance workstations: Silicon Graphics (Lord of the Rings, other films)"Over 100 million sold"
www.eej.ulster.ac.uk/~ian/modules/COM181/files/COM181_L4.pptx
708/08/13
MIPS: machine model notesMain memorydata: 32-bit address: range from 0x00000000 to 0xFFFFFFFF (upper half of range reserved )Processor32 registers ($r0 to $r31, though $r0 is readonly and holds zero: these store data to perform operations to and from themselves - faster than main memory
load-store architecture: access memory only through load, store instructionsload: register <--- data from memory (ld instruction)store: register ---> data to memory (sw instruction)amount of data in bytes (1, 2, 4, 8) depends on instruction (we’ll stick to 32bit (4 bytes@a time))all other operations use only registers or immediate values (contained in instruction)
Design Principle #2: "Smaller is faster."16 floating point registers (ignore these)ALU: arithmetic-logic unitperforms operations on values in registerscontrol: determines how operations executed ("computer within computer")
www.eej.ulster.ac.uk/~ian/modules/COM181/files/COM181_L4.pptx
808/08/13
MIPS: instructionsALU performs arithmetic and logical operations (instructions)
Instruction specifies
1. The operation to perform.
2. The first operand (usually in a register).
3. The second operand (usually in a register).
4. The register that receives the result. (we call the MIPs a 3-address machine)
MIPS has about 111 different instructions (we will look at about a dozen)all 32 bits, 3 different formats (r-type, i-type and j-type)
r-types all have three register addresses for 2,3 and 4 abovei-types have 2 registers and a 16bit constant (number).j-type (there is only one instruction!) is a simple JUMP instruction, with a 26bit address built in to the 32 bit instruction.
www.eej.ulster.ac.uk/~ian/modules/COM181/files/COM181_L4.pptx
908/08/13
MIPS: instruction exampleExample: add unsigned
addu $r10,$r8,$r9 # add 2 numbers this is assemblerSyntax3-operand instructions: all arithmetic/logical operationsoperands separated by commas. Design principle #1: "Simplicity favors regularity."one operation per instruction, one instruction per line
operation: adduregisters
sources : $r8, $r9target : $r10
comment: # add 2 numbers (Comments starts with #, ends with end of line)
Semantics$r10 = $r8 + $r9;
What humans understandR[10] <-- R[8] + R[9]
Alternative way of what
humans understand (RTL)Machine code
hex: 0x01095021
or 0000 0001 0000 1001 0101 0000 0010 0001 in binary!
www.eej.ulster.ac.uk/~ian/modules/COM181/files/COM181_L4.pptx
1008/08/13
0000 0001 0000 1001 0101 0000 0010 0001
MIPS: instruction fields
R-types use three registers, their format is always the same. The 32 bits is split into 6 fields of varying lengths – 6 bit, then 4 x 5 bit then another 6 bit. (i-types have 4 fields, 6,5,5,16)
addu $r10,$r8,$r9 # add 2 numbershex: 0x01095021
0 1 0 9 5 0 2 1
binary: 0000 0001 0000 1001 0101 0000 0010 0001
fields: 000000 01000 01001 01010 00000 100001
b31-26 b25-21 b20-16 b15-11
b10-6 b5-0
opcode $rs $rt $rd shamt function
R-types all have an opcode of six zeroes and the actual function code listed in the rightmost 6 bits. (i-types use the opcode field and have no function field)
www.eej.ulster.ac.uk/~ian/modules/COM181/files/COM181_L4.pptx
1408/08/13
Diagram of MIPS – some parts not shown!!!
View from 30,000 Feet
www.eej.ulster.ac.uk/~ian/modules/COM181/files/COM181_L4.pptx 15
PCSrc
ReadAddress
InstructionMemory
Add
PC
4
0
1
Write Data
Read Addr 1
Read Addr 2
Write Addr
Register
File
Read Data 1
Read Data 2
16 32
ALU1
0
Shiftleft 2
Add
DataMemory
Address
Write Data
ReadData
1
0
IF/ID
SignExtend
ID/EXEX/MEM
MEM/WB
Control
0
1
ALUcntrl
Branch
ForwardUnit
IF/ID.RegisterRs
IF/ID.RegisterRt
EX/MEM.RegisterRd
MEM/WB.RegisterRd
The MIPs CPU is described in the textbook, note how the diagram below relates to lecture 3
08/08/13
www.eej.ulster.ac.uk/~ian/modules/COM181/files/COM181_L4.pptx
16
Often you must deal with the management of complexity, and use abstraction and partition to reduce systems to sizes that the human brain can cope with...
When programming a MIPs CPU it is enough to maintain a “Programmer’s Model” of the CPU.
The CPU is designed as a RISC (Reduced Instruction Set Computer) machine, this suits implementing the hardware but not necessarily suits humans programming it!
Software tools help
A RISC machine has a fixed length instruction (32 bits in the simple MIPs)A RISC machine has a limited number of addressing modesA RISC machine has a limited number of operations (small instrucution set)A RISC machine has, typically, a register bank and uses load/store instructions (only) to access main memory.
08/08/13
www.eej.ulster.ac.uk/~ian/modules/COM181/files/COM181_L4.pptx
17
MIPs machines have three types of Instruction; R-type for arithmetic instructions – using Registers, I-type where the number needed is available immediately and J-type for conditional/control, jumps etc (there are also a few others...)
Example of some MIPS assembly language arithmetic statementsadd $t0, $s1, $s2sub $t0, $s1, $s2
Each arithmetic instruction performs only one operationEach arithmetic instruction specifies exactly three operands
destination source1 op source2Operand order is fixed (the destination is specified first)The operands are contained in the datapath’s register file ($t0, $s1, $s2)
The registers above have been given symbolic names, the actual numbered registers Run from $0 to $31. We use software to convert the statements above to a 32 bit instruction. The ASSEMBLER program can also convert symbols into numbers
08/08/13
www.eej.ulster.ac.uk/~ian/modules/COM181/files/COM181_L4.pptx
18
MIPS Register File
Operands of arithmetic instructions must be from a limited number of special locations contained in the datapath’s register file
Thirty-two 32-bit registers
Two read ports
One write port
Register File
src1 addr
src2 addr
dst addr
write data
32 bits
src1data
src2data
32locations
325
32
5
5
32
Registers are Fast
- Smaller is faster & Make the common case fast Easy for a compiler to use
- e.g., (A*B) – (C*D) – (E*F) can do multiplies in any order Improves code density
- Since register are named with fewer bits than a memory location
Register addresses are indicated by using $
25 =
08/08/13
www.eej.ulster.ac.uk/~ian/modules/COM181/files/COM181_L4.pptx
19
0 $zero constant 0 (Hdware)
1 $at reserved for assembler
2 $v0 expression evaluation &
3 $v1 function results
4 $a0 arguments
5 $a1
6 $a2
7 $a3
8 $t0 temporary: caller saves
. . . (callee can clobber)
15 $t7
Naming Conventions for Registers
16 $s0 callee saves
. . . (caller can clobber)
23 $s7
24 $t8 temporary (cont’d)
25 $t9
26 $k0 reserved for OS kernel
27 $k1
28 $gp pointer to global area
29 $sp stack pointer
30 $fp frame pointer
31 $ra return address (Hdware)
08/08/13
www.eej.ulster.ac.uk/~ian/modules/COM181/files/COM181_L4.pptx
20
Registers vs. Memory Arithmetic instructions operands must be in registers
only thirty-two registers are provided
Compiler associates variables with registers
What about programs with lots of variables?
Processor
Control
Datapath
Memory
Devices
Input
Output
Network
08/08/13
21
Registers vs. Memory Arithmetic instructions operands must be in registers
only thirty-two registers are provided
Compiler associates variables with registers
Processor
Control
Datapath
Memory
Devices
Input
Output
Network
What about programs with lots of variables?08/08/13 www.eej.ulster.ac.uk/~ian/modules/COM181/files/COM181_L4.pptx
22
Memory is a large, single-dimensional array
An address acts as the index into the memory array
Processor – Memory Interconnections
Processor
Memory
32 bits
?locations
read addr/write addr
read data
write data
110110
08/08/13 www.eej.ulster.ac.uk/~ian/modules/COM181/files/COM181_L4.pptx
23
Memory is a large, single-dimensional array
An address acts as the index into the memory array
Processor – Memory Interconnections
Processor
Memory
32 bits
?locations
read addr/write addr
read data
write data
32
32
32 232 Bytes (4 GB) 230
Words (1 GW)
= 4 Bytes = 1 Word
110110
048
The data stored in the memory
The word address of the
data
08/08/13 www.eej.ulster.ac.uk/~ian/modules/COM181/files/COM181_L4.pptx
www.eej.ulster.ac.uk/~ian/modules/COM181/files/COM181_L4.pptx
24
MIPS has two basic data transfer instructions for accessing memory (assume $s3 holds 2410)
lw$t0, 4($s3) #load word from memory
sw$t0, 8($s3) #store word to memory
The data transfer instruction must specify
where in memory to read from (load) or write to (store) – memory address
where in the register file to write to (load) or read from (store) – register destination (source)
The memory address is formed by summing the constant portion of the instruction and the contents of the second register
Accessing Memory
08/08/13
www.eej.ulster.ac.uk/~ian/modules/COM181/files/COM181_L4.pptx
25
MIPS has two basic data transfer instructions for accessing memory (assume $s3 holds 2410)
lw$t0, 4($s3) #load word from memory
sw$t0, 8($s3) #store word to memory
The data transfer instruction must specify
where in memory to read from (load) or write to (store) – memory address
where in the register file to write to (load) or read from (store) – register destination (source)
The memory address is formed by summing the constant portion of the instruction and the contents of the second register
Accessing Memory
28
32
08/08/13
www.eej.ulster.ac.uk/~ian/modules/COM181/files/COM181_L4.pptx
26
Compiling with Loads and Stores Assuming variable b is stored in $s2 and that
the base address of array A is in $s3, what is the MIPS assembly code for the C statement
A[8] = A[2] - b
$s3
$s3+4
$s3+8
$s3+12
. . .
A[2]
A[3]
. . .
A[1]
A[0]
08/08/13
www.eej.ulster.ac.uk/~ian/modules/COM181/files/COM181_L4.pptx
27
Compiling with Loads and Stores Assuming variable b is stored in $s2 and that
the base address of array A is in $s3, what is the MIPS assembly code for the C statement
A[8] = A[2] - b
$s3
$s3+4
$s3+8
$s3+12
. . .
A[2]
A[3]
. . .
A[1]
A[0]lw $t0, 8($s3)
sub $t0, $t0, $s2
sw $t0, 32($s3)
08/08/13
www.eej.ulster.ac.uk/~ian/modules/COM181/files/COM181_L4.pptx
28
Compiling with a Variable Array Index Assuming that the base address of
array A is in register $s4, and variables b, c, and i are in $s1, $s2, and $s3, respectively, what is the MIPS assembly code for the C statement
c = A[i] - b
add $t1, $s3, $s3 #array index i is in $s3
add $t1, $t1, $t1 #temp reg $t1 holds 4*i
$s4
$s4+4
$s4+8
$s4+12
. . .
A[2]
A[3]
. . .
A[1]
A[0]
08/08/13
www.eej.ulster.ac.uk/~ian/modules/COM181/files/COM181_L4.pptx
29
Compiling with a Variable Array Index Assuming that the base address of
array A is in register $s4, and variables b, c, and i are in $s1, $s2, and $s3, respectively, what is the MIPS assembly code for the C statement
c = A[i] - b
add $t1, $s3, $s3 #array index i is in $s3
add $t1, $t1, $t1 #temp reg $t1 holds 4*i
$s4
$s4+4
$s4+8
$s4+12
. . .
A[2]
A[3]
. . .
A[1]
A[0]
add $t1, $t1, $s4 #addr of A[i] now in $t1
lw $t0, 0($t1)
sub $s2, $t0, $s1
08/08/13
www.eej.ulster.ac.uk/~ian/modules/COM181/files/COM181_L4.pptx
30
Small constants are used quite frequently (50% of operands in many common programs)e.g., A = A + 5;
B = B + 1;C = C - 18;
Solutions? Why not? Put “typical constants” in memory and load them
Create hard-wired registers (like $zero) for constants like 1, 2, 4, 10, …
Dealing with Constants
How do we make this work? How do we Make the common case fast !
08/08/13
www.eej.ulster.ac.uk/~ian/modules/COM181/files/COM181_L4.pptx
31
Include constants inside arithmetic instructions
Much faster than if they have to be loaded from memory (they come in from memory with the instruction itself)
MIPS immediate instructions
addi $s3, $s3, 4 #$s3 = $s3 + 4
Constant (or Immediate) Operands
There is no subi instruction, can you guess why not?
08/08/13
www.eej.ulster.ac.uk/~ian/modules/COM181/files/COM181_L4.pptx
32
MIPS Instructions, so far
Category Instr Example Meaning
Arithmetic add add $s1, $s2, $s3 $s1 = $s2 + $s3
subtract sub $s1, $s2, $s3 $s1 = $s2 - $s3
add immediate
addi $s1, $s2, 4 $s1 = $s2 + 4
Datatransfer
load word lw $s1, 32($s2) $s1 = Memory($s2+32)
store word sw $s1, 32($s2) Memory($s2+32) = $s1
08/08/13
www.eej.ulster.ac.uk/~ian/modules/COM181/files/COM181_L4.pptx
33
Instructions, like registers and words of data, are also 32 bits long Example: add $t0, $s1, $s2
registers have numbers $t0=$8,$s1=$17,$s2=$18
Instruction Format:
Can you guess what the field names stand for?
Machine Language - Arithmetic Instruction
op rs rt rd shamt funct
000000 10001 10010 01000 00000 100000
08/08/13
www.eej.ulster.ac.uk/~ian/modules/COM181/files/COM181_L4.pptx
34
Instructions, like registers and words of data, are also 32 bits long
Example: add $t0, $s1, $s2
registers have numbers $t0=$8,$s1=$17,$s2=$18
Instruction Format:
Machine Language - Arithmetic Instruction
op rs rt rd shamt funct
000000 10001 10010 01000 00000 100000
Can you guess what the field names stand for?
08/08/13
www.eej.ulster.ac.uk/~ian/modules/COM181/files/COM181_L4.pptx
36
MIPS Instruction Fields
op
rs
rt
rd
shamt
funct
op rs rt rd shamt funct
6 bits 5 bits 5 bits 5 bits 5 bits 6 bits = 32 bits
opcode indicating operation to be performed
address of the first register source operand
address of the second register source operand
the register destination address
shift amount (for shift instructions)
function code that selects the specific variant of the operation specified in the opcode field
08/08/13
www.eej.ulster.ac.uk/~ian/modules/COM181/files/COM181_L4.pptx
37
Consider the load-word and store-word instr’s
What would the regularity principle have us do?
But . . . Good design demands compromise Introduce a new type of instruction format
I-type for data transfer instructions (previous format was R-type for register)
Example: lw $t0, 24($s2)
Where's the compromise?
Machine Language - Load Instruction
op rs rt 16 bit number
23hex 18 8 24
100011 10010 01000 0000000000011000
08/08/13
www.eej.ulster.ac.uk/~ian/modules/COM181/files/COM181_L4.pptx
38
Consider the load-word and store-word instr’s
What would the regularity principle have us do?
But . . . Good design demands compromise Introduce a new type of instruction format
I-type for data transfer instructions (previous format was R-type for register)
Example: lw $t0, 24($s2)
Machine Language - Load Instruction
op rs rt 16 bit number
23hex 18 8 24
100011 10010 01000 0000000000011000
Where's the compromise?08/08/13
www.eej.ulster.ac.uk/~ian/modules/COM181/files/COM181_L4.pptx
39
Memory Address Location Example: lw $t0, 24($s2)
Memory
data word address (hex)
0x000000000x000000040x000000080x0000000c
0xf f f f f f f f
$s2 0x12004094
0x00000002
2410 + $s2 =
Note that the offset can be positive or negative
08/08/13
www.eej.ulster.ac.uk/~ian/modules/COM181/files/COM181_L4.pptx
40
Memory Address Location Example: lw $t0, 24($s2)
Memory
data word address (hex)
0x000000000x000000040x000000080x0000000c
0xf f f f f f f f
$s2 0x12004094
0x00000002
2410 + $s2 =
Note that the offset can be positive or negative
. . . 1001 0100+ . . . 0001 1000 . . . 1010 1100 = 0x120040ac
0x120040ac
$t0
08/08/13
www.eej.ulster.ac.uk/~ian/modules/COM181/files/COM181_L4.pptx
41
Example: sw $t0, 24($s2)
A 16-bit offset means access is limited to memory locations within a range of +213-1 to -213 (~8,192) words (+215-1 to -215 (~32,768) bytes) of the address in the base register $s2 2’s complement (1 sign bit + 15 magnitude bits)
Machine Language - Store Instruction
op rs rt 16 bit number
43 18 8 24
101011 10010 01000 0000000000011000
08/08/13
www.eej.ulster.ac.uk/~ian/modules/COM181/files/COM181_L4.pptx
42
Example: sw $t0, 24($s2)
A 16-bit offset means access is limited to memory locations within a range of +213-1 to -213 (~8,192) words (+215-1 to -215 (~32,768) bytes) of the address in the base register $s2 2’s complement (1 sign bit + 15 magnitude bits)
Machine Language - Store Instruction
op rs rt 16 bit number
43 18 8 24
101011 10010 01000 0000000000011000
08/08/13
www.eej.ulster.ac.uk/~ian/modules/COM181/files/COM181_L4.pptx
43
What instruction format is used for the addi ?addi $s3, $s3, 4 #$s3 = $s3 +
4
Machine format:
Machine Language – Immediate Instructions
08/08/13
www.eej.ulster.ac.uk/~ian/modules/COM181/files/COM181_L4.pptx
44
What instruction format is used for the addi ?addi $s3, $s3, 4 #$s3 = $s3 + 4
Machine format:
Machine Language – Immediate Instructions
op rs rt 16 bit immediate I format
8 19 19 4
The constant is kept inside the instruction itself! So must use the I format – Immediate format Limits immediate values to the range +215–1 to -215
08/08/13
Instruction Format Encoding Can reduce the complexity with multiple formats
by keeping them as similar as possible First three fields are the same in R-type and I-type
Each format has a distinct set of values in the op fieldInstr Frmt op rs rt rd shamt funct address
add R 0 reg reg reg 0 32ten NA
sub R 0 reg reg reg 0 34ten NA
addi I 8ten reg reg NA NA NA constant
lw I 35ten reg reg NA NA NA address
sw I 43ten reg reg NA NA NA address
www.eej.ulster.ac.uk/~ian/modules/COM181/files/COM181_L4.pptx
46
Assembling Code Remember the assembler code we compiled last lecture for the C
statement
A[8] = A[2] - b
lw $t0, 8($s3) #load A[2] into $t0
sub $t0, $t0, $s2 #subtract b from A[2]
sw $t0, 32($s3) #store result in A[8]
Assemble the MIPS object code for these three instructions (decimal is fine)
lw
sw
sub
08/08/13
www.eej.ulster.ac.uk/~ian/modules/COM181/files/COM181_L4.pptx
47
Assembling Code Remember the assembler code we compiled last lecture for the C
statement
A[8] = A[2] - b
lw $t0, 8($s3) #load A[2] into $t0
sub $t0, $t0, $s2 #subtract b from A[2]
sw $t0, 32($s3) #store result in A[8]
Assemble the MIPS object code for these three instructions (decimal is fine)
35lw 19 8 8
43sw 19 8 32
0sub 8 18 8 0 34
08/08/13
www.eej.ulster.ac.uk/~ian/modules/COM181/files/COM181_L4.pptx
48
Review: MIPS Instructions, so farCategory Instr Op
CodeExample Meaning
Arithmetic(R format)
add 0 & 32
add $s1, $s2, $s3 $s1 = $s2 + $s3
subtract 0 & 34
sub $s1, $s2, $s3 $s1 = $s2 - $s3
Arithmetic(I format)
add immediate
8 addi $s1, $s2, 4 $s1 = $s2 + 4
Datatransfer(I format)
load word 35 lw $s1, 100($s2) $s1 = Memory($s2+100)
store word 43 sw $s1, 100($s2) Memory($s2+100) = $s1
08/08/13
www.eej.ulster.ac.uk/~ian/modules/COM181/files/COM181_L4.pptx
49
MIPS Operand Addressing Modes Summary Register addressing – operand is in a register
Base (displacement) addressing – operand’s address in memory is the sum of a register and a 16-bit constant contained within the instruction
Immediate addressing – operand is a 16-bit constant contained within the instruction
1. Register addressingop rs rt rd funct Register
word operand
op rs rt offset
2. Base addressing
base register
Memoryword or byte operand
3. Immediate addressingop rs rt operand
08/08/13
www.eej.ulster.ac.uk/~ian/modules/COM181/files/COM181_L4.pptx
50
MIPS Instruction Addressing Modes Summary
PC-relative addressing – instruction’s address in memory is the sum of the PC and a 16-bit constant contained within the instruction
Pseudo-direct addressing – instruction’s address in memory is the 26-bit constant contained within the instruction concatenated with the upper 4 bits of the PC
4. PC-relative addressingop rs rt offset
Program Counter (PC)
Memorybranch destination instruction
5. Pseudo-direct addressingop jump address
Program Counter (PC)
Memoryjump destination instruction||
08/08/13
www.eej.ulster.ac.uk/~ian/modules/COM181/files/COM181_L4.pptx
51
Review: MIPS Instructions, so farCategory Instr OpC Example Meaning
Arithmetic(R & I format)
add 0 & 20 add $s1, $s2, $s3 $s1 = $s2 + $s3
subtract 0 & 22 sub $s1, $s2, $s3 $s1 = $s2 - $s3
add immediate 8 addi $s1, $s2, 4 $s1 = $s2 + 4
shift left logical 0 & 00 sll $s1, $s2, 4 $s1 = $s2 << 4
shift right logical 0 & 02 srl $s1, $s2, 4 $s1 = $s2 >> 4 (fill with zeros)
shift right arithmetic
0 & 03 sra $s1, $s2, 4 $s1 = $s2 >> 4 (fill with sign bit)
and 0 & 24 and $s1, $s2, $s3 $s1 = $s2 & $s3
or 0 & 25 or $s1, $s2, $s3 $s1 = $s2 | $s3
nor 0 & 27 nor $s1, $s2, $s3 $s1 = not ($s2 | $s3)
and immediate c and $s1, $s2, ff00 $s1 = $s2 & 0xff00
or immediate d or $s1, $s2, ff00 $s1 = $s2 | 0xff00
load upper immediate
f lui $s1, 0xffff $s1 = 0xffff0000
08/08/13
www.eej.ulster.ac.uk/~ian/modules/COM181/files/COM181_L4.pptx
52
Review: MIPS Instructions, so farCategory Instr OpC Example Meaning
Datatransfer(I format)
load word 23 lw $s1, 100($s2) $s1 = Memory($s2+100)
store word 2b sw $s1, 100($s2) Memory($s2+100) = $s1
load byte 20 lb $s1, 101($s2) $s1 = Memory($s2+101)
store byte 28 sb $s1, 101($s2) Memory($s2+101) = $s1
load half 21 lh $s1, 101($s2) $s1 = Memory($s2+102)
store half 29 sh $s1, 101($s2) Memory($s2+102) = $s1
Cond. branch(I & R format)
br on equal 4 beq $s1, $s2, L if ($s1==$s2) go to L
br on not equal 5 bne $s1, $s2, L if ($s1 !=$s2) go to L
set on less than immediate
a slti $s1, $s2, 100 if ($s2<100) $s1=1; else $s1=0
set on less than 0 & 2a slt $s1, $s2, $s3 if ($s2<$s3) $s1=1; else $s1=0
Uncond. jump
jump 2 j 2500 go to 10000
jump register 0 & 08 jr $t1 go to $t1
jump and link 3 jal 2500 go to 10000; $ra=PC+408/08/13
www.eej.ulster.ac.uk/~ian/modules/COM181/files/COM181_L4.pptx
53
Review: MIPS R3000 ISA Instruction Categories
Load/Store
Computational
Jump and Branch
Floating Point
coprocessor
Memory Management
Special
3 Instruction Formats: all 32 bits wide
R0 - R31
PC
HI
LO
OP rs rt rd shamt funct
OP rs rt 16 bit number
OP 26 bit jump target
Registers
R format
I format
6 bits 5 bits 5 bits 5 bits 5 bits 6 bits
J format
08/08/13
www.eej.ulster.ac.uk/~ian/modules/COM181/files/COM181_L4.pptx
54
RISC Design Principles Review Simplicity favors regularity
fixed size instructions – 32-bits
small number of instruction formats
Smaller is faster
limited instruction set
limited number of registers in register file
limited number of addressing modes
Good design demands good compromises
three instruction formats
Make the common case fast
arithmetic operands from the register file (load-store machine)
allow instructions to contain immediate operands
08/08/13
www.eej.ulster.ac.uk/~ian/modules/COM181/files/COM181_L4.pptx
55
The Code Translation HierarchyC program
compiler
assembly code
08/08/13
www.eej.ulster.ac.uk/~ian/modules/COM181/files/COM181_L4.pptx
56
Compiler
Transforms the C program into an assembly language program
Advantages of high-level languages many fewer lines of code
easier to understand and debug
…
Today’s optimizing compilers can produce assembly code nearly as good as an assembly language programming expert and often better for large programs smaller code size, faster execution
08/08/13
www.eej.ulster.ac.uk/~ian/modules/COM181/files/COM181_L4.pptx
57
The Code Translation HierarchyC program
compiler
assembly code
assembler
object code
08/08/13
08/08/13 www.eej.ulster.ac.uk/~ian/modules/COM181/files/COM181_L4.pptx
58
Does a syntactic check of the code (i.e., did you type it in correctly) and then transforms the symbolic assembler code into object (machine) code
Advantages of assembler
much easier than remembering instr’s binary codes
can use labels for addresses – and let the assembler do the arithmetic
can use pseudo-instructions
e.g., “move $t0, $t1” exists only in assembler (would be implemented using “add $t0,$t1,$zero”)
When considering performance, you should count instructions executed, not code size
Assembler
08/08/13 www.eej.ulster.ac.uk/~ian/modules/COM181/files/COM181_L4.pptx
59
1. Builds a symbol table which holds the symbolic names (labels) and their corresponding addresses A label is local if it is used only within the file where its
defined. Labels are local by default.
A label is external (global) if it refers to code or data in another file or if it is referenced from another file. Global labels must be explicitly declared global (e.g., .globl main)
2. Translates each assembly language statement into object (machine) code by “assembling” the numeric equivalents of the opcodes, register specifiers, shift amounts, and jump/branch targets/offsets
The Two Main Tasks of the Assembler
www.eej.ulster.ac.uk/~ian/modules/COM181/files/COM181_L4.pptx
60
MIPS (spim) Memory AllocationMemory
230
words
0000 0000
f f f f f f f c
TextSegment
Reserved
Static data
Mem Map I/O
0040 0000
1000 00001000 8000
7f f f f f fcStack
Dynamic data
$sp
$gp
PC
Kernel Code & Data
08/08/13
www.eej.ulster.ac.uk/~ian/modules/COM181/files/COM181_L4.pptx
61
Other Tasks of the Assembler Converts pseudo-instr’s to legal assembly code
register $at is reserved for the assembler to do this
Converts branches to far away locations into a branch followed by a jump
Converts instructions with large immediates into a lui followed by an ori
Converts numbers specified in decimal and hexidecimal into their binary equivalents and characters into their ASCII equivalents
Deals with data layout directives (e.g., .asciiz)
Expands macros (frequently used sequences of instructions)
08/08/13
www.eej.ulster.ac.uk/~ian/modules/COM181/files/COM181_L4.pptx
62
Typical Object File Pieces Object file header: size and position of the following pieces of the file
Text (code) segment (.text) : assembled object (machine) code
Data segment (.data) : data accompanying the code
static data - allocated throughout the program
dynamic data - grows and shrinks as needed
Relocation information: identifies instructions (data) that use (are located at) absolute addresses – not relative to a register (including the PC)
on MIPS only j, jal, and some loads and stores (e.g., lw $t1, 100($zero) ) use absolute addresses
Symbol table: global labels with their addresses (if defined in this code segment) or without (if defined external to this code segment)
Debugging information
08/08/13
An Example.data.align 0
str: .asciiz "The answer is "cr: .asciiz "\n"
.text
.align 2
.globl main
.globl printfmain: ori $2, $0, 5
syscallmove $8, $2
loop: beq $8, $9, doneblt $8, $9, brncsub $8, $8, $9j loop
brnc: sub $9, $9, $8j loop
done: jal printf
Gbl? Symbol Addressstr 1000 0000
cr 1000 000b
yes main 0040 0000
loop 0040 000c
brnc 0040 001c
done 0040 0024
yes printf ???? ????
Relocation Info
Address Data/Instr1000 0000 str
1000 000b cr
0040 0018 j loop
0040 0020 j loop
0040 0024 jal printf
www.eej.ulster.ac.uk/~ian/modules/COM181/files/COM181_L4.pptx
64
The Code Translation HierarchyC program
compiler
assembly code
assembler
object code library routines
executable
linker
machine code
main text segment
printf text segment
08/08/13
www.eej.ulster.ac.uk/~ian/modules/COM181/files/COM181_L4.pptx
65
LinkerTakes all of the independently assembled code segments and “stitches” (links) them
together
Faster to recompile and reassemble a patched segment, than it is to recompile and reassemble the entire program
1. Decides on memory allocation pattern for the code and data segments of each module
Remember, modules were assembled in isolation so each has assumed its code’s starting location is 0x0040 0000 and its static data starting location is 0x1000 0000
2. Relocates absolute addresses to reflect the new starting location of the code segment and its data segment
3. Uses the symbol tables information to resolve all remaining undefined labels
branches, jumps, and data addresses to/in external modules
Linker produces an executable file
08/08/13
www.eej.ulster.ac.uk/~ian/modules/COM181/files/COM181_L4.pptx
66
Linker Code Schematic
printf: . . .
main: . . . jal ????
call, printf
Linker
Object file
C library
Relocation info
main: . . . jal printfprintf: . . .
Executable file
08/08/13
www.eej.ulster.ac.uk/~ian/modules/COM181/files/COM181_L4.pptx
67
Linking Two Object FilesH
dr
T
xtse
g
D
seg
R
eloc
S
mtb
l D
bg
File 1
Hdr
T
xtse
g
Dse
g
Rel
oc S
mtb
l D
bg
File 2
+
Executable
Hdr
T
xtse
g
Dse
g
R
eloc
08/08/13
68
The Code Translation HierarchyC program
compiler
assembly code
assembler
object code library routines
executable
linker
loader
memory
machine code
08/08/13 www.eej.ulster.ac.uk/~ian/modules/COM181/files/COM181_L4.pptx
www.eej.ulster.ac.uk/~ian/modules/COM181/files/COM181_L4.pptx
69
Loader Loads (copies) the executable code now stored on disk into
memory at the starting address specified by the operating system
Copies the parameters (if any) to the main routine onto the stack
Initializes the machine registers and sets the stack pointer to the first free location (0x7fff fffc)
Jumps to a start-up routine (at PC addr 0x0040 0000 on xspim) that copies the parameters into the argument registers and then calls the main routine of the program with a jal main
08/08/13
www.eej.ulster.ac.uk/~ian/modules/COM181/files/COM181_L4.pptx
70
Dynamically Linked Libraries Statically linking libraries mean that the library becomes part
of the executable code
It loads the whole library even if only a small part is used (e.g., standard C library is 2.5 MB)
What if a new version of the library is released ?
(Lazy) dynamically linked libraries (DLL) – library routines are not linked and loaded until a routine is called during execution
The first time the library routine called, a dynamic linker-loader must
find the desired routine, remap it, and “link” it to the calling routine (see book for more details)
DLLs require extra space for dynamic linking information, but do not require the whole library to be copied or linked
08/08/13