branches and procedure calls
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 PresentationTRANSCRIPT
![Page 1: Branches and Procedure Calls](https://reader036.vdocument.in/reader036/viewer/2022062810/56815a6e550346895dc7ce1e/html5/thumbnails/1.jpg)
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](https://reader036.vdocument.in/reader036/viewer/2022062810/56815a6e550346895dc7ce1e/html5/thumbnails/2.jpg)
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](https://reader036.vdocument.in/reader036/viewer/2022062810/56815a6e550346895dc7ce1e/html5/thumbnails/3.jpg)
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](https://reader036.vdocument.in/reader036/viewer/2022062810/56815a6e550346895dc7ce1e/html5/thumbnails/4.jpg)
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](https://reader036.vdocument.in/reader036/viewer/2022062810/56815a6e550346895dc7ce1e/html5/thumbnails/5.jpg)
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](https://reader036.vdocument.in/reader036/viewer/2022062810/56815a6e550346895dc7ce1e/html5/thumbnails/6.jpg)
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](https://reader036.vdocument.in/reader036/viewer/2022062810/56815a6e550346895dc7ce1e/html5/thumbnails/7.jpg)
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](https://reader036.vdocument.in/reader036/viewer/2022062810/56815a6e550346895dc7ce1e/html5/thumbnails/8.jpg)
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](https://reader036.vdocument.in/reader036/viewer/2022062810/56815a6e550346895dc7ce1e/html5/thumbnails/9.jpg)
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](https://reader036.vdocument.in/reader036/viewer/2022062810/56815a6e550346895dc7ce1e/html5/thumbnails/10.jpg)
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](https://reader036.vdocument.in/reader036/viewer/2022062810/56815a6e550346895dc7ce1e/html5/thumbnails/11.jpg)
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](https://reader036.vdocument.in/reader036/viewer/2022062810/56815a6e550346895dc7ce1e/html5/thumbnails/12.jpg)
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](https://reader036.vdocument.in/reader036/viewer/2022062810/56815a6e550346895dc7ce1e/html5/thumbnails/13.jpg)
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](https://reader036.vdocument.in/reader036/viewer/2022062810/56815a6e550346895dc7ce1e/html5/thumbnails/14.jpg)
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](https://reader036.vdocument.in/reader036/viewer/2022062810/56815a6e550346895dc7ce1e/html5/thumbnails/15.jpg)
15
High-Level Code ConstructsHigh-Level Code Constructs
• If/Else Statements• While Loops• For Loops
![Page 16: Branches and Procedure Calls](https://reader036.vdocument.in/reader036/viewer/2022062810/56815a6e550346895dc7ce1e/html5/thumbnails/16.jpg)
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](https://reader036.vdocument.in/reader036/viewer/2022062810/56815a6e550346895dc7ce1e/html5/thumbnails/17.jpg)
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](https://reader036.vdocument.in/reader036/viewer/2022062810/56815a6e550346895dc7ce1e/html5/thumbnails/18.jpg)
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](https://reader036.vdocument.in/reader036/viewer/2022062810/56815a6e550346895dc7ce1e/html5/thumbnails/19.jpg)
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](https://reader036.vdocument.in/reader036/viewer/2022062810/56815a6e550346895dc7ce1e/html5/thumbnails/20.jpg)
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](https://reader036.vdocument.in/reader036/viewer/2022062810/56815a6e550346895dc7ce1e/html5/thumbnails/21.jpg)
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](https://reader036.vdocument.in/reader036/viewer/2022062810/56815a6e550346895dc7ce1e/html5/thumbnails/22.jpg)
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](https://reader036.vdocument.in/reader036/viewer/2022062810/56815a6e550346895dc7ce1e/html5/thumbnails/23.jpg)
23
Procedure CallsProcedure Calls// high-level codeint main() { simple(); ...}// void means the function returns no valuevoid simple(){ return;}
![Page 24: Branches and Procedure Calls](https://reader036.vdocument.in/reader036/viewer/2022062810/56815a6e550346895dc7ce1e/html5/thumbnails/24.jpg)
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](https://reader036.vdocument.in/reader036/viewer/2022062810/56815a6e550346895dc7ce1e/html5/thumbnails/25.jpg)
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](https://reader036.vdocument.in/reader036/viewer/2022062810/56815a6e550346895dc7ce1e/html5/thumbnails/26.jpg)
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](https://reader036.vdocument.in/reader036/viewer/2022062810/56815a6e550346895dc7ce1e/html5/thumbnails/27.jpg)
27
Next TimeNext Time
• More on Procedures• Addressing Modes• Linking and Launching Applications