Branches and Procedure Calls

27
1 Branches and Procedure Branches and Procedure Calls Calls Lecture 14 Digital Design and Computer Architecture Harris & Harris Morgan Kaufmann / Elsevier, 2007

description

Branches and Procedure Calls. Lecture 14 Digital Design and Computer Architecture Harris & Harris Morgan Kaufmann / Elsevier, 2007. Review: Instructions, Operands. Instructions add, sub, addi, and, lw, sw, etc. Operands Registers Memory Immediates (constants). Review: MIPS Register Set. - PowerPoint PPT Presentation

Transcript of Branches and Procedure Calls

Page 1: Branches and Procedure Calls

1

Branches and Procedure CallsBranches and Procedure Calls

Lecture 14Digital Design and Computer Architecture

Harris & HarrisMorgan Kaufmann / Elsevier, 2007

Page 2: Branches and Procedure Calls

2

Review: Instructions, OperandsReview: Instructions, Operands

• Instructions– add, sub, addi, and, lw, sw, etc.

• Operands– Registers– Memory– Immediates (constants)

Page 3: Branches and Procedure Calls

3

Review: MIPS Register SetReview: MIPS Register Set

Name Reg Usage$0 0 Const 0$v0-$v1 2-3 Results & Expr. Eval.$a0-$a3 4-7 Procedure arguments$t0-$t7 8-15 Temporaries$s0-$s7 16-23 Saved variables$t8-$t9 24-25 More Temporaries$gp 28 Global Pointer$sp 29 Stack Pointer$fp 30 Frame Pointer$ra 31 Return address

Page 4: Branches and Procedure Calls

4

Review: MIPS MemoryReview: MIPS Memory

WordAddress

0000000C F E D C

00000008

00000004

00000000

MSB LSB

B A 9 8

7 6 5 4

3 2 1 0

Page 5: Branches and Procedure Calls

5

MIPS Memory: Big- and Little-EndianMIPS Memory: Big- and Little-Endian

WordAddress

0000000C F E D C

00000008

00000004

00000000

MSB LSB

B A 9 8

7 6 5 4

3 2 1 0

WordAddress

0000000C C D E F

00000008

00000004

00000000

MSB LSB

8 9 A B

4 5 6 7

0 1 2 3

Little-Endian: Big-Endian:

Page 6: Branches and Procedure Calls

6

Review: Instruction FormatsReview: Instruction Formats

op rs rt rd shamt funct6 bits 5 bits 5 bits 5 bits 5 bits 6 bits

R-Type

op rs rt imm6 bits 5 bits 5 bits 16 bits

I-Type

op addr6 bits 26 bits

J-Type

Page 7: Branches and Procedure Calls

7

Shift InstructionsShift Instructions# shift left sll $t0, $s1, 2 # $t0 <= $s1 << 2

# shift right logical srl $t0, $s1, 2 # $t0 <= $s1 >> 2

# shift right arithmetic sra $t0, $s1, 2 # $t0 <= $s1 >>> 2

Page 8: Branches and Procedure Calls

8

Shift InstructionsShift Instructions

sll $t0, $s1, 2

srl $s2, $s1, 2

sra $s3, $s1, 2

Assembly Code

0 0 17 8 2 0

Field Valuesop rs rt rd shamt funct

6 bits 5 bits 5 bits 5 bits 5 bits 6 bits

0 0 17 18 2 2

0 0 17 19 2 3

000000 00000 10001 01000 00010 000000

op rs rt rd shamt funct

Machine Code

6 bits 5 bits 5 bits 5 bits 5 bits 6 bits

000000 00000 10001 10010 00010 000010

000000 00000 10001 10011 00010 000011

(0x00114080)

(0x00119082)

(0x00119883)

Page 9: Branches and Procedure Calls

9

Review: The Stored ProgramReview: The Stored Program

addi $t0, $s3, -12

Machine CodeAssembly Code

lw $t2, 32($0)

add $s0, $s1, $s2

sub $t0, $t3, $t5

0x8C0A0020

0x02328020

0x2268FFF4

0x016D4022

Address Instructions

0040000C 0 1 6 D 4 0 2 2

2 2 6 8 F F F 4

0 2 3 2 8 0 2 0

8 C 0 A 0 0 2 0

00400008

00400004

00400000

Stored Program

Main Memory

PC

Page 10: Branches and Procedure Calls

10

BranchingBranchingConditional Branching:• branch if equal (beq)• branch if not equal (bne)

Unconditional Branching:• jump (j)• jump register (jr)• jump and link (jal)

Page 11: Branches and Procedure Calls

11

Conditional Branching (Conditional Branching (beqbeq))# MIPS assembly

addi $s0, $0, 4 # $s0 = 0 + 4 = 4 addi $s1, $0, 1 # $s1 = 0 + 1 = 1 sll $s1, $s1, 2 # $s1 = 1 << 2 = 4 beq $s0, $s1, target addi $s1, $s1, 1 sub $s1, $s1, $s0

target: add $s1, $s1, $s0 # $s1 = 4 + 4 = 8

Page 12: Branches and Procedure Calls

12

Conditional Branching (Conditional Branching (bnebne))# MIPS assembly addi $s0, $0, 4 # $s0 = 0 + 4 = 4 addi $s1, $0, 1 # $s1 = 0 + 1 = 1 sll $s1, $s1, 2 # $s1 = 1 << 2 = 4 bne $s0, $s1, target addi $s1, $s1, 1 sub $s1, $s1, $s0

target: add $s1, $s1, $s0 # $s1 = 1 + 4 = 5

Page 13: Branches and Procedure Calls

13

Unconditional Branching (Unconditional Branching (jj))# MIPS assembly

addi $s0, $0, 4 # $s0 = 4 addi $s1, $0, 1 # $s1 = 1 j target # jump to target sra $s1, $s1, 2 # not executed addi $s1, $s1, 1 # not executed sub $s1, $s1, $s0 # not executed

target: add $s1, $s1, $s0 # $s1 = 1 + 4 = 5

Page 14: Branches and Procedure Calls

14

Unconditional Branching (Unconditional Branching (jrjr))# MIPS assembly

0x00002000 addi $s0, $0, 0x20100x00002004 jr $s0

0x00002008 addi $s1, $0, 10x0000200C sra $s1, $s1, 20x00002010 lw $s3, 44($s1)

Page 15: Branches and Procedure Calls

15

High-Level Code ConstructsHigh-Level Code Constructs

• If/Else Statements• While Loops• For Loops

Page 16: Branches and Procedure Calls

16

If StatementIf Statement// high-level codeif (i == j) f = g + h;f = f - i;

// MIPS assembly# $s0 = f, $s1 = g, $s2 = h, $s3 = i, $s4 = j

Page 17: Branches and Procedure Calls

17

If / Else StatementIf / Else Statement// high-level codeif (i == j) f = g + h;else f = f - i;

// MIPS assembly# $s0 = f, $s1 = g, $s2 = h, $s3 = i, $s4 = j

Page 18: Branches and Procedure Calls

18

While LoopsWhile Loops// high-level codeint result = 5;while (result > 0) { result = result - 1;}

// MIPS assembly# $s0 = result

Page 19: Branches and Procedure Calls

19

For LoopsFor Loops// high-level codeint sum = 0;for (i=0; i != 10; i = i+1) sum = sum + i;

// MIPS assembly# $s0 = i, $s1 = sum

Page 20: Branches and Procedure Calls

20

For Loops: Using sltFor Loops: Using slt// high-level codeint sum = 0;for (i = 1; i < 101; i = i * 2) sum = sum + i;

Page 21: Branches and Procedure Calls

21

For Loops: Using sltFor Loops: Using slt# MIPS assembly code# $s0 = i, $s1 = sum addi $s1, $0, 0 # sum = 0 addi $s0, $0, 1 # i = 1 addi $t0, $0, 101 # $t0 = 101

loop: slt $t1, $s0, $t0 # if (i < 101) $t1 = 1, else $t1 =

0 beq $t1, $0, done # if $t1 == 0 (i >= 101), branch

to done add $s1, $s1, $s0 # sum = sum + i sll $s0, $s0, 1 # i = i * 2 j loop

done:

Page 22: Branches and Procedure Calls

22

Procedure CallsProcedure CallsDefinitions• Caller: calling procedure• Callee: called procedure

How it works• Caller needs to call a procedure without any unintended side

effects• Callee returns to point of call (place it was called from) when done• Caller passes arguments to callee• Callee returns result to caller

Page 23: Branches and Procedure Calls

23

Procedure CallsProcedure Calls// high-level codeint main() { simple(); ...}// void means the function returns no valuevoid simple(){ return;}

Page 24: Branches and Procedure Calls

24

Procedure CallsProcedure Calls# MIPS assembly code0x00400200 main: jal simple 0x00400204 add $s0, $s1, $s2...

0x00401020 simple: jr $ra

Page 25: Branches and Procedure Calls

25

Input Arguments, Return ValuesInput Arguments, Return Values

// high-level codeint main() { int y; ... y = diffofsums(2, 3, 4, 5); ...}

int diffofsums(int f, int g, int h, int i){ int result;

result = (f + g) - (h + i); return result;}

Page 26: Branches and Procedure Calls

26

Input Arguments, Return ValuesInput Arguments, Return Values# MIPS assembly# $s0 = y

main: ... addi $a0, $0, 2 # argument 0 = 2 addi $a1, $0, 3 # argument 1 = 3 addi $a2, $0, 4 # argument 2 = 4 addi $a3, $0, 5 # argument 3 = 5 jal diffofsums # call procedure add $s0, $v0, $0 # y = returned value ...

# $s0 = resultdiffofsums: add $t0, $a0, $a1 # $t0 = f + g add $t1, $a2, $a3 # $t1 = h + i sub $s0, $t0, $t1 # result = = (f + g) - (h + i) add $v0, $s0, $0 # put return value in $v0 jr $ra # return to caller

Page 27: Branches and Procedure Calls

27

Next TimeNext Time

• More on Procedures• Addressing Modes• Linking and Launching Applications