![Page 1: M2 – Instruction Set Architecturebt.nitk.ac.in/c/17b/co200/notes/M2-3.SubroutineCalls-A.pdf · Instruction classes. MIPS-I ISA. Translating and starting a program. High level languages,](https://reader030.vdocuments.us/reader030/viewer/2022040712/5e1769860e46a70b7702b3b1/html5/thumbnails/1.jpg)
M2 – Instruction Set Architecture
![Page 2: M2 – Instruction Set Architecturebt.nitk.ac.in/c/17b/co200/notes/M2-3.SubroutineCalls-A.pdf · Instruction classes. MIPS-I ISA. Translating and starting a program. High level languages,](https://reader030.vdocuments.us/reader030/viewer/2022040712/5e1769860e46a70b7702b3b1/html5/thumbnails/2.jpg)
Module Outline● Addressing modes. Instruction classes.● MIPS-I ISA.● Translating and starting a program.● High level languages, Assembly languages
and object code.● Subroutine and subroutine call. Use of stack
for handling subroutine call and return.
![Page 3: M2 – Instruction Set Architecturebt.nitk.ac.in/c/17b/co200/notes/M2-3.SubroutineCalls-A.pdf · Instruction classes. MIPS-I ISA. Translating and starting a program. High level languages,](https://reader030.vdocuments.us/reader030/viewer/2022040712/5e1769860e46a70b7702b3b1/html5/thumbnails/3.jpg)
Subroutine Calls
![Page 4: M2 – Instruction Set Architecturebt.nitk.ac.in/c/17b/co200/notes/M2-3.SubroutineCalls-A.pdf · Instruction classes. MIPS-I ISA. Translating and starting a program. High level languages,](https://reader030.vdocuments.us/reader030/viewer/2022040712/5e1769860e46a70b7702b3b1/html5/thumbnails/4.jpg)
Subroutines in MIPS
● Subroutine Call – jal subname– Saves return address in R31 ($ra) and jumps to
subroutine entry label subname
![Page 5: M2 – Instruction Set Architecturebt.nitk.ac.in/c/17b/co200/notes/M2-3.SubroutineCalls-A.pdf · Instruction classes. MIPS-I ISA. Translating and starting a program. High level languages,](https://reader030.vdocuments.us/reader030/viewer/2022040712/5e1769860e46a70b7702b3b1/html5/thumbnails/5.jpg)
Subroutines in MIPS
● Subroutine Call – jal subname– Saves return address in R31 ($ra) and jumps to
subroutine entry label subname
● Subroutine Return – jr $31– Loads PC with return address in $31
![Page 6: M2 – Instruction Set Architecturebt.nitk.ac.in/c/17b/co200/notes/M2-3.SubroutineCalls-A.pdf · Instruction classes. MIPS-I ISA. Translating and starting a program. High level languages,](https://reader030.vdocuments.us/reader030/viewer/2022040712/5e1769860e46a70b7702b3b1/html5/thumbnails/6.jpg)
Subroutines in MIPS
# main program........jal func1............
CallerCaller
0x100
0x104
0x0FC
![Page 7: M2 – Instruction Set Architecturebt.nitk.ac.in/c/17b/co200/notes/M2-3.SubroutineCalls-A.pdf · Instruction classes. MIPS-I ISA. Translating and starting a program. High level languages,](https://reader030.vdocuments.us/reader030/viewer/2022040712/5e1769860e46a70b7702b3b1/html5/thumbnails/7.jpg)
Subroutines in MIPS
# main program........jal func1............
CallerCaller
0x100
0x104
0x0FC
0x1040x104PC
![Page 8: M2 – Instruction Set Architecturebt.nitk.ac.in/c/17b/co200/notes/M2-3.SubroutineCalls-A.pdf · Instruction classes. MIPS-I ISA. Translating and starting a program. High level languages,](https://reader030.vdocuments.us/reader030/viewer/2022040712/5e1769860e46a70b7702b3b1/html5/thumbnails/8.jpg)
Subroutines in MIPS
# main program........jal func1............
CallerCaller
0x100
0x104
0x0FC
0x1040x104PC
func1:........jr $ra
CalleeCallee
0x200
0x240
![Page 9: M2 – Instruction Set Architecturebt.nitk.ac.in/c/17b/co200/notes/M2-3.SubroutineCalls-A.pdf · Instruction classes. MIPS-I ISA. Translating and starting a program. High level languages,](https://reader030.vdocuments.us/reader030/viewer/2022040712/5e1769860e46a70b7702b3b1/html5/thumbnails/9.jpg)
Subroutines in MIPS
# main program........jal func1............
CallerCaller
0x1040x104R31
0x100
0x104
0x0FC
0x1040x104PC
func1:........jr $ra
CalleeCallee
0x200
0x240
![Page 10: M2 – Instruction Set Architecturebt.nitk.ac.in/c/17b/co200/notes/M2-3.SubroutineCalls-A.pdf · Instruction classes. MIPS-I ISA. Translating and starting a program. High level languages,](https://reader030.vdocuments.us/reader030/viewer/2022040712/5e1769860e46a70b7702b3b1/html5/thumbnails/10.jpg)
Subroutines in MIPS
# main program........jal func1............
CallerCaller
0x1040x104R31
0x100
0x104
0x0FC
0x2000x200PC
func1:........jr $ra
CalleeCallee
0x200
0x240
![Page 11: M2 – Instruction Set Architecturebt.nitk.ac.in/c/17b/co200/notes/M2-3.SubroutineCalls-A.pdf · Instruction classes. MIPS-I ISA. Translating and starting a program. High level languages,](https://reader030.vdocuments.us/reader030/viewer/2022040712/5e1769860e46a70b7702b3b1/html5/thumbnails/11.jpg)
Subroutines in MIPS
# main program........jal func1............
func1:........jr $ra
CallerCaller
CalleeCallee
0x1040x104R31
0x100
0x104
0x0FC
0x200
0x240
0x2440x244PC
![Page 12: M2 – Instruction Set Architecturebt.nitk.ac.in/c/17b/co200/notes/M2-3.SubroutineCalls-A.pdf · Instruction classes. MIPS-I ISA. Translating and starting a program. High level languages,](https://reader030.vdocuments.us/reader030/viewer/2022040712/5e1769860e46a70b7702b3b1/html5/thumbnails/12.jpg)
Subroutines in MIPS
# main program........jal func1............
func1:........jr $ra
CallerCaller
CalleeCallee
0x1040x104R31
0x100
0x104
0x0FC
0x200
0x240
0x1040x104PC
![Page 13: M2 – Instruction Set Architecturebt.nitk.ac.in/c/17b/co200/notes/M2-3.SubroutineCalls-A.pdf · Instruction classes. MIPS-I ISA. Translating and starting a program. High level languages,](https://reader030.vdocuments.us/reader030/viewer/2022040712/5e1769860e46a70b7702b3b1/html5/thumbnails/13.jpg)
Subroutines in MIPS
# main program........jal func1............
func1:........jr $ra
CallerCaller
CalleeCallee
0x1040x104R31
0x100
0x104
0x0FC
0x200
0x240
0x1040x104PC
![Page 14: M2 – Instruction Set Architecturebt.nitk.ac.in/c/17b/co200/notes/M2-3.SubroutineCalls-A.pdf · Instruction classes. MIPS-I ISA. Translating and starting a program. High level languages,](https://reader030.vdocuments.us/reader030/viewer/2022040712/5e1769860e46a70b7702b3b1/html5/thumbnails/14.jpg)
Registers Usage Convention
![Page 15: M2 – Instruction Set Architecturebt.nitk.ac.in/c/17b/co200/notes/M2-3.SubroutineCalls-A.pdf · Instruction classes. MIPS-I ISA. Translating and starting a program. High level languages,](https://reader030.vdocuments.us/reader030/viewer/2022040712/5e1769860e46a70b7702b3b1/html5/thumbnails/15.jpg)
Subroutines – Parameter Passing# main program........add R4, R0, R16add R5, R0, R17jal func1............
func1:........jr $ra
0x200
0x240
![Page 16: M2 – Instruction Set Architecturebt.nitk.ac.in/c/17b/co200/notes/M2-3.SubroutineCalls-A.pdf · Instruction classes. MIPS-I ISA. Translating and starting a program. High level languages,](https://reader030.vdocuments.us/reader030/viewer/2022040712/5e1769860e46a70b7702b3b1/html5/thumbnails/16.jpg)
Subroutines – Parameter Passing# main program........add $a0, $zero, $s0add $a1, $zero, $s1jal accArrayprint $v0............
accArray:add $v0, $zero, $zeroloop:beq $a0, $zero, donelw $t0, 0($a1)add $v0, $v0, $t0addiu $a1, $a1, 4addi $a0, $a0, -1j loopdone:jr $ra
![Page 17: M2 – Instruction Set Architecturebt.nitk.ac.in/c/17b/co200/notes/M2-3.SubroutineCalls-A.pdf · Instruction classes. MIPS-I ISA. Translating and starting a program. High level languages,](https://reader030.vdocuments.us/reader030/viewer/2022040712/5e1769860e46a70b7702b3b1/html5/thumbnails/17.jpg)
Subroutines – Parameter Passing● Caller saves parameters in $a0 - $a3
![Page 18: M2 – Instruction Set Architecturebt.nitk.ac.in/c/17b/co200/notes/M2-3.SubroutineCalls-A.pdf · Instruction classes. MIPS-I ISA. Translating and starting a program. High level languages,](https://reader030.vdocuments.us/reader030/viewer/2022040712/5e1769860e46a70b7702b3b1/html5/thumbnails/18.jpg)
Subroutines – Parameter Passing● Caller saves parameters in $a0 - $a3● Callee stores results in $v0, $v1.
![Page 19: M2 – Instruction Set Architecturebt.nitk.ac.in/c/17b/co200/notes/M2-3.SubroutineCalls-A.pdf · Instruction classes. MIPS-I ISA. Translating and starting a program. High level languages,](https://reader030.vdocuments.us/reader030/viewer/2022040712/5e1769860e46a70b7702b3b1/html5/thumbnails/19.jpg)
Subroutines – Parameter Passing● Caller saves parameters in $a0 - $a3● Callee stores results in $v0, $v1.● How does the caller pass more than 4
parameters to the callee?
![Page 20: M2 – Instruction Set Architecturebt.nitk.ac.in/c/17b/co200/notes/M2-3.SubroutineCalls-A.pdf · Instruction classes. MIPS-I ISA. Translating and starting a program. High level languages,](https://reader030.vdocuments.us/reader030/viewer/2022040712/5e1769860e46a70b7702b3b1/html5/thumbnails/20.jpg)
Subroutines – Parameter Passing● Caller saves parameters in $a0 - $a3● Callee stores results in $v0, $v1.● How does the caller pass more than 4
parameters to the callee?● Program stack
![Page 21: M2 – Instruction Set Architecturebt.nitk.ac.in/c/17b/co200/notes/M2-3.SubroutineCalls-A.pdf · Instruction classes. MIPS-I ISA. Translating and starting a program. High level languages,](https://reader030.vdocuments.us/reader030/viewer/2022040712/5e1769860e46a70b7702b3b1/html5/thumbnails/21.jpg)
Subroutines – Parameter Passing● Caller saves parameters in $a0 - $a3● Callee stores results in $v0, $v1.● How does the caller pass more than 4
parameters to the callee?● Program stack
![Page 22: M2 – Instruction Set Architecturebt.nitk.ac.in/c/17b/co200/notes/M2-3.SubroutineCalls-A.pdf · Instruction classes. MIPS-I ISA. Translating and starting a program. High level languages,](https://reader030.vdocuments.us/reader030/viewer/2022040712/5e1769860e46a70b7702b3b1/html5/thumbnails/22.jpg)
The MIPS StackSTACK
0xFC
0xF8
0x7FFF FFF40x7FFF FFF4
94
71
10
...
...
...
...
...
...
...
...
...
R29 = $sp
0xF40xF00xEC
$sp
![Page 23: M2 – Instruction Set Architecturebt.nitk.ac.in/c/17b/co200/notes/M2-3.SubroutineCalls-A.pdf · Instruction classes. MIPS-I ISA. Translating and starting a program. High level languages,](https://reader030.vdocuments.us/reader030/viewer/2022040712/5e1769860e46a70b7702b3b1/html5/thumbnails/23.jpg)
The MIPS StackSTACK
0xFC
0xF8
0x7FFF FFF40x7FFF FFF4
94
71
10
...
...
...
...
...
...
...
...
...
R29 = $sp
0xF40xF00xEC
$sp
● Push the value in $t0 on the stack
![Page 24: M2 – Instruction Set Architecturebt.nitk.ac.in/c/17b/co200/notes/M2-3.SubroutineCalls-A.pdf · Instruction classes. MIPS-I ISA. Translating and starting a program. High level languages,](https://reader030.vdocuments.us/reader030/viewer/2022040712/5e1769860e46a70b7702b3b1/html5/thumbnails/24.jpg)
The MIPS StackSTACK
0xFC
0xF8
0x7FFF FFF00x7FFF FFF0
94
71
10
...
...
...
...
...
...
...
...
...
$sp (R29)
0xF40xF00xEC
$sp 9999
● Push the value in $t0 on the stack
![Page 25: M2 – Instruction Set Architecturebt.nitk.ac.in/c/17b/co200/notes/M2-3.SubroutineCalls-A.pdf · Instruction classes. MIPS-I ISA. Translating and starting a program. High level languages,](https://reader030.vdocuments.us/reader030/viewer/2022040712/5e1769860e46a70b7702b3b1/html5/thumbnails/25.jpg)
The MIPS StackSTACK
0xFC
0xF8
0x7FFF FFF00x7FFF FFF0
94
71
10
...
...
...
...
...
...
...
...
...
$sp (R29)
0xF40xF00xEC
$sp 9999
● Push the value in $t0 on the stack
addi $sp, $sp, -4sw $t0, 0($sp)
PushPush
![Page 26: M2 – Instruction Set Architecturebt.nitk.ac.in/c/17b/co200/notes/M2-3.SubroutineCalls-A.pdf · Instruction classes. MIPS-I ISA. Translating and starting a program. High level languages,](https://reader030.vdocuments.us/reader030/viewer/2022040712/5e1769860e46a70b7702b3b1/html5/thumbnails/26.jpg)
The MIPS Stack
STACK
0xFC
0xF8
0x7FFF FFF40x7FFF FFF4
94
71
10
...
...
...
...
...
...
...
...
...
$sp (R29)
0xF40xF00xEC
$sp9999
● Pop into $t1
![Page 27: M2 – Instruction Set Architecturebt.nitk.ac.in/c/17b/co200/notes/M2-3.SubroutineCalls-A.pdf · Instruction classes. MIPS-I ISA. Translating and starting a program. High level languages,](https://reader030.vdocuments.us/reader030/viewer/2022040712/5e1769860e46a70b7702b3b1/html5/thumbnails/27.jpg)
The MIPS Stack
STACK
0xFC
0xF8
0x7FFF FFF40x7FFF FFF4
94
71
10
...
...
...
...
...
...
...
...
...
$sp (R29)
0xF40xF00xEC
$sp9999
lw $t1, 0($sp)addi $sp, $sp, +4
PopPop
● Pop into $t1
![Page 28: M2 – Instruction Set Architecturebt.nitk.ac.in/c/17b/co200/notes/M2-3.SubroutineCalls-A.pdf · Instruction classes. MIPS-I ISA. Translating and starting a program. High level languages,](https://reader030.vdocuments.us/reader030/viewer/2022040712/5e1769860e46a70b7702b3b1/html5/thumbnails/28.jpg)
Subroutines – Parameter Passing
# main program# 6 parameters to func1...........jal func1............
...
$sp
......
...
...
...
Before parameters pushedBefore parameters pushed
![Page 29: M2 – Instruction Set Architecturebt.nitk.ac.in/c/17b/co200/notes/M2-3.SubroutineCalls-A.pdf · Instruction classes. MIPS-I ISA. Translating and starting a program. High level languages,](https://reader030.vdocuments.us/reader030/viewer/2022040712/5e1769860e46a70b7702b3b1/html5/thumbnails/29.jpg)
Subroutines – Parameter Passing
# main program# 6 parameters to func1........# 4 args are in $a0 - $a3...# push 2 on stack......jal func1............
...
$sp
......
...
...
...
Before parameters pushedBefore parameters pushed
![Page 30: M2 – Instruction Set Architecturebt.nitk.ac.in/c/17b/co200/notes/M2-3.SubroutineCalls-A.pdf · Instruction classes. MIPS-I ISA. Translating and starting a program. High level languages,](https://reader030.vdocuments.us/reader030/viewer/2022040712/5e1769860e46a70b7702b3b1/html5/thumbnails/30.jpg)
Subroutines – Parameter Passing
# main program# 6 parameters to func1........# 4 args are in $a0 - $a3...# push 2 on stackaddi $sp, $sp, -8sw $t0, 0($sp)sw $t1, -4($sp)jal func1............
...
$sp
......
...
...
...
Before parameters pushedBefore parameters pushed
![Page 31: M2 – Instruction Set Architecturebt.nitk.ac.in/c/17b/co200/notes/M2-3.SubroutineCalls-A.pdf · Instruction classes. MIPS-I ISA. Translating and starting a program. High level languages,](https://reader030.vdocuments.us/reader030/viewer/2022040712/5e1769860e46a70b7702b3b1/html5/thumbnails/31.jpg)
Subroutines – Parameter Passing
# main program# 6 parameters to func1........# 4 args are in $a0 - $a3...# push 2 on stackaddi $sp, $sp, -8sw $t0, 0($sp)sw $t1, -4($sp)jal func1............
...$t0$sp
$t1
......
...
...
...
Stack after parameters are pushedStack after parameters are pushed
![Page 32: M2 – Instruction Set Architecturebt.nitk.ac.in/c/17b/co200/notes/M2-3.SubroutineCalls-A.pdf · Instruction classes. MIPS-I ISA. Translating and starting a program. High level languages,](https://reader030.vdocuments.us/reader030/viewer/2022040712/5e1769860e46a70b7702b3b1/html5/thumbnails/32.jpg)
Subroutines – Parameter Passing
# main program# 6 parameters to func1........# 4 args are in $a0 - $a3...# push 2 on stackaddi $sp, $sp, -8sw $t0, 0($sp)sw $t1, -4($sp)jal func1............
...$t0$sp
$t1
......
...
...
...
func1:....lw $t4, 0($sp)lw $t5, -4($sp)........
Stack after parameters are pushedStack after parameters are pushed
![Page 33: M2 – Instruction Set Architecturebt.nitk.ac.in/c/17b/co200/notes/M2-3.SubroutineCalls-A.pdf · Instruction classes. MIPS-I ISA. Translating and starting a program. High level languages,](https://reader030.vdocuments.us/reader030/viewer/2022040712/5e1769860e46a70b7702b3b1/html5/thumbnails/33.jpg)
Nested Subroutines
# main program........jal func1............
func1:....jal func2....jr $ra
![Page 34: M2 – Instruction Set Architecturebt.nitk.ac.in/c/17b/co200/notes/M2-3.SubroutineCalls-A.pdf · Instruction classes. MIPS-I ISA. Translating and starting a program. High level languages,](https://reader030.vdocuments.us/reader030/viewer/2022040712/5e1769860e46a70b7702b3b1/html5/thumbnails/34.jpg)
Nested Subroutines
# main program........jal func1............
func1:....jal func2....jr $ra
Stores return address in $raStores return address in $ra
![Page 35: M2 – Instruction Set Architecturebt.nitk.ac.in/c/17b/co200/notes/M2-3.SubroutineCalls-A.pdf · Instruction classes. MIPS-I ISA. Translating and starting a program. High level languages,](https://reader030.vdocuments.us/reader030/viewer/2022040712/5e1769860e46a70b7702b3b1/html5/thumbnails/35.jpg)
Nested Subroutines
# main program........jal func1............
func1:....jal func2....jr $ra
func2:........jr $ra
Stores return address in $raStores return address in $ra
![Page 36: M2 – Instruction Set Architecturebt.nitk.ac.in/c/17b/co200/notes/M2-3.SubroutineCalls-A.pdf · Instruction classes. MIPS-I ISA. Translating and starting a program. High level languages,](https://reader030.vdocuments.us/reader030/viewer/2022040712/5e1769860e46a70b7702b3b1/html5/thumbnails/36.jpg)
Nested Subroutines
# main program........jal func1............
func1:....jal func2....jr $ra
func2:........jr $ra
Stores return address in $raStores return address in $ra
Stores return address in $raStores return address in $ra
![Page 37: M2 – Instruction Set Architecturebt.nitk.ac.in/c/17b/co200/notes/M2-3.SubroutineCalls-A.pdf · Instruction classes. MIPS-I ISA. Translating and starting a program. High level languages,](https://reader030.vdocuments.us/reader030/viewer/2022040712/5e1769860e46a70b7702b3b1/html5/thumbnails/37.jpg)
Nested Subroutines● func1 overwrites return address in $ra (R31)● Store the current return address in the program
stack
![Page 38: M2 – Instruction Set Architecturebt.nitk.ac.in/c/17b/co200/notes/M2-3.SubroutineCalls-A.pdf · Instruction classes. MIPS-I ISA. Translating and starting a program. High level languages,](https://reader030.vdocuments.us/reader030/viewer/2022040712/5e1769860e46a70b7702b3b1/html5/thumbnails/38.jpg)
Nested Subroutines
...$t0$sp
$t1
......
...
...
...
Stack before func1 is calledStack before func1 is calledfunc1:............
![Page 39: M2 – Instruction Set Architecturebt.nitk.ac.in/c/17b/co200/notes/M2-3.SubroutineCalls-A.pdf · Instruction classes. MIPS-I ISA. Translating and starting a program. High level languages,](https://reader030.vdocuments.us/reader030/viewer/2022040712/5e1769860e46a70b7702b3b1/html5/thumbnails/39.jpg)
Nested Subroutines
$t0
$sp
$t1
...
...
...
...
After pushing $ra on stackAfter pushing $ra on stackfunc1:............
$ra
![Page 40: M2 – Instruction Set Architecturebt.nitk.ac.in/c/17b/co200/notes/M2-3.SubroutineCalls-A.pdf · Instruction classes. MIPS-I ISA. Translating and starting a program. High level languages,](https://reader030.vdocuments.us/reader030/viewer/2022040712/5e1769860e46a70b7702b3b1/html5/thumbnails/40.jpg)
Nested Subroutines
$t0
$sp
$t1
...
...
...
...
After pushing $ra on stackAfter pushing $ra on stackfunc1:addi $sp, $sp, -4sw $ra, 0($sp)............
$ra
![Page 41: M2 – Instruction Set Architecturebt.nitk.ac.in/c/17b/co200/notes/M2-3.SubroutineCalls-A.pdf · Instruction classes. MIPS-I ISA. Translating and starting a program. High level languages,](https://reader030.vdocuments.us/reader030/viewer/2022040712/5e1769860e46a70b7702b3b1/html5/thumbnails/41.jpg)
Nested Subroutines
$t0
$sp
$t1
...
...
...
...
After pushing $ra on stackAfter pushing $ra on stackfunc1:addi $sp, $sp, -4sw $ra, 0($sp)............
$ra
What does the stack look like after func1 passes contents of register $t2 as a parameter to func2 and calls func2?Show the code changes in func1 and func2.
What does the stack look like after func1 passes contents of register $t2 as a parameter to func2 and calls func2?Show the code changes in func1 and func2.
![Page 42: M2 – Instruction Set Architecturebt.nitk.ac.in/c/17b/co200/notes/M2-3.SubroutineCalls-A.pdf · Instruction classes. MIPS-I ISA. Translating and starting a program. High level languages,](https://reader030.vdocuments.us/reader030/viewer/2022040712/5e1769860e46a70b7702b3b1/html5/thumbnails/42.jpg)
Nested Subroutines
$t0
$t1
...
...
...
...
After pushing $ra on stackAfter pushing $ra on stackfunc1:addi $sp, $sp, -4sw $ra, 0($sp)....addi $sp, $sp, -4sw $t2, 0($sp)jal func2........ $ra
func2:addi $sp, $sp, -4sw $ra, 0($sp)....
$t0
$ra
$t2
$sp $ra
![Page 43: M2 – Instruction Set Architecturebt.nitk.ac.in/c/17b/co200/notes/M2-3.SubroutineCalls-A.pdf · Instruction classes. MIPS-I ISA. Translating and starting a program. High level languages,](https://reader030.vdocuments.us/reader030/viewer/2022040712/5e1769860e46a70b7702b3b1/html5/thumbnails/43.jpg)
Stack Frame● Stack Frame: Private
space for a subroutine allocated on entry and deallocated on exit
● Identified by a Frame Pointer ($fp (R30))
$t0
$ra
$sp
func1Frame
func2Frame
$fp
![Page 44: M2 – Instruction Set Architecturebt.nitk.ac.in/c/17b/co200/notes/M2-3.SubroutineCalls-A.pdf · Instruction classes. MIPS-I ISA. Translating and starting a program. High level languages,](https://reader030.vdocuments.us/reader030/viewer/2022040712/5e1769860e46a70b7702b3b1/html5/thumbnails/44.jpg)
Stack Frame
$t0
$ra
$sp
$fp
$sp
$fp
Parameterspassed to
func2
Return Addr
SavedRegisters
Old FP
Stack FrameStack Frame
LocalVariables
func1Frame
func2Frame
![Page 45: M2 – Instruction Set Architecturebt.nitk.ac.in/c/17b/co200/notes/M2-3.SubroutineCalls-A.pdf · Instruction classes. MIPS-I ISA. Translating and starting a program. High level languages,](https://reader030.vdocuments.us/reader030/viewer/2022040712/5e1769860e46a70b7702b3b1/html5/thumbnails/45.jpg)
Stack Frame
$sp
$fp
Parameterspassed to
func2
Return Addr
SavedRegisters
Old FP
Stack FrameStack Frame
LocalVariables
In case this function calls anotherIn case this function calls another
![Page 46: M2 – Instruction Set Architecturebt.nitk.ac.in/c/17b/co200/notes/M2-3.SubroutineCalls-A.pdf · Instruction classes. MIPS-I ISA. Translating and starting a program. High level languages,](https://reader030.vdocuments.us/reader030/viewer/2022040712/5e1769860e46a70b7702b3b1/html5/thumbnails/46.jpg)
Stack Frame
$fp
Parameterspassed to
func2
Return Addr
SavedRegisters
Old FP
Stack FrameStack Frame
LocalVariables
In case callee calls anotherIn case callee calls another
In case callee modifiesIn case callee modifies
$sp
![Page 47: M2 – Instruction Set Architecturebt.nitk.ac.in/c/17b/co200/notes/M2-3.SubroutineCalls-A.pdf · Instruction classes. MIPS-I ISA. Translating and starting a program. High level languages,](https://reader030.vdocuments.us/reader030/viewer/2022040712/5e1769860e46a70b7702b3b1/html5/thumbnails/47.jpg)
Stack Frame
$fp
Parameterspassed to
func2
Return Addr
SavedRegisters
Old FP
Stack FrameStack Frame
LocalVariables
In case callee calls anotherIn case callee calls another
In case callee modifiesIn case callee modifies
Local variables in calleeLocal variables in callee
$sp
![Page 48: M2 – Instruction Set Architecturebt.nitk.ac.in/c/17b/co200/notes/M2-3.SubroutineCalls-A.pdf · Instruction classes. MIPS-I ISA. Translating and starting a program. High level languages,](https://reader030.vdocuments.us/reader030/viewer/2022040712/5e1769860e46a70b7702b3b1/html5/thumbnails/48.jpg)
Stack Frame
$fp
Parameterspassed to
func2
Return Addr
SavedRegisters
Old FP
Stack FrameStack Frame
LocalVariables
In case callee calls anotherIn case callee calls another
In case callee modifiesIn case callee modifies
Local variables in calleeLocal variables in callee
Passes args to another funcPasses args to another func
$sp
![Page 49: M2 – Instruction Set Architecturebt.nitk.ac.in/c/17b/co200/notes/M2-3.SubroutineCalls-A.pdf · Instruction classes. MIPS-I ISA. Translating and starting a program. High level languages,](https://reader030.vdocuments.us/reader030/viewer/2022040712/5e1769860e46a70b7702b3b1/html5/thumbnails/49.jpg)
Stack Frame
$fp
Parameterspassed to
func2
Return Addr
SavedRegisters
Old FP
Stack FrameStack Frame
LocalVariables
$sp
$t0$t0
...
...
$fp
$sp ......
$ra$ra
$fp$fp
$s0$s0
$s1$s1
func1_Xfunc1_X
func1_Yfunc1_Y
![Page 50: M2 – Instruction Set Architecturebt.nitk.ac.in/c/17b/co200/notes/M2-3.SubroutineCalls-A.pdf · Instruction classes. MIPS-I ISA. Translating and starting a program. High level languages,](https://reader030.vdocuments.us/reader030/viewer/2022040712/5e1769860e46a70b7702b3b1/html5/thumbnails/50.jpg)
Frame Pointer
$t0
$t0
...
...
$t1$sp
...
$fp● After entry into a
subroutine:
Before the callBefore the call
![Page 51: M2 – Instruction Set Architecturebt.nitk.ac.in/c/17b/co200/notes/M2-3.SubroutineCalls-A.pdf · Instruction classes. MIPS-I ISA. Translating and starting a program. High level languages,](https://reader030.vdocuments.us/reader030/viewer/2022040712/5e1769860e46a70b7702b3b1/html5/thumbnails/51.jpg)
Frame Pointer
$t0
$t0
...
...
$t1$sp
...
$fp● After entry into a
subroutine:– Save return address
Before the callBefore the call
![Page 52: M2 – Instruction Set Architecturebt.nitk.ac.in/c/17b/co200/notes/M2-3.SubroutineCalls-A.pdf · Instruction classes. MIPS-I ISA. Translating and starting a program. High level languages,](https://reader030.vdocuments.us/reader030/viewer/2022040712/5e1769860e46a70b7702b3b1/html5/thumbnails/52.jpg)
Frame Pointer
$t0
$t0
...
...
$t1$sp
...
$fp● After entry into a
subroutine:– Save return address
– Save frame pointer of the caller function
Before the callBefore the call
![Page 53: M2 – Instruction Set Architecturebt.nitk.ac.in/c/17b/co200/notes/M2-3.SubroutineCalls-A.pdf · Instruction classes. MIPS-I ISA. Translating and starting a program. High level languages,](https://reader030.vdocuments.us/reader030/viewer/2022040712/5e1769860e46a70b7702b3b1/html5/thumbnails/53.jpg)
Frame Pointer
$t0
$t0
...
...
$t1$sp
...
$fp● After entry into a
subroutine:– Save return address
– Save frame pointer of the caller function
– Point the frame pointer to the first location of stack frame of the current subroutine
Before the callBefore the call
![Page 54: M2 – Instruction Set Architecturebt.nitk.ac.in/c/17b/co200/notes/M2-3.SubroutineCalls-A.pdf · Instruction classes. MIPS-I ISA. Translating and starting a program. High level languages,](https://reader030.vdocuments.us/reader030/viewer/2022040712/5e1769860e46a70b7702b3b1/html5/thumbnails/54.jpg)
Frame Pointer
...
...
$ra$sp
...
$fp
callee prologuecallee prologue
● After entry into a subroutine:– Save return address
$t0
$t0
$t1
![Page 55: M2 – Instruction Set Architecturebt.nitk.ac.in/c/17b/co200/notes/M2-3.SubroutineCalls-A.pdf · Instruction classes. MIPS-I ISA. Translating and starting a program. High level languages,](https://reader030.vdocuments.us/reader030/viewer/2022040712/5e1769860e46a70b7702b3b1/html5/thumbnails/55.jpg)
Frame Pointer
...
...
$ra$sp
...
$fp
callee prologuecallee prologue
● After entry into a subroutine:– Save return address
$t0
$t0
$t1addi $sp, $sp, -4sw $ra, 0($sp)
![Page 56: M2 – Instruction Set Architecturebt.nitk.ac.in/c/17b/co200/notes/M2-3.SubroutineCalls-A.pdf · Instruction classes. MIPS-I ISA. Translating and starting a program. High level languages,](https://reader030.vdocuments.us/reader030/viewer/2022040712/5e1769860e46a70b7702b3b1/html5/thumbnails/56.jpg)
Frame Pointer
...
...
$ra
$sp
...
$fp
$fp
● After entry into a subroutine:– Save return address
– Save frame pointer of the caller function $t0
$t0
$t1
callee prologuecallee prologue
![Page 57: M2 – Instruction Set Architecturebt.nitk.ac.in/c/17b/co200/notes/M2-3.SubroutineCalls-A.pdf · Instruction classes. MIPS-I ISA. Translating and starting a program. High level languages,](https://reader030.vdocuments.us/reader030/viewer/2022040712/5e1769860e46a70b7702b3b1/html5/thumbnails/57.jpg)
Frame Pointer
...
...
$ra
$sp
...
$fp
$fp
● After entry into a subroutine:– Save return address
– Save frame pointer of the caller function $t0
$t0
$t1
callee prologuecallee prologue
addi $sp, $sp, -4sw $fp, 0($sp)
![Page 58: M2 – Instruction Set Architecturebt.nitk.ac.in/c/17b/co200/notes/M2-3.SubroutineCalls-A.pdf · Instruction classes. MIPS-I ISA. Translating and starting a program. High level languages,](https://reader030.vdocuments.us/reader030/viewer/2022040712/5e1769860e46a70b7702b3b1/html5/thumbnails/58.jpg)
Frame Pointer
...
...
$ra
$sp
...
$fp
$fp
● After entry into a subroutine:– Save return address
– Save frame pointer of the caller function
– Point the frame pointer to the first location of stack frame of the current subroutine
$t0
$t0
$t1
callee prologuecallee prologue
![Page 59: M2 – Instruction Set Architecturebt.nitk.ac.in/c/17b/co200/notes/M2-3.SubroutineCalls-A.pdf · Instruction classes. MIPS-I ISA. Translating and starting a program. High level languages,](https://reader030.vdocuments.us/reader030/viewer/2022040712/5e1769860e46a70b7702b3b1/html5/thumbnails/59.jpg)
Frame Pointer
...
...
$ra
$sp
...
$fp
$fp
● After entry into a subroutine:– Save return address
– Save frame pointer of the caller function
– Point the frame pointer to the first location of stack frame of the current subroutine
$t0
$t0
$t1
callee prologuecallee prologue
addi $fp, $sp, 4
![Page 60: M2 – Instruction Set Architecturebt.nitk.ac.in/c/17b/co200/notes/M2-3.SubroutineCalls-A.pdf · Instruction classes. MIPS-I ISA. Translating and starting a program. High level languages,](https://reader030.vdocuments.us/reader030/viewer/2022040712/5e1769860e46a70b7702b3b1/html5/thumbnails/60.jpg)
Frame Pointer
...
...
func1:addi $sp, $sp, -8sw $ra, 4($sp)sw $fp, 0($sp)addi $fp, $sp, 4............
$ra
$sp
...
$fp
$fp
$t0
$t0
$t1
callee prologuecallee prologue
![Page 61: M2 – Instruction Set Architecturebt.nitk.ac.in/c/17b/co200/notes/M2-3.SubroutineCalls-A.pdf · Instruction classes. MIPS-I ISA. Translating and starting a program. High level languages,](https://reader030.vdocuments.us/reader030/viewer/2022040712/5e1769860e46a70b7702b3b1/html5/thumbnails/61.jpg)
Frame Pointer
...
...
func1:addi $sp, $sp, -8sw $ra, 4($sp)sw $fp, 0($sp)addi $fp, $sp, 4............
$ra
$sp
...
$fp
$fp
Parameters can beaccessed in thecallee function:4($fp), 8($fp)
Parameters can beaccessed in thecallee function:4($fp), 8($fp)
$t0
$t0
$t1
callee prologuecallee prologue
![Page 62: M2 – Instruction Set Architecturebt.nitk.ac.in/c/17b/co200/notes/M2-3.SubroutineCalls-A.pdf · Instruction classes. MIPS-I ISA. Translating and starting a program. High level languages,](https://reader030.vdocuments.us/reader030/viewer/2022040712/5e1769860e46a70b7702b3b1/html5/thumbnails/62.jpg)
Stack Frame
$t0
$t1
...
...
$ra
$t0
...
$fp
$s0
$s1$sp
$fp
callee prologuecallee prologue
● Save change registers
![Page 63: M2 – Instruction Set Architecturebt.nitk.ac.in/c/17b/co200/notes/M2-3.SubroutineCalls-A.pdf · Instruction classes. MIPS-I ISA. Translating and starting a program. High level languages,](https://reader030.vdocuments.us/reader030/viewer/2022040712/5e1769860e46a70b7702b3b1/html5/thumbnails/63.jpg)
Stack Frame
$t0
$t1
...
...
$ra
$t0
...
$fp
$s0
$s1$sp
$fp
callee prologuecallee prologue
● Save change registers
addi $sp, $sp, -8sw $s0, 4($sp)sw $s1, 0($sp)
![Page 64: M2 – Instruction Set Architecturebt.nitk.ac.in/c/17b/co200/notes/M2-3.SubroutineCalls-A.pdf · Instruction classes. MIPS-I ISA. Translating and starting a program. High level languages,](https://reader030.vdocuments.us/reader030/viewer/2022040712/5e1769860e46a70b7702b3b1/html5/thumbnails/64.jpg)
Stack Frame
$t0
$t1
...
...
func1:addi $sp, $sp, -8sw $ra, 4($sp)sw $fp, 0($sp)addi $fp, $sp, 4addi $sp, $sp, -8sw $s0, 4($sp)sw $s1, 0($sp)
# func1 code
$ra
$t0
...
$fp
$s0
$s1$sp
$fp
callee prologuecallee prologue
![Page 65: M2 – Instruction Set Architecturebt.nitk.ac.in/c/17b/co200/notes/M2-3.SubroutineCalls-A.pdf · Instruction classes. MIPS-I ISA. Translating and starting a program. High level languages,](https://reader030.vdocuments.us/reader030/viewer/2022040712/5e1769860e46a70b7702b3b1/html5/thumbnails/65.jpg)
Stack Frame
$t0
$t1
...
...
$ra
$t0
...
$fp
$s0
$s1$sp
$fp
State of stack before callee returnsState of stack before callee returns
$t0
$t0
...
$t1$sp
...
$fp
State of stack caller expectsState of stack caller expects
![Page 66: M2 – Instruction Set Architecturebt.nitk.ac.in/c/17b/co200/notes/M2-3.SubroutineCalls-A.pdf · Instruction classes. MIPS-I ISA. Translating and starting a program. High level languages,](https://reader030.vdocuments.us/reader030/viewer/2022040712/5e1769860e46a70b7702b3b1/html5/thumbnails/66.jpg)
Stack Frame – Callee Epilogue● Before return from
callee subroutine:– Restore saved regs
– Restore frame pointer of the caller function
– Restore return address
– Return
$t0
$t1
...
...
$ra
$t0
...
$fp
$s0
$s1$sp
$fp
callee epiloguecallee epilogue
![Page 67: M2 – Instruction Set Architecturebt.nitk.ac.in/c/17b/co200/notes/M2-3.SubroutineCalls-A.pdf · Instruction classes. MIPS-I ISA. Translating and starting a program. High level languages,](https://reader030.vdocuments.us/reader030/viewer/2022040712/5e1769860e46a70b7702b3b1/html5/thumbnails/67.jpg)
Stack Frame – Callee Epilogue● Before return from
callee subroutine:– Restore saved regs
– Restore frame pointer of the caller function
– Restore return address
– Return
$t0
$t1
...
...
$ra
$t0
...
$fp
$s0
$s1$sp
$fp
callee epiloguecallee epilogue
....lw $s1, 0($sp)lw $s0, 4($sp)lw $fp, 8($sp)lw $ra, 12($sp)addi $sp, $sp, 16jr $ra
![Page 68: M2 – Instruction Set Architecturebt.nitk.ac.in/c/17b/co200/notes/M2-3.SubroutineCalls-A.pdf · Instruction classes. MIPS-I ISA. Translating and starting a program. High level languages,](https://reader030.vdocuments.us/reader030/viewer/2022040712/5e1769860e46a70b7702b3b1/html5/thumbnails/68.jpg)
Stack Frame – Callee Epilogue● Before return from
callee subroutine:– Restore saved regs
– Restore frame pointer of the caller function
– Restore return address
– Return ....lw $s1, 0($sp)lw $s0, 4($sp)lw $fp, 8($sp)lw $ra, 12($sp)addi $sp, $sp, 16jr $ra
$t0
$t0
...
$t1$sp
...
$fp
callee epiloguecallee epilogue
![Page 69: M2 – Instruction Set Architecturebt.nitk.ac.in/c/17b/co200/notes/M2-3.SubroutineCalls-A.pdf · Instruction classes. MIPS-I ISA. Translating and starting a program. High level languages,](https://reader030.vdocuments.us/reader030/viewer/2022040712/5e1769860e46a70b7702b3b1/html5/thumbnails/69.jpg)
Stack Frame
func1:addi $sp, $sp, -8sw $ra, 4($sp)sw $fp, 0($sp)addi $fp, $sp, 4addi $sp, $sp, -8sw $s0, 4($sp)sw $s1, 0($sp)
# func1 code
lw $s1, 0($sp)lw $s0, 4($sp)lw $fp, 8($sp)lw $ra, 12($sp)addi $sp, $sp, 16jr $ra
$t0
$t1
...
...
$ra
$t0
...
$fp
$s0
$s1$sp
$fp$t0
$t0
...
$t1$sp
...
$fp
after returnafter returnbefore returnbefore return
![Page 70: M2 – Instruction Set Architecturebt.nitk.ac.in/c/17b/co200/notes/M2-3.SubroutineCalls-A.pdf · Instruction classes. MIPS-I ISA. Translating and starting a program. High level languages,](https://reader030.vdocuments.us/reader030/viewer/2022040712/5e1769860e46a70b7702b3b1/html5/thumbnails/70.jpg)
Module Outline● Addressing modes. Instruction classes.● MIPS-I ISA.● Translating and starting a program.● High level languages, Assembly languages
and object code.● Subroutine and subroutine call. Use of stack
for handling subroutine call and return.
![Page 71: M2 – Instruction Set Architecturebt.nitk.ac.in/c/17b/co200/notes/M2-3.SubroutineCalls-A.pdf · Instruction classes. MIPS-I ISA. Translating and starting a program. High level languages,](https://reader030.vdocuments.us/reader030/viewer/2022040712/5e1769860e46a70b7702b3b1/html5/thumbnails/71.jpg)
Backup
![Page 72: M2 – Instruction Set Architecturebt.nitk.ac.in/c/17b/co200/notes/M2-3.SubroutineCalls-A.pdf · Instruction classes. MIPS-I ISA. Translating and starting a program. High level languages,](https://reader030.vdocuments.us/reader030/viewer/2022040712/5e1769860e46a70b7702b3b1/html5/thumbnails/72.jpg)
Linking Multiple Modules
hello.o
Header Info
main(){...jal printf()...}
Data
Symbol Table
Reloc. Info
print library
Header Info
printf() {...}
Data
Symbol Table
Reloc. Info
a.outhello + library
Header
main(){...jal printf()...}printf() {...}
hello + libraryData
hello + librarySymbol Table
hello + libraryReloc. Info
LinkerLinker
![Page 73: M2 – Instruction Set Architecturebt.nitk.ac.in/c/17b/co200/notes/M2-3.SubroutineCalls-A.pdf · Instruction classes. MIPS-I ISA. Translating and starting a program. High level languages,](https://reader030.vdocuments.us/reader030/viewer/2022040712/5e1769860e46a70b7702b3b1/html5/thumbnails/73.jpg)
The a.out executable● What does the a.out file contain?
– Program “code” (machine instructions)
– Data values (values, size of arrays)
● Other information that is needed for– execution
– debugging● Debugging: The stage in program development where
mistakes (“bugs”) in the program are identified
![Page 74: M2 – Instruction Set Architecturebt.nitk.ac.in/c/17b/co200/notes/M2-3.SubroutineCalls-A.pdf · Instruction classes. MIPS-I ISA. Translating and starting a program. High level languages,](https://reader030.vdocuments.us/reader030/viewer/2022040712/5e1769860e46a70b7702b3b1/html5/thumbnails/74.jpg)
Stack Frame – Recall
$t0
$ra
$sp
func1Frame
func2Frame
$fp
$sp
$fp
LocalVariables
Return Addr
SavedRegisters
Old FP
Stack FrameStack Frame
![Page 75: M2 – Instruction Set Architecturebt.nitk.ac.in/c/17b/co200/notes/M2-3.SubroutineCalls-A.pdf · Instruction classes. MIPS-I ISA. Translating and starting a program. High level languages,](https://reader030.vdocuments.us/reader030/viewer/2022040712/5e1769860e46a70b7702b3b1/html5/thumbnails/75.jpg)
Saved Registers● Registers 16 – 23 are saved across function
calls
![Page 76: M2 – Instruction Set Architecturebt.nitk.ac.in/c/17b/co200/notes/M2-3.SubroutineCalls-A.pdf · Instruction classes. MIPS-I ISA. Translating and starting a program. High level languages,](https://reader030.vdocuments.us/reader030/viewer/2022040712/5e1769860e46a70b7702b3b1/html5/thumbnails/76.jpg)
Saved Registers● Registers 16 – 23 are saved across function
calls● Save registers $s0 - $s7 if used by the callee● Example: $s0, $s1 are saved
![Page 77: M2 – Instruction Set Architecturebt.nitk.ac.in/c/17b/co200/notes/M2-3.SubroutineCalls-A.pdf · Instruction classes. MIPS-I ISA. Translating and starting a program. High level languages,](https://reader030.vdocuments.us/reader030/viewer/2022040712/5e1769860e46a70b7702b3b1/html5/thumbnails/77.jpg)
Stack Frame
$t0
$t1
...
...
$ra
$t0
...
$fp
$s0
$s1
$fp
func1_X
func1_Y$sp
● Local variables are allocated on the stack after the saved registers
![Page 78: M2 – Instruction Set Architecturebt.nitk.ac.in/c/17b/co200/notes/M2-3.SubroutineCalls-A.pdf · Instruction classes. MIPS-I ISA. Translating and starting a program. High level languages,](https://reader030.vdocuments.us/reader030/viewer/2022040712/5e1769860e46a70b7702b3b1/html5/thumbnails/78.jpg)
Stack Frame