Computer Architecture: Nguyễn Trí Thành
Computer Architecture: Nguyễn Trí Thành
Nguyn Tr Thnh
Information Systems Department Faculty of Technology College of Technology [email protected]
10/11/2011
10/11/2011
Instruction Set
The repertoire of instructions of a computer Early computers had very simple instruction sets
Simplified implementation
Many modern computers also have simple instruction sets Instructions operate using registers
10/11/2011
10/11/2011
PC
Instruction
ALU
10/11/2011
Control flow
Jump Conditional Branch Call & Return
10/11/2011 6
Arithmetic Operations
Add and subtract, three operands
Two sources and one destination
add a, b, c # a gets b + c All arithmetic operations have this form Design Principle 1: Simplicity favours regularity
Regularity makes implementation simpler Simplicity enables higher performance at lower cost
10/11/2011 7
Arithmetic Example
C code:
f = (g + h) - (i + j);
10/11/2011
Register Operands
Arithmetic instructions use register operands MIPS has a 32 64-bit register file
Use for frequently accessed data Numbered 0 to 31 32-bit data called a word
Assembler names
$t0, $t1, , $t9 for temporary values $s0, $s1, , $s7 for saved variables
10/11/2011 9
C code:
f = (g + h) - (i + j); f, , j in $s0, , $s4
swap(int v[], int k) {int temp; temp = v[k]; v[k] = v[k+1]; v[k+1] = temp; }
C compiler
swap: muli $2, $5,4 add $2, $4,$2 lw $15, 0($2) lw $16, 4($2) sw $16, 0($2) sw $15, 4($2) jr $31
Assembler
10/11/2011
Memory Operands
Main memory used for composite data
Arrays, structures, dynamic data
# load word
base register
12
10/11/2011
13
Immediate Operands
Constant data specified in an instruction
addi $s3, $s3, 4
10/11/2011
16
Using 32 bits
0 to +4,294,967,295
10/11/2011 17
Using 32 bits
2,147,483,648 to +2,147,483,647
10/11/2011 18
Sign Extension
Representing a number using more bits
Preserve the numeric value
Representing Instructions
Instructions are encoded in binary
Called machine code
MIPS instructions
Encoded as 32-bit instruction words Small number of formats encoding operation code (opcode), register numbers, Regularity!
Register numbers
$t0 $t7 are regs 8 15 $t8 $t9 are regs 24 25 $s0 $s7 are regs 16 23
10/11/2011 20
rs
5 bits
rt
5 bits
rd
5 bits
shamt
5 bits
funct
6 bits
Instruction fields
op: operation code (opcode) rs: first source register number rt: second source register number rd: destination register number shamt: shift amount (00000 for now) funct: function code (extends opcode)
10/11/2011 21
R-format Example
op
6 bits
rs
5 bits
rt
5 bits
rd
5 bits
shamt
5 bits
funct
6 bits
000000100011001001000000001000002 = 0232402016
10/11/2011 22
Hexadecimal
Base 16
Compact representation of bit strings 4 bits per hex digit
0 1 2 3 0000 0001 0010 0011 4 5 6 7 0100 0101 0110 0111 8 9 a b 1000 1001 1010 1011 c d e f 1100 1101 1110 1111
rs
5 bits
rt
5 bits
constant or address
16 bits
Logical Operations
Instructions for bitwise manipulation
Operation Shift left Shift right Bitwise AND Bitwise OR Bitwise NOT C << >> & | ~ Java << >>> & | ~ MIPS sll srl and, andi or, ori nor
Shift Operations
op
6 bits
rs
5 bits
rt
5 bits
rd
5 bits
shamt
5 bits
funct
6 bits
AND Operations
Useful to mask bits in a word
Select some bits, clear others to 0 and $t0, $t1, $t2
$t2 $t1 $t0 0000 0000 0000 0000 0000 1101 1100 0000 0000 0000 0000 0000 0011 1100 0000 0000 0000 0000 0000 0000 0000 1100 0000 0000
10/11/2011
28
OR Operations
Useful to include bits in a word
Set some bits to 1, leave others unchanged or $t0, $t1, $t2
$t2 $t1 $t0 0000 0000 0000 0000 0000 1101 1100 0000 0000 0000 0000 0000 0011 1100 0000 0000 0000 0000 0000 0000 0011 1101 1100 0000
10/11/2011
29
NOT Operations
Useful to invert bits in a word
Change 0 to 1, and 1 to 0
0000 0000 0000 0000 0011 1100 0000 0000 1111 1111 1111 1111 1100 0011 1111 1111
10/11/2011
30
Conditional Operations
Branch to a labeled instruction if a condition is true
Otherwise, continue sequentially
j L1
unconditional jump to instruction labeled L1
10/11/2011 31
Compiling If Statements
C code:
if (i==j) f = g+h; else f = g-h; f, g, in $s0, $s1,
$s3, $s4, Else $s0, $s1, $s2 Exit $s0, $s1, $s2
Assembler calculates addresses
32
33
Basic Blocks
A basic block is a sequence of instructions with
No embedded branches (except at end) No branch targets (except at beginning) A compiler identifies basic blocks for optimization An advanced processor can accelerate execution of basic blocks
10/11/2011 34
beq and bne are the common case This is a good design compromise
10/11/2011
36
# unsigned
37
Program structure
.data
#Data declaration op1: .word 9 msg: .asciiz "The result is: "
.text
#Program codes la $t1, op1 lw $t1, 0($t1)
10/11/2011 38
Exercise
Write a program to present the if statement: if (a>b) c=a-b; else c=b-a; Write a program to present the while statement: while (a!=b)if(a>b) a=a-b; else b=b-a; Write a program to present the for statement: for(s=0,i=1;i<N;i++) s=s+i;
10/11/2011
39
Exercise
Write a program to add two numbers located in memory, write the result into another variable in memory Write a program to multiply two numbers located in memory, write the result into another variable in memory
10/11/2011
40
Procedure Calling
Steps required
1. 2. 3. 4. 5. 6. Place parameters in registers Transfer control to procedure Acquire storage for procedure Perform procedures operations Place result in register for caller Return to place of call
10/11/2011
41
Register Usage
$a0 $a3: arguments (regs 4 7) $v0, $v1: result values (regs 2 and 3) $t0 $t9: temporaries (regs 8-15, 24, 25)
Can be overwritten by callee
$gp: global pointer for static data (reg 28) $sp: stack pointer (reg 29) $fp: frame pointer (reg 30) $ra: return address (reg 31)
10/11/2011 42
Procedure declaration
Just like main procedure
.data msg: .asciiz "The sum of the two numbers is: " .text la $a0, msg # load address of print heading li $v0, 4 # specify Print String service syscall # print the message .. # codes jr $ra # return
10/11/2011 44
Non-Leaf Procedures
Procedures that call other procedures For nested call, caller needs to save on the stack:
Its return address Any arguments and temporaries needed after the call
10/11/2011
47
10/11/2011
48
10/11/2011
49
Memory Layout
Text: program code Static data: global variables
e.g., static variables in C, constant arrays and strings $gp initialized to address allowing offsets into this segment
10/11/2011
50
Exercise
Write a program to print the fibonaci sequence, the number of sequence is located in memory Write a program to print the sum of the first N natural numbers (1+2+3+..+N) Write a program to print the value of factorial N (N!) Write a program to print the sum of an array of integer
10/11/2011 51
Exercise
Write a program to print the value of factorial N (N!) in a recursive procedure Write a program to print the product of two integer numbers (a*b) by an addition procedure Write a program to print the dividend of two integer numbers (a/b) by a recursive subtraction procedure Write a program to print the first N items of the fibonaci sequence by a recursive procedure
Hint: use two parameters instead of one
10/11/2011
52
Character Data
Byte-encoded character sets
ASCII: 128 characters
95 graphic, 33 control
Byte/Halfword Operations
Could use bitwise operations MIPS byte/halfword load/store
String processing is a common case
lb rt, offset(rs) lbu rt, offset(rs) sb rt, offset(rs) lh rt, offset(rs) lhu rt, offset(rs) sh rt, offset(rs)
Sign extend to 32 bits in rt Zero extend to 32 bits in rt Store just rightmost byte/halfword
10/11/2011 54
$sp, $s0, $s0, $t1, $t2, $t3, $t2, $t2, $s0, L1 $s0, $sp, $ra
$sp, -4 0($sp) $zero, $zero $s0, $a1 0($t1) $s0, $a0 0($t3) $zero, L2 $s0, 1 0($sp) $sp, 4
# # # # # # # # # # # # #
adjust stack for 1 item save $s0 i = 0 addr of y[i] in $t1 $t2 = y[i] addr of x[i] in $t3 x[i] = y[i] exit loop if y[i] == 0 i = i + 1 next iteration of loop restore saved $s0 pop 1 item from stack and return
56
32-bit Constants
Most constants are small
16-bit immediate is sufficient
ori $s0, $s0, 2304 0000 0000 0111 1101 0000 1001 0000 0000
10/11/2011 57
Branch Addressing
Branch instructions specify
Opcode, two registers, target address
rs
5 bits
rt
5 bits
constant or address
16 bits
PC-relative addressing
Target address = PC + offset 4 PC already incremented by 4 by this time
10/11/2011 58
Jump Addressing
Jump (j and jal) targets could be anywhere in text segment
Encode full address in instruction
op
6 bits
address
26 bits
10/11/2011
59
0 0 35 5 8 2
0 9 9 8 19
19 22 8 21 19
9 9
4 0 0 2 1
0 32
Loop
20000
10/11/2011
61
10/11/2011
62
10/11/2011
63
Concluding Remarks
Measure MIPS instruction executions in benchmark programs
Consider making the common case fast Consider compromises
Instruction class Arithmetic Data transfer Logical Cond. Branch Jump
10/11/2011
MIPS examples add, sub, addi lw, sw, lb, lbu, lh, lhu, sb, lui and, or, nor, andi, ori, sll, srl beq, bne, slt, slti, sltiu j, jr, jal
End of chapter
Try to practice programming with MIPS as much as possible The more you practice programming the higher score you may achieve!
10/11/2011
65