Beruflich Dokumente
Kultur Dokumente
ECE369
Modern instruction set architectures: IA-32, PowerPC, MIPS, SPARC, ARM, and others
ECE369
Instructions:
Language of the Machine Well be working with the MIPS instruction set architecture Simple instruction set and format Similar to other architectures developed since the 1980's Almost 100 million MIPS processors manufactured in 2002 used by NEC, Nintendo, Cisco, Silicon Graphics, Sony,
1400 1300 1200 1100 1000 900 800 700 600 500 400 300 200 100 0 1998 1999 2000 2001 2002 Other SPARC Hitachi SH PowerPC Motorola 68K MIPS IA-32 ARM
ECE369
ECE369
MIPS arithmetic
All instructions have 3 operands Operand order is fixed (destination first) Example: C code: MIPS code: a = b + c add a, b, c (well talk about registers in a bit) The natural number of operands for an operation like addition is threerequiring every instruction to have exactly three operands, no more and no less, conforms to the philosophy of keeping the hardware simple
ECE369
MIPS arithmetic
Design Principle: simplicity favors regularity. Of course this complicates some things... C code: MIPS code: a = b + c + d; add a, b, c add a, a, d
Operands must be registers, only 32 registers provided Each register contains 32 bits Design Principle: smaller is faster. Why?
ECE369
Input
Output
I/O
ECE369
Memory Organization
Viewed as a large, single-dimension array, with an address. A memory address is an index into the array "Byte addressing" means that the index points to a byte of memory.
0 1 2 3 4 5 6 ...
8 bits of data 8 bits of data 8 bits of data 8 bits of data 8 bits of data 8 bits of data 8 bits of data
ECE369
Memory Organization
Bytes are nice, but most data items use larger "words" For MIPS, a word is 32 bits or 4 bytes. 0 32 bits of data 4 32 bits of data Registers hold 32 bits of data 32 bits of data 8 12 32 bits of data ... 232 bytes with byte addresses from 0 to 232-1 230 words with byte addresses 0, 4, 8, ... 232-4 Words are aligned i.e., what are the least 2 significant bits of a word address?
ECE369
Instructions
Load and store instructions Example: C code: A[12] = h + A[8]; # $s3 stores base address of A and $s2 stores h MIPS code: lw $t0, 32($s3) add $t0, $s2, $t0 sw $t0, 48($s3) Can refer to registers by name (e.g., $s2, $t2) instead of number Store word has destination last Remember arithmetic operands are registers, not memory! Cant write: add 48($s3), $s2, 32($s3)
ECE369
10
Instructions
Example: C code: g = h + A[i];
# $s3 stores base address of A and # g,h and i in $s1,$s2 and $s4 Add $t1,$s4,$s4 Add $t1,$t1,$t1 Add $t1,$t1,$s3 Lw $t0,0($t1) Add $s1,$s2,$t0
11
ECE369
12
ECE369
13
MIPS Format
Fetch,Decode,Execute, PC !!
Instruction Format:
000000 op 10001 rs 10010 rt 01001 rd
ECE369
00000 shamt
100000 funct
14
Our Goal
add $t1, $s1, $s2 ($t1=9, $s1=17, $s2=18) 000000 10001 10010 01001 00000 op rs rt rd shamt 100000 funct
ECE369
15
MIPS Format
ECE369
16
Machine Language
Consider the load-word and store-word instructions, What would the regularity principle have us do? New principle: Good design demands a compromise Introduce a new type of instruction format I-type for data transfer instructions other format was R-type for register Example: lw $t0, 32($s2) 35 op 18 rs 9 rt 32 16 bit number
ECE369
17
Summary
Nam e Register num ber Usage 0 the constant value 0 $z ero 2-3 values for results and expression evaluation $v 0-$ v1 4-7 arguments $a 0-$ a3 8-15 temporaries $t 0-$ t7 in s t r u c ft io rnm o p r s o at 16-23 saved $s 0-$ s7 add R 0 re 24-25 more temporaries $t 8-$ t9 28 global pointer $g p sub R 0 re 29 stack pointer $s p lw I 3 5 re 30 frame pointer $f p sw I 4 3 re 31 return address $r a
r t r d s h a mf ut n cat d d r e s g re g re g 0 3 2 n a g re g re g 0 3 4 n a g re g n a n a n a a d d re s g re g n a n a n a a d d re s
# $t1 = base address of A, $s2 stores h # use $t0 for temporary register Op rs,rt,address Op,rs,rt,rd,shamt,funct Op,rs,rt,address
ECE369
ECE369
19
ECE369
20
ECE369
21
Control Instructions
ECE369
22
Using If-Else
23
Addresses in Branches
Instructions: bne $t4,$t5,LabelNext instruction is at Label if $t4$t5 beq $t4,$t5,LabelNext instruction is at Label if $t4=$t5 Formats: I op rs rt 16 bit address
What if the Label is too far away (16 bit address is not enough)
ECE369
24
I J
op op
rs
rt
16 bit address
26 bit address
ECE369
25
Control Flow
We have: beq, bne, what about Branch-if-less-than? If (a<b) # a in $s0, b in $s1
ECE369
26
While Loop
While (save[i] == k) i = i+j; # i, j and k correspond to registers # $s3, $s4 and $s5 # array base address at $s6
Loop: add $t1, $s3, $s3 add $t1, $t1, $t1 add $t1, $t1, $s6 lw $t0, 0($t1) bne $t0, $s5, Exit add $s3, $s3, $s4 j loop Exit:
ECE369
27
ECE369
28
Overview of MIPS
simple instructions all 32 bits wide very structured, no unnecessary baggage only three instruction formats R I J op op op rs rs rt rt rd shamt funct
16 bit address
26 bit address
ECE369
29
ECE369
30
Example
swap(int v[], int k); { int temp; temp = v[k] v[k] = v[k+1]; v[k+1] = temp; }
Let $s5 store k value and $s4 store base address of the v[]
ECE369
31
Summary
ECE369
32
Other Issues
More reading: support for procedures linkers, loaders, memory layout stacks, frames, recursion manipulating strings and pointers interrupts and exceptions system calls and conventions Some of these we'll talk more about later We have already talked about compiler optimizations
ECE369
33
Nested Procedures,
function_main(){ function_a(var_x); : return; } function_a(int size){ function_b(var_y); : return; } function_b(int count){ : return; }
34
jr
ECE369
35
ECE369
36
Factorial Code
200 fact:addi $sp, $sp, -8 204 sw $ra, 4($sp) sw $a0, 0($sp) slti beq addi addi jr addi jal lw lw addi mult jr $t0, $a0, 1 # is n<1? $t0, $zero, L1 # if not go to L1 $v0, $zero, 1 $sp, $sp, 8 $ra $a0, $a0, -1 fact $a0, 0($sp) $ra, 4($sp) $sp, $sp,8 $v0,$a0,$v0 $ra : 100 fact(3) 104 add . ra = 104 a0= 3 sp= 40 vo=
# call fact(n-1) # restore n # restore address # pop 2 items # return n*fact(n-1) # return to caller
ECE369
37
38
Elaboration
Name Register number 0 $zero 2-3 $v0-$v1 4-7 $a0-$a3 8-15 $t0-$t7 16-23 $s0-$s7 24-25 $t8-$t9 28 $gp 29 $sp 30 $fp 31 $ra Usage the constant value 0 values for results and expression evaluation arguments temporaries saved more temporaries global pointer stack pointer frame pointer return address
What if there are more than 4 parameters for a function call? Addressable via frame pointer References to variables in the stack have the same offset Use of jal? Saves address of the next instruction that follows jal into $ra Procedure return can now be simply jr $ra 39
ECE369
40
Using If-Else
$s1-$s5: g-k
ECE369
41
ECE369
42
Name Register number 0 $zero 2-3 $v0-$v1 4-7 $a0-$a3 8-15 $t0-$t7 16-23 $s0-$s7 24-25 $t8-$t9 28 $gp 29 $sp 30 $fp 31 $ra
Usage the constant value 0 values for results and expression evaluation arguments temporaries saved more temporaries global pointer stack pointer frame pointer return address
ECE369
43
ECE369
44
ECE369
45
CPI
ECE369
46
ECE369
47
Clear1
clear1( int array[ ], int size) { int i; for (i=0; i<size; i++) array[i]=0; }
$t0,$zero,$zero # i=0, register $t0=0 $t1,$t0,$t0 # $t1=i*2 $t1,$t1,$t1 # $t1=i*4 $t2,$a0,$t1 # $t2=address of array[i] $zero, 0($t2) # array[i]=0 $t0,$t0,1 # i=i+1 $t3,$t0,$a1 # $t3=(i<size) $t3,$zero,loop1 # if (i<size) go to loop1
ECE369
48
Clear2
clear2(int* array, int size) { int* p; for( p=&array[0]; p<&array[size]; p++) *p=0; }
loop2:
# p = address of array[0] # memory[p]=0 # p = p+4 # $t1 = size*2 # $t1 = size*4 # $t2 = address of array[size] # $t3=(p<&array[size]) # if (p<&array[size]) go to loop2 49
Clear2, Version 2
clear2(int* array, int size) { int* p; for( p=&array[0]; p<&array[size]; p++) *p=0; }
# p = address of array[0] # $t1 = size*2 # $t1 = size*4 # $t2 = address of array[size] # memory[p]=0 # p = p+4 # $t3=(p<&array[size]) # if (p<&array[size]) go to loop2 50
loop2:
# p = address of array[0] # $t1 = size*2 # $t1 = size*4 # $t2 = address of array[size] # memory[p]=0 # p = p+4 # $t3=(p<&array[size]) # if (p<&array[size]) go to loop2
ECE369
loop2:
51
Big Picture
ECE369
52
Compiler
ECE369
53
Addressing Modes
ECE369
54
Our Goal
add $t1, $s1, $s2 ($t1=9, $s1=17, $s2=18) 000000 10001 10010 01001 00000 op rs rt rd shamt 100000 funct
ECE369
55
ECE369
56
Summary
Instruction complexity is only one variable lower instruction count vs. higher CPI / lower clock rate Design Principles: simplicity favors regularity smaller is faster good design demands compromise make the common case fast Instruction set architecture a very important abstraction indeed!
ECE369
57