Subroutines - Part 2
description
Transcript of Subroutines - Part 2
![Page 1: Subroutines - Part 2](https://reader035.fdocuments.net/reader035/viewer/2022081501/56814923550346895db65ca7/html5/thumbnails/1.jpg)
Faculty of Computer Science
CMPUT 229 © 2006
Subroutines - Part 2
Calling Itself
![Page 2: Subroutines - Part 2](https://reader035.fdocuments.net/reader035/viewer/2022081501/56814923550346895db65ca7/html5/thumbnails/2.jpg)
© 2006
Department of Computing Science
CMPUT 229
Calling Itself
int fact ( int n ) { if (n < 1) return(1); else return(n * fact(n-1)); }
![Page 3: Subroutines - Part 2](https://reader035.fdocuments.net/reader035/viewer/2022081501/56814923550346895db65ca7/html5/thumbnails/3.jpg)
© 2006
Department of Computing Science
CMPUT 229
Linking a Recursive Procedureint fact ( int n ) { if (n < 1) return(1); else return(n * fact(n-1)); }
M68K assembly:fact: LINK A6,#-4
TST.L 8(A6) Compare with Zero
BGT L6
MOVEQ #1,D0
MOVE.L D0,-4(A6)
BRA L5
L6: MOVE.L 8(A6),D0 n 1
SUBQ.L #1,D0 D0 n-1
MOVE.L D0,(SP)
BSR fact
ADDQ.L #4,SP
MULS.L 8(A6),D0
MOVE.L D0,-4(A6)
L5: MOVE.L -4(A6),D0
UNLK A6
RTS
Memory
SP
$8014
$8018
$8010
$800C
$8008
$8004
$8000
$7FFC
D0
A6
SP
![Page 4: Subroutines - Part 2](https://reader035.fdocuments.net/reader035/viewer/2022081501/56814923550346895db65ca7/html5/thumbnails/4.jpg)
© 2006
Department of Computing Science
CMPUT 229
Example: fact(3)int fact ( int n ) { if (n < 1) return(1); else return(n * fact(n-1)); }
M68K assembly:
fact: LINK A6,#-4
TST.L 8(A6) Compare with Zero
BGT L6
MOVEQ #1,D0
MOVE.L D0,-4(A6)
BRA L5
L6: MOVE.L 8(A6),D0 n 1
SUBQ.L #1,D0 D0 n-1
MOVE.L D0,(SP)
BSR fact
ADDQ.L #4,SP
MULS.L 8(A6),D0
MOVE.L D0,-4(A6)
L5: MOVE.L -4(A6),D0
UNLK A6
RTS
$10004000
3
Memory
SP $8014
$8018
$8010
$800C
$8008
$8004
$8000
$7FFC
D0
$12345678A6
$00008014SP
$1000 3FFB MOVEQ #3,(SP)$1000 3FFC BSR fact$1000 4000 ….
![Page 5: Subroutines - Part 2](https://reader035.fdocuments.net/reader035/viewer/2022081501/56814923550346895db65ca7/html5/thumbnails/5.jpg)
© 2006
Department of Computing Science
CMPUT 229
Example: fact(3)int fact ( int n ) { if (n < 1) return(1); else return(n * fact(n-1)); }
M68K assembly:
fact: LINK A6,#-4
TST.L 8(A6) Compare with Zero
BGT L6
MOVEQ #1,D0
MOVE.L D0,-4(A6)
BRA L5
L6: MOVE.L 8(A6),D0 n 1
SUBQ.L #1,D0 D0 n-1
MOVE.L D0,(SP)
BSR fact
ADDQ.L #4,SP
MULS.L 8(A6),D0
MOVE.L D0,-4(A6)
L5: MOVE.L -4(A6),D0
UNLK A6
RTS
$12345678
$10004000
3
Memory
SP
$8014
$8018
$8010
$800C
$8008
$8004
$8000
$7FFC
D0
$00008010A6
$0000800CSP
A6
$1000 3FFB MOVEQ #3,(SP)$1000 3FFC BSR fact$1000 4000 ….
![Page 6: Subroutines - Part 2](https://reader035.fdocuments.net/reader035/viewer/2022081501/56814923550346895db65ca7/html5/thumbnails/6.jpg)
© 2006
Department of Computing Science
CMPUT 229
Example: fact(3)int fact ( int n ) { if (n < 1) return(1); else return(n * fact(n-1)); }
M68K assembly:
fact: LINK A6,#-4
TST.L 8(A6) Compare with Zero
BGT L6
MOVEQ #1,D0
MOVE.L D0,-4(A6)
BRA L5
L6: MOVE.L 8(A6),D0 n 1
SUBQ.L #1,D0 D0 n-1
MOVE.L D0,(SP)
BSR fact
ADDQ.L #4,SP
MULS.L 8(A6),D0
MOVE.L D0,-4(A6)
L5: MOVE.L -4(A6),D0
UNLK A6
RTS
$12345678
$10004000
3
Memory
SP
$8014
$8018
$8010
$800C
$8008
$8004
$8000
$7FFC
D0
$00008010A6
$0000800CSP
A6
$1000 3FFB MOVEQ #3,(SP)$1000 3FFC BSR fact$1000 4000 ….
![Page 7: Subroutines - Part 2](https://reader035.fdocuments.net/reader035/viewer/2022081501/56814923550346895db65ca7/html5/thumbnails/7.jpg)
© 2006
Department of Computing Science
CMPUT 229
Example: fact(3)int fact ( int n ) { if (n < 1) return(1); else return(n * fact(n-1)); }
M68K assembly:
fact: LINK A6,#-4
TST.L 8(A6) Compare with Zero
BGT L6
MOVEQ #1,D0
MOVE.L D0,-4(A6)
BRA L5
L6: MOVE.L 8(A6),D0 n 1
SUBQ.L #1,D0 D0 n-1
MOVE.L D0,(SP)
BSR fact
ADDQ.L #4,SP
MULS.L 8(A6),D0
MOVE.L D0,-4(A6)
L5: MOVE.L -4(A6),D0
UNLK A6
RTS
$12345678
$10004000
3
Memory
SP
$8014
$8018
$8010
$800C
$8008
$8004
$8000
$7FFC
3D0
$00008010A6
$0000800CSP
A6
$1000 3FFB MOVEQ #3,(SP)$1000 3FFC BSR fact$1000 4000 ….
![Page 8: Subroutines - Part 2](https://reader035.fdocuments.net/reader035/viewer/2022081501/56814923550346895db65ca7/html5/thumbnails/8.jpg)
© 2006
Department of Computing Science
CMPUT 229
Example: fact(3)int fact ( int n ) { if (n < 1) return(1); else return(n * fact(n-1)); }
M68K assembly:
fact: LINK A6,#-4
TST.L 8(A6) Compare with Zero
BGT L6
MOVEQ #1,D0
MOVE.L D0,-4(A6)
BRA L5
L6: MOVE.L 8(A6),D0 n 1
SUBQ.L #1,D0 D0 n-1
MOVE.L D0,(SP)
BSR fact
ADDQ.L #4,SP
MULS.L 8(A6),D0
MOVE.L D0,-4(A6)
L5: MOVE.L -4(A6),D0
UNLK A6
RTS
$12345678
$10004000
3
Memory
SP
$8014
$8018
$8010
$800C
$8008
$8004
$8000
$7FFC
2D0
$00008010A6
$0000800CSP
A6
$1000 3FFB MOVEQ #3,(SP)$1000 3FFC BSR fact$1000 4000 ….
![Page 9: Subroutines - Part 2](https://reader035.fdocuments.net/reader035/viewer/2022081501/56814923550346895db65ca7/html5/thumbnails/9.jpg)
© 2006
Department of Computing Science
CMPUT 229
Example: fact(3)int fact ( int n ) { if (n < 1) return(1); else return(n * fact(n-1)); }
M68K assembly:
fact: LINK A6,#-4
TST.L 8(A6) Compare with Zero
BGT L6
MOVEQ #1,D0
MOVE.L D0,-4(A6)
BRA L5
L6: MOVE.L 8(A6),D0 n 1
SUBQ.L #1,D0 D0 n-1
MOVE.L D0,(SP)
BSR fact
ADDQ.L #4,SP
MULS.L 8(A6),D0
MOVE.L D0,-4(A6)
L5: MOVE.L -4(A6),D0
UNLK A6
RTS
$12345678
2
$10004000
3
Memory
SP
$8014
$8018
$8010
$800C
$8008
$8004
$8000
$7FFC
2D0
$00008010A6
$0000800CSP
A6
$1000 3FFB MOVEQ #3,(SP)$1000 3FFC BSR fact$1000 4000 ….
![Page 10: Subroutines - Part 2](https://reader035.fdocuments.net/reader035/viewer/2022081501/56814923550346895db65ca7/html5/thumbnails/10.jpg)
© 2006
Department of Computing Science
CMPUT 229
Example: fact(3)int fact ( int n ) { if (n < 1) return(1); else return(n * fact(n-1)); }
M68K assembly:
fact: LINK A6,#-4
TST.L 8(A6) Compare with Zero
BGT L6
MOVEQ #1,D0
MOVE.L D0,-4(A6)
BRA L5
L6: MOVE.L 8(A6),D0 n 1
SUBQ.L #1,D0 D0 n-1
MOVE.L D0,(SP)
BSR fact
ADDQ.L #4,SP
MULS.L 8(A6),D0
MOVE.L D0,-4(A6)
L5: MOVE.L -4(A6),D0
UNLK A6
RTS
$12345678
2
$10002500
$10004000
3
Memory
SP
$8014
$8018
$8010
$800C
$8008
$8004
$8000
$7FFC
2D0
$00008010A6
$00008008SP
A6
Assuming that call to subroutine
fact is at address $100024FC
$1000 2500
$1000 3FFB MOVEQ #3,(SP)$1000 3FFC BSR fact$1000 4000 ….
![Page 11: Subroutines - Part 2](https://reader035.fdocuments.net/reader035/viewer/2022081501/56814923550346895db65ca7/html5/thumbnails/11.jpg)
© 2006
Department of Computing Science
CMPUT 229
Example: fact(3)int fact ( int n ) { if (n < 1) return(1); else return(n * fact(n-1)); }
M68K assembly:
fact: LINK A6,#-4
TST.L 8(A6) Compare with Zero
BGT L6
MOVEQ #1,D0
MOVE.L D0,-4(A6)
BRA L5
L6: MOVE.L 8(A6),D0 n 1
SUBQ.L #1,D0 D0 n-1
MOVE.L D0,(SP)
BSR fact
ADDQ.L #4,SP
MULS.L 8(A6),D0
MOVE.L D0,-4(A6)
L5: MOVE.L -4(A6),D0
UNLK A6
RTS
$12345678
$0008010
2
$10002500
$10004000
3
Memory
SP
$8014
$8018
$8010
$800C
$8008
$8004
$8000
$7FFC
2D0
$00008004A6
$00008000SP
A6$1000 2500
$1000 3FFB MOVEQ #3,(SP)$1000 3FFC BSR fact$1000 4000 ….
![Page 12: Subroutines - Part 2](https://reader035.fdocuments.net/reader035/viewer/2022081501/56814923550346895db65ca7/html5/thumbnails/12.jpg)
© 2006
Department of Computing Science
CMPUT 229
Example: fact(3)int fact ( int n ) { if (n < 1) return(1); else return(n * fact(n-1)); }
$12345678
$0008010
2
$10002500
$10004000
3
Memory
SP
$8014
$8018
$8010
$800C
$8008
$8004
$8000
$7FFC
2D0
$00008004A6
$00008000SP
A6$1000 2500
M68K assembly:
fact: LINK A6,#-4
TST.L 8(A6) Compare with Zero
BGT L6
MOVEQ #1,D0
MOVE.L D0,-4(A6)
BRA L5
L6: MOVE.L 8(A6),D0 n 1
SUBQ.L #1,D0 D0 n-1
MOVE.L D0,(SP)
BSR fact
ADDQ.L #4,SP
MULS.L 8(A6),D0
MOVE.L D0,-4(A6)
L5: MOVE.L -4(A6),D0
UNLK A6
RTS
$1000 3FFB MOVEQ #3,(SP)$1000 3FFC BSR fact$1000 4000 ….
![Page 13: Subroutines - Part 2](https://reader035.fdocuments.net/reader035/viewer/2022081501/56814923550346895db65ca7/html5/thumbnails/13.jpg)
© 2006
Department of Computing Science
CMPUT 229
Example: fact(3)int fact ( int n ) { if (n < 1) return(1); else return(n * fact(n-1)); }
M68K assembly:
fact: LINK A6,#-4
TST.L 8(A6) Compare with Zero
BGT L6
MOVEQ #1,D0
MOVE.L D0,-4(A6)
BRA L5
L6: MOVE.L 8(A6),D0 n 1
SUBQ.L #1,D0 D0 n-1
MOVE.L D0,(SP)
BSR fact
ADDQ.L #4,SP
MULS.L 8(A6),D0
MOVE.L D0,-4(A6)
L5: MOVE.L -4(A6),D0
UNLK A6
RTS
$12345678
$0008010
2
$10002500
$10004000
3
Memory
SP
$8014
$8018
$8010
$800C
$8008
$8004
$8000
$7FFC
2D0
$00008004A6
$00008000SP
A6$1000 2500
$1000 3FFB MOVEQ #3,(SP)$1000 3FFC BSR fact$1000 4000 ….
![Page 14: Subroutines - Part 2](https://reader035.fdocuments.net/reader035/viewer/2022081501/56814923550346895db65ca7/html5/thumbnails/14.jpg)
© 2006
Department of Computing Science
CMPUT 229
Example: fact(3)int fact ( int n ) { if (n < 1) return(1); else return(n * fact(n-1)); }
M68K assembly:
fact: LINK A6,#-4
TST.L 8(A6) Compare with Zero
BGT L6
MOVEQ #1,D0
MOVE.L D0,-4(A6)
BRA L5
L6: MOVE.L 8(A6),D0 n 1
SUBQ.L #1,D0 D0 n-1
MOVE.L D0,(SP)
BSR fact
ADDQ.L #4,SP
MULS.L 8(A6),D0
MOVE.L D0,-4(A6)
L5: MOVE.L -4(A6),D0
UNLK A6
RTS
$12345678
$0008010
2
$10002500
$10004000
3
Memory
SP
$8014
$8018
$8010
$800C
$8008
$8004
$8000
$7FFC
1D0
$00008004A6
$00008000SP
A6$1000 2500
$1000 3FFB MOVEQ #3,(SP)$1000 3FFC BSR fact$1000 4000 ….
![Page 15: Subroutines - Part 2](https://reader035.fdocuments.net/reader035/viewer/2022081501/56814923550346895db65ca7/html5/thumbnails/15.jpg)
© 2006
Department of Computing Science
CMPUT 229
Example: fact(3)int fact ( int n ) { if (n < 1) return(1); else return(n * fact(n-1)); }
M68K assembly:
fact: LINK A6,#-4
TST.L 8(A6) Compare with Zero
BGT L6
MOVEQ #1,D0
MOVE.L D0,-4(A6)
BRA L5
L6: MOVE.L 8(A6),D0 n 1
SUBQ.L #1,D0 D0 n-1
MOVE.L D0,(SP)
BSR fact
ADDQ.L #4,SP
MULS.L 8(A6),D0
MOVE.L D0,-4(A6)
L5: MOVE.L -4(A6),D0
UNLK A6
RTS
1
$12345678
$0008010
2
$10002500
$10004000
3
Memory
SP
$8014
$8018
$8010
$800C
$8008
$8004
$8000
$7FFC
1D0
$00008004A6
$00008000SP
A6$1000 2500
$1000 3FFB MOVEQ #3,(SP)$1000 3FFC BSR fact$1000 4000 ….
![Page 16: Subroutines - Part 2](https://reader035.fdocuments.net/reader035/viewer/2022081501/56814923550346895db65ca7/html5/thumbnails/16.jpg)
© 2006
Department of Computing Science
CMPUT 229
Example: fact(3)int fact ( int n ) { if (n < 1) return(1); else return(n * fact(n-1)); }
M68K assembly:
fact: LINK A6,#-4
TST.L 8(A6) Compare with Zero
BGT L6
MOVEQ #1,D0
MOVE.L D0,-4(A6)
BRA L5
L6: MOVE.L 8(A6),D0 n 1
SUBQ.L #1,D0 D0 n-1
MOVE.L D0,(SP)
BSR fact
ADDQ.L #4,SP
MULS.L 8(A6),D0
MOVE.L D0,-4(A6)
L5: MOVE.L -4(A6),D0
UNLK A6
RTS
$10002500
1
$12345678
$0008010
2
$10002500
$10004000
3
Memory
SP
$8014
$8018
$8010
$800C
$8008
$8004
$8000
$7FFC
1D0
$00008004A6
$00007FFCSP
A6
$7FF8
$7FF4
$7FF0
$1000 2500
$1000 3FFB MOVEQ #3,(SP)$1000 3FFC BSR fact$1000 4000 ….
![Page 17: Subroutines - Part 2](https://reader035.fdocuments.net/reader035/viewer/2022081501/56814923550346895db65ca7/html5/thumbnails/17.jpg)
© 2006
Department of Computing Science
CMPUT 229
Example: fact(3)int fact ( int n ) { if (n < 1) return(1); else return(n * fact(n-1)); }
M68K assembly:
fact: LINK A6,#-4
TST.L 8(A6) Compare with Zero
BGT L6
MOVEQ #1,D0
MOVE.L D0,-4(A6)
BRA L5
L6: MOVE.L 8(A6),D0 n 1
SUBQ.L #1,D0 D0 n-1
MOVE.L D0,(SP)
BSR fact
ADDQ.L #4,SP
MULS.L 8(A6),D0
MOVE.L D0,-4(A6)
L5: MOVE.L -4(A6),D0
UNLK A6
RTS
$10002500
1
$12345678
$0008010
2
$10002500
$10004000
3
Memory
SP
$8014
$8018
$8010
$800C
$8008
$8004
$8000
$7FFC
1D0
$00007FF8A6
$00007FF4SP
A6 $00008004$7FF8
$7FF4
$7FF0
$1000 2500
$1000 3FFB MOVEQ #3,(SP)$1000 3FFC BSR fact$1000 4000 ….
![Page 18: Subroutines - Part 2](https://reader035.fdocuments.net/reader035/viewer/2022081501/56814923550346895db65ca7/html5/thumbnails/18.jpg)
© 2006
Department of Computing Science
CMPUT 229
Example: fact(3)int fact ( int n ) { if (n < 1) return(1); else return(n * fact(n-1)); }
M68K assembly:
fact: LINK A6,#-4
TST.L 8(A6) Compare with Zero
BGT L6
MOVEQ #1,D0
MOVE.L D0,-4(A6)
BRA L5
L6: MOVE.L 8(A6),D0 n 1
SUBQ.L #1,D0 D0 n-1
MOVE.L D0,(SP)
BSR fact
ADDQ.L #4,SP
MULS.L 8(A6),D0
MOVE.L D0,-4(A6)
L5: MOVE.L -4(A6),D0
UNLK A6
RTS
$10002500
1
$12345678
$0008010
2
$10002500
$10004000
3
Memory
SP
$8014
$8018
$8010
$800C
$8008
$8004
$8000
$7FFC
1D0
$00007FF8A6
$00007FF4SP
A6 $00008004$7FF8
$7FF4
$7FF0
$1000 2500
$1000 3FFB MOVEQ #3,(SP)$1000 3FFC BSR fact$1000 4000 ….
![Page 19: Subroutines - Part 2](https://reader035.fdocuments.net/reader035/viewer/2022081501/56814923550346895db65ca7/html5/thumbnails/19.jpg)
© 2006
Department of Computing Science
CMPUT 229
Example: fact(3)int fact ( int n ) { if (n < 1) return(1); else return(n * fact(n-1)); }
M68K assembly:
fact: LINK A6,#-4
TST.L 8(A6) Compare with Zero
BGT L6
MOVEQ #1,D0
MOVE.L D0,-4(A6)
BRA L5
L6: MOVE.L 8(A6),D0 n 1
SUBQ.L #1,D0 D0 n-1
MOVE.L D0,(SP)
BSR fact
ADDQ.L #4,SP
MULS.L 8(A6),D0
MOVE.L D0,-4(A6)
L5: MOVE.L -4(A6),D0
UNLK A6
RTS
$10002500
1
$12345678
$0008010
2
$10002500
$10004000
3
Memory
SP
$8014
$8018
$8010
$800C
$8008
$8004
$8000
$7FFC
1D0
$00007FF8A6
$00007FF4SP
A6 $00008004$7FF8
$7FF4
$7FF0
$1000 2500
$1000 3FFB MOVEQ #3,(SP)$1000 3FFC BSR fact$1000 4000 ….
![Page 20: Subroutines - Part 2](https://reader035.fdocuments.net/reader035/viewer/2022081501/56814923550346895db65ca7/html5/thumbnails/20.jpg)
© 2006
Department of Computing Science
CMPUT 229
Example: fact(3)int fact ( int n ) { if (n < 1) return(1); else return(n * fact(n-1)); }
M68K assembly:
fact: LINK A6,#-4
TST.L 8(A6) Compare with Zero
BGT L6
MOVEQ #1,D0
MOVE.L D0,-4(A6)
BRA L5
L6: MOVE.L 8(A6),D0 n 1
SUBQ.L #1,D0 D0 n-1
MOVE.L D0,(SP)
BSR fact
ADDQ.L #4,SP
MULS.L 8(A6),D0
MOVE.L D0,-4(A6)
L5: MOVE.L -4(A6),D0
UNLK A6
RTS
$10002500
1
$12345678
$0008010
2
$10002500
$10004000
3
Memory
SP
$8014
$8018
$8010
$800C
$8008
$8004
$8000
$7FFC
0D0
$00007FF8A6
$00007FF4SP
A6 $00008004$7FF8
$7FF4
$7FF0
$1000 2500
$1000 3FFB MOVEQ #3,(SP)$1000 3FFC BSR fact$1000 4000 ….
![Page 21: Subroutines - Part 2](https://reader035.fdocuments.net/reader035/viewer/2022081501/56814923550346895db65ca7/html5/thumbnails/21.jpg)
© 2006
Department of Computing Science
CMPUT 229
Example: fact(3)int fact ( int n ) { if (n < 1) return(1); else return(n * fact(n-1)); }
M68K assembly:
fact: LINK A6,#-4
TST.L 8(A6) Compare with Zero
BGT L6
MOVEQ #1,D0
MOVE.L D0,-4(A6)
BRA L5
L6: MOVE.L 8(A6),D0 n 1
SUBQ.L #1,D0 D0 n-1
MOVE.L D0,(SP)
BSR fact
ADDQ.L #4,SP
MULS.L 8(A6),D0
MOVE.L D0,-4(A6)
L5: MOVE.L -4(A6),D0
UNLK A6
RTS
$10002500
1
$12345678
$0008010
2
$10002500
$10004000
3
Memory
SP
$8014
$8018
$8010
$800C
$8008
$8004
$8000
$7FFC
0D0
$00007FF8A6
$00007FF4SP
A6 $00008004
0
$7FF8
$7FF4
$7FF0
$1000 2500
$1000 3FFB MOVEQ #3,(SP)$1000 3FFC BSR fact$1000 4000 ….
![Page 22: Subroutines - Part 2](https://reader035.fdocuments.net/reader035/viewer/2022081501/56814923550346895db65ca7/html5/thumbnails/22.jpg)
© 2006
Department of Computing Science
CMPUT 229
Example: fact(3)int fact ( int n ) { if (n < 1) return(1); else return(n * fact(n-1)); }
M68K assembly:
fact: LINK A6,#-4
TST.L 8(A6) Compare with Zero
BGT L6
MOVEQ #1,D0
MOVE.L D0,-4(A6)
BRA L5
L6: MOVE.L 8(A6),D0 n 1
SUBQ.L #1,D0 D0 n-1
MOVE.L D0,(SP)
BSR fact
ADDQ.L #4,SP
MULS.L 8(A6),D0
MOVE.L D0,-4(A6)
L5: MOVE.L -4(A6),D0
UNLK A6
RTS
$10002500
1
$12345678
$0008010
2
$10002500
$10004000
3
Memory
SP
$8014
$8018
$8010
$800C
$8008
$8004
$8000
$7FFC
0D0
$00007FF8A6
$00007FF0SP
A6 $00008004
0
$10002500
$7FF8
$7FF4
$7FF0
$1000 2500
$7FEC
$7FE8
$1000 3FFB MOVEQ #3,(SP)$1000 3FFC BSR fact$1000 4000 ….
![Page 23: Subroutines - Part 2](https://reader035.fdocuments.net/reader035/viewer/2022081501/56814923550346895db65ca7/html5/thumbnails/23.jpg)
© 2006
Department of Computing Science
CMPUT 229
Example: fact(3)int fact ( int n ) { if (n < 1) return(1); else return(n * fact(n-1)); }
M68K assembly:
fact: LINK A6,#-4
TST.L 8(A6)
BGT L6
MOVEQ #1,D0
MOVE.L D0,-4(A6)
BRA L5
L6: MOVE.L 8(A6),D0 n 1
SUBQ.L #1,D0 D0 n-1
MOVE.L D0,(SP)
BSR fact
ADDQ.L #4,SP
MULS.L 8(A6),D0
MOVE.L D0,-4(A6)
L5: MOVE.L -4(A6),D0
UNLK A6
RTS
$10002500
1
$12345678
$0008010
2
$10002500
$10004000
3
Memory
SP
$8014
$8018
$8010
$800C
$8008
$8004
$8000
$7FFC
0D0
$00007FECA6
$00007FE8SP
A6
$00008004
0
$10002500
$7FF8
$7FF4
$7FF0
$1000 2500
$00007FF8$7FEC
$7FE8
$1000 3FFB MOVEQ #3,(SP)$1000 3FFC BSR fact$1000 4000 ….
![Page 24: Subroutines - Part 2](https://reader035.fdocuments.net/reader035/viewer/2022081501/56814923550346895db65ca7/html5/thumbnails/24.jpg)
© 2006
Department of Computing Science
CMPUT 229
Example: fact(3)int fact ( int n ) { if (n < 1) return(1); else return(n * fact(n-1)); }
M68K assembly:
fact: LINK A6,#-4
TST.L 8(A6)
BGT L6
MOVEQ #1,D0
MOVE.L D0,-4(A6)
BRA L5
L6: MOVE.L 8(A6),D0 n 1
SUBQ.L #1,D0 D0 n-1
MOVE.L D0,(SP)
BSR fact
ADDQ.L #4,SP
MULS.L 8(A6),D0
MOVE.L D0,-4(A6)
L5: MOVE.L -4(A6),D0
UNLK A6
RTS
$10002500
1
$12345678
$0008010
2
$10002500
$10004000
3
Memory
SP
$8014
$8018
$8010
$800C
$8008
$8004
$8000
$7FFC
0D0
$00007FECA6
$00007FE8SP
A6
$00008004
0
$10002500
$7FF8
$7FF4
$7FF0
$1000 2500
$00007FF8$7FEC
$7FE8
$1000 3FFB MOVEQ #3,(SP)$1000 3FFC BSR fact$1000 4000 ….
![Page 25: Subroutines - Part 2](https://reader035.fdocuments.net/reader035/viewer/2022081501/56814923550346895db65ca7/html5/thumbnails/25.jpg)
© 2006
Department of Computing Science
CMPUT 229
Example: fact(3)int fact ( int n ) { if (n < 1) return(1); else return(n * fact(n-1)); }
M68K assembly:
fact: LINK A6,#-4
TST.L 8(A6)
BGT L6
MOVEQ #1,D0
MOVE.L D0,-4(A6)
BRA L5
L6: MOVE.L 8(A6),D0 n 1
SUBQ.L #1,D0 D0 n-1
MOVE.L D0,(SP)
BSR fact
ADDQ.L #4,SP
MULS.L 8(A6),D0
MOVE.L D0,-4(A6)
L5: MOVE.L -4(A6),D0
UNLK A6
RTS
$10002500
1
$12345678
$0008010
2
$10002500
$10004000
3
Memory
SP
$8014
$8018
$8010
$800C
$8008
$8004
$8000
$7FFC
1D0
$00007FECA6
$00007FE8SP
A6
$00008004
0
$10002500
$7FF8
$7FF4
$7FF0
$1000 2500
$00007FF8$7FEC
$7FE8
$1000 3FFB MOVEQ #3,(SP)$1000 3FFC BSR fact$1000 4000 ….
![Page 26: Subroutines - Part 2](https://reader035.fdocuments.net/reader035/viewer/2022081501/56814923550346895db65ca7/html5/thumbnails/26.jpg)
© 2006
Department of Computing Science
CMPUT 229
Example: fact(3)int fact ( int n ) { if (n < 1) return(1); else return(n * fact(n-1)); }
M68K assembly:
fact: LINK A6,#-4
TST.L 8(A6)
BGT L6
MOVEQ #1,D0
MOVE.L D0,-4(A6)
BRA L5
L6: MOVE.L 8(A6),D0 n 1
SUBQ.L #1,D0 D0 n-1
MOVE.L D0,(SP)
BSR fact
ADDQ.L #4,SP
MULS.L 8(A6),D0
MOVE.L D0,-4(A6)
L5: MOVE.L -4(A6),D0
UNLK A6
RTS
$10002500
1
$12345678
$0008010
2
$10002500
$10004000
3
Memory
SP
$8014
$8018
$8010
$800C
$8008
$8004
$8000
$7FFC
1D0
$00007FECA6
$00007FE8SP
A6
$00008004
0
$10002500
$7FF8
$7FF4
$7FF0
$1000 2500
$00007FF8$7FEC
1$7FE8
$1000 3FFB MOVEQ #3,(SP)$1000 3FFC BSR fact$1000 4000 ….
![Page 27: Subroutines - Part 2](https://reader035.fdocuments.net/reader035/viewer/2022081501/56814923550346895db65ca7/html5/thumbnails/27.jpg)
© 2006
Department of Computing Science
CMPUT 229
Example: fact(3)int fact ( int n ) { if (n < 1) return(1); else return(n * fact(n-1)); }
M68K assembly:
fact: LINK A6,#-4
TST.L 8(A6)
BGT L6
MOVEQ #1,D0
MOVE.L D0,-4(A6)
BRA L5
L6: MOVE.L 8(A6),D0 n 1
SUBQ.L #1,D0 D0 n-1
MOVE.L D0,(SP)
BSR fact
ADDQ.L #4,SP
MULS.L 8(A6),D0
MOVE.L D0,-4(A6)
L5: MOVE.L -4(A6),D0
UNLK A6
RTS
$10002500
1
$12345678
$0008010
2
$10002500
$10004000
3
Memory
SP
$8014
$8018
$8010
$800C
$8008
$8004
$8000
$7FFC
1D0
$00007FECA6
$00007FE8SP
A6
$00008004
0
$10002500
$7FF8
$7FF4
$7FF0
$1000 2500
$00007FF8$7FEC
1$7FE8
$1000 3FFB MOVEQ #3,(SP)$1000 3FFC BSR fact$1000 4000 ….
![Page 28: Subroutines - Part 2](https://reader035.fdocuments.net/reader035/viewer/2022081501/56814923550346895db65ca7/html5/thumbnails/28.jpg)
© 2006
Department of Computing Science
CMPUT 229
Example: fact(3)int fact ( int n ) { if (n < 1) return(1); else return(n * fact(n-1)); }
M68K assembly:
fact: LINK A6,#-4
TST.L 8(A6)
BGT L6
MOVEQ #1,D0
MOVE.L D0,-4(A6)
BRA L5
L6: MOVE.L 8(A6),D0 n 1
SUBQ.L #1,D0 D0 n-1
MOVE.L D0,(SP)
BSR fact
ADDQ.L #4,SP
MULS.L 8(A6),D0
MOVE.L D0,-4(A6)
L5: MOVE.L -4(A6),D0
UNLK A6
RTS
$10002500
1
$12345678
$0008010
2
$10002500
$10004000
3
Memory
SP
$8014
$8018
$8010
$800C
$8008
$8004
$8000
$7FFC
1D0
$00007FF8A6
$00007FF0SP
A6 $00008004
0
$10002500
$7FF8
$7FF4
$7FF0
$1000 2500
$00007FF8$7FEC
1$7FE8
$1000 3FFB MOVEQ #3,(SP)$1000 3FFC BSR fact$1000 4000 ….
![Page 29: Subroutines - Part 2](https://reader035.fdocuments.net/reader035/viewer/2022081501/56814923550346895db65ca7/html5/thumbnails/29.jpg)
© 2006
Department of Computing Science
CMPUT 229
Example: fact(3)int fact ( int n ) { if (n < 1) return(1); else return(n * fact(n-1)); }
M68K assembly:
fact: LINK A6,#-4
TST.L 8(A6)
BGT L6
MOVEQ #1,D0
MOVE.L D0,-4(A6)
BRA L5
L6: MOVE.L 8(A6),D0 n 1
SUBQ.L #1,D0 D0 n-1
MOVE.L D0,(SP)
BSR fact
ADDQ.L #4,SP
MULS.L 8(A6),D0
MOVE.L D0,-4(A6)
L5: MOVE.L -4(A6),D0
UNLK A6
RTS
$10002500
1
$12345678
$0008010
2
$10002500
$10004000
3
Memory
SP
$8014
$8018
$8010
$800C
$8008
$8004
$8000
$7FFC
1D0
$00007FF8A6
$00007FF4SP
A6 $00008004
0
$10002500
$7FF8
$7FF4
$7FF0
$1000 2500
$00007FF8$7FEC
1$7FE8
$1000 3FFB MOVEQ #3,(SP)$1000 3FFC BSR fact$1000 4000 ….
![Page 30: Subroutines - Part 2](https://reader035.fdocuments.net/reader035/viewer/2022081501/56814923550346895db65ca7/html5/thumbnails/30.jpg)
© 2006
Department of Computing Science
CMPUT 229
Example: fact(3)int fact ( int n ) { if (n < 1) return(1); else return(n * fact(n-1)); }
M68K assembly:
fact: LINK A6,#-4
TST.L 8(A6)
BGT L6
MOVEQ #1,D0
MOVE.L D0,-4(A6)
BRA L5
L6: MOVE.L 8(A6),D0 n 1
SUBQ.L #1,D0 D0 n-1
MOVE.L D0,(SP)
BSR fact
ADD.L #4, SP
MULS.L 8(A6),D0
MOVE.L D0,-4(A6)
L5: MOVE.L -4(A6),D0
UNLK A6
RTS
$10002500
1
$12345678
$0008010
2
$10002500
$10004000
3
Memory
SP/A6
$8014
$8018
$8010
$800C
$8008
$8004
$8000
$7FFC
1D0
$00007FF8A6
$00007FF8SP
$00008004
0
$10002500
$7FF8
$7FF4
$7FF0
$1000 2500
$00007FF8$7FEC
1$7FE8
$1000 3FFB MOVEQ #3,(SP)$1000 3FFC BSR fact$1000 4000 ….
![Page 31: Subroutines - Part 2](https://reader035.fdocuments.net/reader035/viewer/2022081501/56814923550346895db65ca7/html5/thumbnails/31.jpg)
© 2006
Department of Computing Science
CMPUT 229
Example: fact(3)int fact ( int n ) { if (n < 1) return(1); else return(n * fact(n-1)); }
M68K assembly:
fact: LINK A6,#-4
TST.L 8(A6)
BGT L6
MOVEQ #1,D0
MOVE.L D0,-4(A6)
BRA L5
L6: MOVE.L 8(A6),D0 n 1
SUBQ.L #1,D0 D0 n-1
MOVE.L D0,(SP)
BSR fact
ADD.L #4, SP
MULS.L 8(A6),D0
MOVE.L D0,-4(A6)
L5: MOVE.L -4(A6),D0
UNLK A6
RTS
$10002500
1
$12345678
$0008010
2
$10002500
$10004000
3
Memory
$8014
$8018
$8010
$800C
$8008
$8004
$8000
$7FFC
1D0
$00007FF8A6
$00007FF0SP
$00008004
0
$10002500
$7FF8
$7FF4
$7FF0
$1000 2500
$00007FF8$7FEC
1$7FE8
SP/A6
$1000 3FFB MOVEQ #3,(SP)$1000 3FFC BSR fact$1000 4000 ….
![Page 32: Subroutines - Part 2](https://reader035.fdocuments.net/reader035/viewer/2022081501/56814923550346895db65ca7/html5/thumbnails/32.jpg)
© 2006
Department of Computing Science
CMPUT 229
Example: fact(3)int fact ( int n ) { if (n < 1) return(1); else return(n * fact(n-1)); }
M68K assembly:
fact: LINK A6,#-4
TST.L 8(A6)
BGT L6
MOVEQ #1,D0
MOVE.L D0,-4(A6)
BRA L5
L6: MOVE.L 8(A6),D0 n 1
SUBQ.L #1,D0 D0 n-1
MOVE.L D0,(SP)
BSR fact
ADD.L #4, SP
MULS.L 8(A6),D0
MOVE.L D0,-4(A6)
L5: MOVE.L -4(A6),D0
UNLK A6
RTS
$10002500
1
$12345678
$0008010
2
$10002500
$10004000
3
Memory
$8014
$8018
$8010
$800C
$8008
$8004
$8000
$7FFC
1D0
$00007FF8A6
$00007FF0SP
$00008004
1
$10002500
$7FF8
$7FF4
$7FF0
$1000 2500
$00007FF8$7FEC
1$7FE8
SP/A6
$1000 3FFB MOVEQ #3,(SP)$1000 3FFC BSR fact$1000 4000 ….
![Page 33: Subroutines - Part 2](https://reader035.fdocuments.net/reader035/viewer/2022081501/56814923550346895db65ca7/html5/thumbnails/33.jpg)
© 2006
Department of Computing Science
CMPUT 229
Example: fact(3)int fact ( int n ) { if (n < 1) return(1); else return(n * fact(n-1)); }
M68K assembly:
fact: LINK A6,#-4
TST.L 8(A6)
BGT L6
MOVEQ #1,D0
MOVE.L D0,-4(A6)
BRA L5
L6: MOVE.L 8(A6),D0 n 1
SUBQ.L #1,D0 D0 n-1
MOVE.L D0,(SP)
BSR fact
ADD.L #4, SP
MULS.L 8(A6),D0
MOVE.L D0,-4(A6)
L5: MOVE.L -4(A6),D0
UNLK A6
RTS
$10002500
1
$12345678
$0008010
2
$10002500
$10004000
3
Memory
SP
$8014
$8018
$8010
$800C
$8008
$8004
$8000
$7FFC
1D0
$00008004A6
$00007FFCSP
A6
$00008004
1
$10002500
$7FF8
$7FF4
$7FF0
$1000 2500
$00007FF8$7FEC
1$7FE8
$1000 3FFB MOVEQ #3,(SP)$1000 3FFC BSR fact$1000 4000 ….
![Page 34: Subroutines - Part 2](https://reader035.fdocuments.net/reader035/viewer/2022081501/56814923550346895db65ca7/html5/thumbnails/34.jpg)
© 2006
Department of Computing Science
CMPUT 229
Example: fact(3)int fact ( int n ) { if (n < 1) return(1); else return(n * fact(n-1)); }
M68K assembly:
fact: LINK A6,#-4
TST.L 8(A6)
BGT L6
MOVEQ #1,D0
MOVE.L D0,-4(A6)
BRA L5
L6: MOVE.L 8(A6),D0 n 1
SUBQ.L #1,D0 D0 n-1
MOVE.L D0,(SP)
BSR fact
ADD.L #4, SP
MULS.L 8(A6),D0
MOVE.L D0,-4(A6)
L5: MOVE.L -4(A6),D0
UNLK A6
RTS
$10002500
1
$12345678
$0008010
2
$10002500
$10004000
3
Memory
SP
$8014
$8018
$8010
$800C
$8008
$8004
$8000
$7FFC
1D0
$00008004A6
$00008000SP
A6
$00008004
1
$10002500
$7FF8
$7FF4
$7FF0
$1000 2500
$00007FF8$7FEC
1$7FE8
$1000 3FFB MOVEQ #3,(SP)$1000 3FFC BSR fact$1000 4000 ….
![Page 35: Subroutines - Part 2](https://reader035.fdocuments.net/reader035/viewer/2022081501/56814923550346895db65ca7/html5/thumbnails/35.jpg)
© 2006
Department of Computing Science
CMPUT 229
Example: fact(3)int fact ( int n ) { if (n < 1) return(1); else return(n * fact(n-1)); }
M68K assembly:
fact: LINK A6,#-4
TST.L 8(A6)
BGT L6
MOVEQ #1,D0
MOVE.L D0,-4(A6)
BRA L5
L6: MOVE.L 8(A6),D0 n 1
SUBQ.L #1,D0 D0 n-1
MOVE.L D0,(SP)
BSR fact
ADD.L #4, SP
MULS.L 8(A6),D0
MOVE.L D0,-4(A6)
L5: MOVE.L -4(A6),D0
UNLK A6
RTS
$10002500
1
$12345678
$0008010
2
$10002500
$10004000
3
Memory
$8014
$8018
$8010
$800C
$8008
$8004
$8000
$7FFC
2D0
$00008004A6
$00008004SP
SP/A6
$00008004
1
$10002500
$7FF8
$7FF4
$7FF0
$1000 2500
$00007FF8$7FEC
1$7FE8
$1000 3FFB MOVEQ #3,(SP)$1000 3FFC BSR fact$1000 4000 ….
![Page 36: Subroutines - Part 2](https://reader035.fdocuments.net/reader035/viewer/2022081501/56814923550346895db65ca7/html5/thumbnails/36.jpg)
© 2006
Department of Computing Science
CMPUT 229
Example: fact(3)int fact ( int n ) { if (n < 1) return(1); else return(n * fact(n-1)); }
M68K assembly:
fact: LINK A6,#-4
TST.L 8(A6)
BGT L6
MOVEQ #1,D0
MOVE.L D0,-4(A6)
BRA L5
L6: MOVE.L 8(A6),D0 n 1
SUBQ.L #1,D0 D0 n-1
MOVE.L D0,(SP)
BSR fact
ADD.L #4, SP
MULS.L 8(A6),D0
MOVE.L D0,-4(A6)
L5: MOVE.L -4(A6),D0
UNLK A6
RTS
$10002500
2
$12345678
$0008010
2
$10002500
$10004000
6
Memory
$8014
$8018
$8010
$800C
$8008
$8004
$8000
$7FFC
2D0
$00008004A6
$00008004SP
SP/A6
$00008004
1
$10002500
$7FF8
$7FF4
$7FF0
$1000 2500
$00007FF8$7FEC
1$7FE8
$1000 3FFB MOVEQ #3,(SP)$1000 3FFC BSR fact$1000 4000 ….
![Page 37: Subroutines - Part 2](https://reader035.fdocuments.net/reader035/viewer/2022081501/56814923550346895db65ca7/html5/thumbnails/37.jpg)
© 2006
Department of Computing Science
CMPUT 229
Example: fact(3)int fact ( int n ) { if (n < 1) return(1); else return(n * fact(n-1)); }
M68K assembly:
fact: LINK A6,#-4
TST.L 8(A6)
BGT L6
MOVEQ #1,D0
MOVE.L D0,-4(A6)
BRA L5
L6: MOVE.L 8(A6),D0 n 1
SUBQ.L #1,D0 D0 n-1
MOVE.L D0,(SP)
BSR fact
ADD.L #4, SP
MULS.L 8(A6),D0
MOVE.L D0,-4(A6)
L5: MOVE.L -4(A6),D0
UNLK A6
RTS
$10002500
2
$12345678
$0008010
2
$10002500
$10004000
3
Memory
$8014
$8018
$8010
$800C
$8008
$8004
$8000
$7FFC
2D0
$00008010A6
$00008008SP
SP
$00008004
1
$10002500
$7FF8
$7FF4
$7FF0
$1000 2500
$00007FF8$7FEC
1$7FE8
A6
$1000 3FFB MOVEQ #3,(SP)$1000 3FFC BSR fact$1000 4000 ….
![Page 38: Subroutines - Part 2](https://reader035.fdocuments.net/reader035/viewer/2022081501/56814923550346895db65ca7/html5/thumbnails/38.jpg)
© 2006
Department of Computing Science
CMPUT 229
Example: fact(3)int fact ( int n ) { if (n < 1) return(1); else return(n * fact(n-1)); }
M68K assembly:
fact: LINK A6,#-4
TST.L 8(A6)
BGT L6
MOVEQ #1,D0
MOVE.L D0,-4(A6)
BRA L5
L6: MOVE.L 8(A6),D0 n 1
SUBQ.L #1,D0 D0 n-1
MOVE.L D0,(SP)
BSR fact
ADD.L #4, SP
MULS.L 8(A6),D0
MOVE.L D0,-4(A6)
L5: MOVE.L -4(A6),D0
UNLK A6
RTS
$10002500
2
$12345678
$0008010
2
$10002500
$10004000
3
Memory
$8014
$8018
$8010
$800C
$8008
$8004
$8000
$7FFC
2D0
$00008010A6
$00008008SP
SP
$00008004
1
$10002500
$7FF8
$7FF4
$7FF0
$1000 2500
$00007FF8$7FEC
1$7FE8
A6
$1000 3FFB MOVEQ #3,(SP)$1000 3FFC BSR fact$1000 4000 ….
![Page 39: Subroutines - Part 2](https://reader035.fdocuments.net/reader035/viewer/2022081501/56814923550346895db65ca7/html5/thumbnails/39.jpg)
© 2006
Department of Computing Science
CMPUT 229
Example: fact(3)int fact ( int n ) { if (n < 1) return(1); else return(n * fact(n-1)); }
M68K assembly:
fact: LINK A6,#-4
TST.L 8(A6)
BGT L6
MOVEQ #1,D0
MOVE.L D0,-4(A6)
BRA L5
L6: MOVE.L 8(A6),D0 n 1
SUBQ.L #1,D0 D0 n-1
MOVE.L D0,(SP)
BSR fact
ADD.L #4, SP
MULS.L 8(A6),D0
MOVE.L D0,-4(A6)
L5: MOVE.L -4(A6),D0
UNLK A6
RTS
$10002500
2
$12345678
$0008010
2
$10002500
$10004000
3
Memory
$8014
$8018
$8010
$800C
$8008
$8004
$8000
$7FFC
2D0
$00008010A6
$00008010SP
$00008004
1
$10002500
$7FF8
$7FF4
$7FF0
$1000 2500
$00007FF8$7FEC
1$7FE8
SP/A6
$1000 3FFB MOVEQ #3,(SP)$1000 3FFC BSR fact$1000 4000 ….
![Page 40: Subroutines - Part 2](https://reader035.fdocuments.net/reader035/viewer/2022081501/56814923550346895db65ca7/html5/thumbnails/40.jpg)
© 2006
Department of Computing Science
CMPUT 229
Example: fact(3)int fact ( int n ) { if (n < 1) return(1); else return(n * fact(n-1)); }
M68K assembly:
fact: LINK A6,#-4
TST.L 8(A6)
BGT L6
MOVEQ #1,D0
MOVE.L D0,-4(A6)
BRA L5
L6: MOVE.L 8(A6),D0 n 1
SUBQ.L #1,D0 D0 n-1
MOVE.L D0,(SP)
BSR fact
ADD.L #4, SP
MULS.L 8(A6),D0
MOVE.L D0,-4(A6)
L5: MOVE.L -4(A6),D0
UNLK A6
RTS
$10002500
2
$12345678
$0008010
2
$10002500
$10004000
3
Memory
$8014
$8018
$8010
$800C
$8008
$8004
$8000
$7FFC
6D0
$00008010A6
$00008010SP
$00008004
1
$10002500
$7FF8
$7FF4
$7FF0
$1000 2500
$00007FF8$7FEC
1$7FE8
SP/A6
$1000 3FFB MOVEQ #3,(SP)$1000 3FFC BSR fact$1000 4000 ….
![Page 41: Subroutines - Part 2](https://reader035.fdocuments.net/reader035/viewer/2022081501/56814923550346895db65ca7/html5/thumbnails/41.jpg)
© 2006
Department of Computing Science
CMPUT 229
Example: fact(3)int fact ( int n ) { if (n < 1) return(1); else return(n * fact(n-1)); }
M68K assembly:
fact: LINK A6,#-4
TST.L 8(A6)
BGT L6
MOVEQ #1,D0
MOVE.L D0,-4(A6)
BRA L5
L6: MOVE.L 8(A6),D0 n 1
SUBQ.L #1,D0 D0 n-1
MOVE.L D0,(SP)
BSR fact
ADD.L #4, SP
MULS.L 8(A6),D0
MOVE.L D0,-4(A6)
L5: MOVE.L -4(A6),D0
UNLK A6
RTS
$10002500
1
$12345678
$0008010
6
$10002500
$10004000
3
Memory
$8014
$8018
$8010
$800C
$8008
$8004
$8000
$7FFC
6D0
$00008010A6
$00008010SP
$00008004
1
$10002500
$7FF8
$7FF4
$7FF0
$1000 2500
$00007FF8$7FEC
1$7FE8
SP/A6
$1000 3FFB MOVEQ #3,(SP)$1000 3FFC BSR fact$1000 4000 ….
![Page 42: Subroutines - Part 2](https://reader035.fdocuments.net/reader035/viewer/2022081501/56814923550346895db65ca7/html5/thumbnails/42.jpg)
© 2006
Department of Computing Science
CMPUT 229
Example: fact(3)int fact ( int n ) { if (n < 1) return(1); else return(n * fact(n-1)); }
M68K assembly:
fact: LINK A6,#-4
TST.L 8(A6)
BGT L6
MOVEQ #1,D0
MOVE.L D0,-4(A6)
BRA L5
L6: MOVE.L 8(A6),D0 n 1
SUBQ.L #1,D0 D0 n-1
MOVE.L D0,(SP)
BSR fact
ADD.L #4, SP
MULS.L 8(A6),D0
MOVE.L D0,-4(A6)
L5: MOVE.L -4(A6),D0
UNLK A6
RTS
$10002500
1
$12345678
$0008010
6
$10002500
$10004000
3
Memory
$8014
$8018
$8010
$800C
$8008
$8004
$8000
$7FFC
6D0
$12345678A6
$00008014SP
$00008004
1
$10002500
$7FF8
$7FF4
$7FF0
$1000 2500
$00007FF8$7FEC
1$7FE8
SP$1000 3FFB MOVEQ #3,(SP)$1000 3FFC BSR fact$1000 4000 ….
![Page 43: Subroutines - Part 2](https://reader035.fdocuments.net/reader035/viewer/2022081501/56814923550346895db65ca7/html5/thumbnails/43.jpg)
© 2006
Department of Computing Science
CMPUT 229
Example: fact(3)int fact ( int n ) { if (n < 1) return(1); else return(n * fact(n-1)); }
M68K assembly:
fact: LINK A6,#-4
TST.L 8(A6)
BGT L6
MOVEQ #1,D0
MOVE.L D0,-4(A6)
BRA L5
L6: MOVE.L 8(A6),D0 n 1
SUBQ.L #1,D0 D0 n-1
MOVE.L D0,(SP)
BSR fact
ADD.L #4, SP
MULS.L 8(A6),D0
MOVE.L D0,-4(A6)
L5: MOVE.L -4(A6),D0
UNLK A6
RTS
$10002500
1
$12345678
$0008010
6
$10002500
$10004000
3
Memory
$8014
$8018
$8010
$800C
$8008
$8004
$8000
$7FFC
6D0
$12345678A6
$00008018SP
$00008004
1
$10002500
$7FF8
$7FF4
$7FF0
$1000 2500
$00007FF8$7FEC
1$7FE8
SP
$1000 3FFB MOVEQ #3,(SP)$1000 3FFC BSR fact$1000 4000 ….
![Page 44: Subroutines - Part 2](https://reader035.fdocuments.net/reader035/viewer/2022081501/56814923550346895db65ca7/html5/thumbnails/44.jpg)
© 2006
Department of Computing Science
CMPUT 229
Example: fact(3)int fact ( int n ) { if (n < 1) return(1); else return(n * fact(n-1)); }
M68K assembly:
fact: LINK A6,#-4
TST.L 8(A6)
BGT L6
MOVEQ #1,D0
MOVE.L D0,-4(A6)
BRA L5
L6: MOVE.L 8(A6),D0 n 1
SUBQ.L #1,D0 D0 n-1
MOVE.L D0,(SP)
BSR fact
ADD.L #4, SP
MULS.L 8(A6),D0
MOVE.L D0,-4(A6)
L5: MOVE.L -4(A6),D0
UNLK A6
RTS
$10002500
1
$12345678
$0008010
6
$10002500
$10004000
3
Memory
$8014
$8018
$8010
$800C
$8008
$8004
$8000
$7FFC
6D0
$12345678A6
$00008018SP
$00008004
1
$10002500
$7FF8
$7FF4
$7FF0
$1000 2500
$00007FF8$7FEC
1$7FE8
SP
$1000 3FFB MOVEQ #3,(SP)$1000 3FFC BSR fact$1000 4000 ….
![Page 45: Subroutines - Part 2](https://reader035.fdocuments.net/reader035/viewer/2022081501/56814923550346895db65ca7/html5/thumbnails/45.jpg)
© 2006
Department of Computing Science
CMPUT 229
Example: fact(3)int fact ( int n ) { if (n < 1) return(1); else return(n * fact(n-1)); }
M68K assembly:
fact: LINK A6,#-4
TST.L 8(A6)
BGT L6
MOVEQ #1,D0
MOVE.L D0,-4(A6)
BRA L5
L6: MOVE.L 8(A6),D0 n 1
SUBQ.L #1,D0 D0 n-1
MOVE.L D0,(SP)
BSR fact
ADD.L #4, SP
MULS.L 8(A6),D0
MOVE.L D0,-4(A6)
L5: MOVE.L -4(A6),D0
UNLK A6
RTS
$10002500
1
$12345678
$0008010
2
$10002500
$10004000
3
Memory
$8014
$8018
$8010
$800C
$8008
$8004
$8000
$7FFC
2D0
$00008010A6
$00008008SP
SP
$00008004
1
$10002500
$7FF8
$7FF4
$7FF0
$1000 2500
$1000 3FFB MOVEQ #3,D0$1000 3FFC BSR fact$1000 4000 ….
$00007FF8$7FEC
1$7FE8
A6
![Page 46: Subroutines - Part 2](https://reader035.fdocuments.net/reader035/viewer/2022081501/56814923550346895db65ca7/html5/thumbnails/46.jpg)
© 2006
Department of Computing Science
CMPUT 229
Example: fact(3)int fact ( int n ) { if (n < 1) return(1); else return(n * fact(n-1)); }
M68K assembly:
fact: LINK A6,#-4
TST.L 8(A6)
BGT L6
MOVEQ #1,D0
MOVE.L D0,-4(A6)
BRA L5
L6: MOVE.L 8(A6),D0 n 1
SUBQ.L #1,D0 D0 n-1
MOVE.L D0,(SP)
BSR fact
ADD.L #4, SP
MULS.L 8(A6),D0
MOVE.L D0,-4(A6)
L5: MOVE.L -4(A6),D0
UNLK A6
RTS
$10002500
1
$12345678
$0008010
2
$10002500
$10004000
3
Memory
$8014
$8018
$8010
$800C
$8008
$8004
$8000
$7FFC
2D0
$00008010A6
$00008014SP
SP
$00008004
1
$10002500
$7FF8
$7FF4
$7FF0
$1000 2500
$1000 3FFB MOVEQ #3,D0$1000 3FFC BSR fact$1000 4000 ….
$00007FF8$7FEC
1$7FE8
![Page 47: Subroutines - Part 2](https://reader035.fdocuments.net/reader035/viewer/2022081501/56814923550346895db65ca7/html5/thumbnails/47.jpg)
© 2006
Department of Computing Science
CMPUT 229
Example: fact(3)int fact ( int n ) { if (n < 1) return(1); else return(n * fact(n-1)); }
M68K assembly:
fact: LINK A6,#-4
TST.L 8(A6)
BGT L6
MOVEQ #1,D0
MOVE.L D0,-4(A6)
BRA L5
L6: MOVE.L 8(A6),D0 n 1
SUBQ.L #1,D0 D0 n-1
MOVE.L D0,(SP)
BSR fact
ADD.L #4, SP
MULS.L 8(A6),D0
MOVE.L D0,-4(A6)
L5: MOVE.L -4(A6),D0
UNLK A6
RTS
$10002500
1
$12345678
$0008010
2
$10002500
$10004000
6
Memory
$8014
$8018
$8010
$800C
$8008
$8004
$8000
$7FFC
6D0
$00008010A6
$00008010SP
$00008004
1
$10002500
$7FF8
$7FF4
$7FF0
$1000 2500
$1000 3FFB MOVEQ #3,D0$1000 3FFC BSR fact$1000 4000 ….
$00007FF8$7FEC
1$7FE8
SP/A6
![Page 48: Subroutines - Part 2](https://reader035.fdocuments.net/reader035/viewer/2022081501/56814923550346895db65ca7/html5/thumbnails/48.jpg)
© 2006
Department of Computing Science
CMPUT 229
Example: fact(3)int fact ( int n ) { if (n < 1) return(1); else return(n * fact(n-1)); }
M68K assembly:
fact: LINK A6,#-4
TST.L 8(A6)
BGT L6
MOVEQ #1,D0
MOVE.L D0,-4(A6)
BRA L5
L6: MOVE.L 8(A6),D0 n 1
SUBQ.L #1,D0 D0 n-1
MOVE.L D0,(SP)
BSR fact
ADD.L #4, SP
MULS.L 8(A6),D0
MOVE.L D0,-4(A6)
L5: MOVE.L -4(A6),D0
UNLK A6
RTS
$10002500
1
$12345678
$0008010
2
$10002500
$10004000
6
Memory
$8014
$8018
$8010
$800C
$8008
$8004
$8000
$7FFC
6D0
$00008010A6
$00008010SP
$00008004
1
$10002500
$7FF8
$7FF4
$7FF0
$1000 2500
$1000 3FFB MOVEQ #3,D0$1000 3FFC BSR fact$1000 4000 ….
$00007FF8$7FEC
1$7FE8
SP/A6
![Page 49: Subroutines - Part 2](https://reader035.fdocuments.net/reader035/viewer/2022081501/56814923550346895db65ca7/html5/thumbnails/49.jpg)
© 2006
Department of Computing Science
CMPUT 229
Example: fact(3)int fact ( int n ) { if (n < 1) return(1); else return(n * fact(n-1)); }
M68K assembly:
fact: LINK A6,#-4
TST.L 8(A6)
BGT L6
MOVEQ #1,D0
MOVE.L D0,-4(A6)
BRA L5
L6: MOVE.L 8(A6),D0 n 1
SUBQ.L #1,D0 D0 n-1
MOVE.L D0,(SP)
BSR fact
ADD.L #4, SP
MULS.L 8(A6),D0
MOVE.L D0,-4(A6)
L5: MOVE.L -4(A6),D0
UNLK A6
RTS
$10002500
1
$12345678
$0008010
2
$10002500
$10004000
6
Memory
$8014
$8018
$8010
$800C
$8008
$8004
$8000
$7FFC
6D0
$12345678A6
$00008010SP
$00008004
1
$10002500
$7FF8
$7FF4
$7FF0
$1000 2500
$1000 3FFB MOVEQ #3,D0$1000 3FFC BSR fact$1000 4000 ….
$00007FF8$7FEC
1$7FE8
SP
![Page 50: Subroutines - Part 2](https://reader035.fdocuments.net/reader035/viewer/2022081501/56814923550346895db65ca7/html5/thumbnails/50.jpg)
© 2006
Department of Computing Science
CMPUT 229
Example: fact(3)int fact ( int n ) { if (n < 1) return(1); else return(n * fact(n-1)); }
M68K assembly:
fact: LINK A6,#-4
TST.L 8(A6)
BGT L6
MOVEQ #1,D0
MOVE.L D0,-4(A6)
BRA L5
L6: MOVE.L 8(A6),D0 n 1
SUBQ.L #1,D0 D0 n-1
MOVE.L D0,(SP)
BSR fact
ADD.L #4, SP
MULS.L 8(A6),D0
MOVE.L D0,-4(A6)
L5: MOVE.L -4(A6),D0
UNLK A6
RTS
$10002500
1
$12345678
$0008010
2
$10002500
$10004000
6
Memory
$8014
$8018
$8010
$800C
$8008
$8004
$8000
$7FFC
6D0
$12345678A6
$00008010SP
$00008004
1
$10002500
$7FF8
$7FF4
$7FF0
$1000 2500
$1000 3FFB MOVEQ #3,D0$1000 3FFC BSR fact$1000 4000 ….
$00007FF8$7FEC
1$7FE8
SP
![Page 51: Subroutines - Part 2](https://reader035.fdocuments.net/reader035/viewer/2022081501/56814923550346895db65ca7/html5/thumbnails/51.jpg)
© 2006
Department of Computing Science
CMPUT 229
Example: fact(3)int fact ( int n ) { if (n < 1) return(1); else return(n * fact(n-1)); }
M68K assembly:
fact: LINK A6,#-4
TST.L 8(A6)
BGT L6
MOVEQ #1,D0
MOVE.L D0,-4(A6)
BRA L5
L6: MOVE.L 8(A6),D0 n 1
SUBQ.L #1,D0 D0 n-1
MOVE.L D0,(SP)
BSR fact
ADD.L #4, SP
MULS.L 8(A6),D0
MOVE.L D0,-4(A6)
L5: MOVE.L -4(A6),D0
UNLK A6
RTS
$10002500
1
$12345678
$0008010
2
$10002500
$10004000
6
Memory
$8014
$8018
$8010
$800C
$8008
$8004
$8000
$7FFC
6D0
$12345678A6
$00008010SP
$00008004
1
$10002500
$7FF8
$7FF4
$7FF0
$1000 2500
$1000 3FFB MOVEQ #3,D0$1000 3FFC BSR fact$1000 4000 ….
$00007FF8$7FEC
1$7FE8
SP
![Page 52: Subroutines - Part 2](https://reader035.fdocuments.net/reader035/viewer/2022081501/56814923550346895db65ca7/html5/thumbnails/52.jpg)
© 2006
Department of Computing Science
CMPUT 229
Other Data Stored in the Stack
$sp
High Address
Low Address
$fp
Before procedurecall
$sp
High Address
Low Address
$fp
After procedurecall
$sp
High Address
Low Address
$fp
During procedurecall
Saved argumentregisters
Saved return reg.
Savedregisters
Local arraysand structures
Patt.-Hen. pp 139
![Page 53: Subroutines - Part 2](https://reader035.fdocuments.net/reader035/viewer/2022081501/56814923550346895db65ca7/html5/thumbnails/53.jpg)
© 2006
Department of Computing Science
CMPUT 229
ASCII Code
Code Char Code Char Code Char Code Char Code Char Code Char 32 Space 48 0 64 @ 80 P 96 ` 112 p 33 ! 49 1 65 A 81 Q 97 a 113 q 34 “ 50 2 66 B 82 R 98 b 114 r 35 # 51 3 67 C 83 S 99 c 115 s 36 $ 52 4 68 D 84 T 100 d 116 t 37 % 53 5 69 E 85 U 101 e 117 u 38 & 54 6 70 F 86 V 102 f 118 v 39 ‘ 55 7 71 G 87 W 103 g 119 w 40 ) 56 8 72 H 88 X 104 h 120 x 41 ( 57 9 73 I 89 Y 105 i 121 y 42 * 58 : 74 J 90 Z 106 j 122 z 43 + 59 ; 75 K 91 [ 107 k 123 { 44 , 60 < 76 L 92 \ 108 l 124 | 45 - 61 = 77 M 93 ] 109 m 125 } 46 . 62 > 78 N 94 ̂ 110 n 126 ~ 47 / 63 ? 79 O 95 _ 111 o 127 DEL
Patt.-Hen., pp 142
![Page 54: Subroutines - Part 2](https://reader035.fdocuments.net/reader035/viewer/2022081501/56814923550346895db65ca7/html5/thumbnails/54.jpg)
© 2006
Department of Computing Science
CMPUT 229
A Procedure that Doesn’t Call Another Procedure
void strcpy ( char x[ ], char y[ ]) { int i;
i = 0; while ((x[i] = y[i]) != 0) i = i + 1; }
Parameter Passing Conventionbase of array x[ ] A0base of array y[ ] A1
Assumptioni D0
M68K assembly:strcpy
ADD.L #4, SP Room in stack for 1 more itemMOVE D0, (SP) Save D0 into stackMOVEQ #0, D0 i 0
L1: MOVE.B (A1,D0), D4 D4 y[i]MOVE.B (A0,D0), D5 D5 y[i]TST D5 if y[I] = 0BEQ L2 doneADDQ #1, D0 i i + 1BRA L1 Repeat
L2: MOVE.L (SP), D0 Restore D0ADD.L #-4, SP pop one word off stackRTS return
![Page 55: Subroutines - Part 2](https://reader035.fdocuments.net/reader035/viewer/2022081501/56814923550346895db65ca7/html5/thumbnails/55.jpg)
© 2006
Department of Computing Science
CMPUT 229
A Procedure that Doesn’t Call Another Procedure
save D0 in stackvoid strcpy ( char x[ ], char y[ ]) { int i;
i = 0; while ((x[i] = y[i]) != 0) i = i + 1; }
M68K assembly:strcpy
ADD.L #4, SP Room in stack for 1 more itemMOVE D0, (SP) Save D0 into stackMOVEQ #0, D0 i 0
L1: MOVE.B (A1,D0), D4 D4 y[i]MOVE.B (A0,D0), D5 D5 y[i]TST D5 if y[I] = 0BEQ L2 doneADDQ #1, D0 i i + 1BRA L1 Repeat
L2: MOVE.L (SP), D0 Restore D0ADD.L #-4, SP pop one word off stackRTS return
Parameter Passing Conventionbase of array x[ ] A0base of array y[ ] A1
Assumptioni D0
![Page 56: Subroutines - Part 2](https://reader035.fdocuments.net/reader035/viewer/2022081501/56814923550346895db65ca7/html5/thumbnails/56.jpg)
© 2006
Department of Computing Science
CMPUT 229
A Procedure that Doesn’t Call Another Procedure
save $s0 in stack
i 0
void strcpy ( char x[ ], char y[ ]) { int i;
i = 0; while ((x[i] = y[i]) != 0) i = i + 1; }
M68K assembly:strcpy
ADD.L #4, SP Room in stack for 1 more itemMOVE D0, (SP) Save D0 into stackMOVEQ #0, D0 i 0
L1: MOVE.B (A1,D0), D4 D4 y[i]MOVE.B (A0,D0), D5 D5 y[i]TST D5 if y[I] = 0BEQ L2 doneADDQ #1, D0 i i + 1BRA L1 Repeat
L2: MOVE.L (SP), D0 Restore D0ADD.L #-4, SP pop one word off stackRTS return
Parameter Passing Conventionbase of array x[ ] A0base of array y[ ] A1
Assumptioni D0
![Page 57: Subroutines - Part 2](https://reader035.fdocuments.net/reader035/viewer/2022081501/56814923550346895db65ca7/html5/thumbnails/57.jpg)
© 2006
Department of Computing Science
CMPUT 229
A Procedure that Doesn’t Call Another Procedure
save $s0 in stack
i 0
x[i] y[i]
void strcpy ( char x[ ], char y[ ]) { int i;
i = 0; while ((x[i] = y[i]) != 0) i = i + 1; }
M68K assembly:strcpy
ADD.L #4, SP Room in stack for 1 more itemMOVE D0, (SP) Save D0 into stackMOVEQ #0, D0 i 0
L1: MOVE.B (A1,D0), D4 D4 y[i]MOVE.B D4, (A0,D0) x[i] y[i]TST D5 if y[I] = 0BEQ L2 doneADDQ #1, D0 i i + 1BRA L1 Repeat
L2: MOVE.L (SP), D0 Restore D0ADD.L #-4, SP pop one word off stackRTS return
Parameter Passing Conventionbase of array x[ ] A0base of array y[ ] A1
Assumptioni D0
![Page 58: Subroutines - Part 2](https://reader035.fdocuments.net/reader035/viewer/2022081501/56814923550346895db65ca7/html5/thumbnails/58.jpg)
© 2006
Department of Computing Science
CMPUT 229
A Procedure that Doesn’t Call Another Procedure
save $s0 in stack
y[i] = 0?
i 0
x[i] y[i]
void strcpy ( char x[ ], char y[ ]) { int i;
i = 0; while ((x[i] = y[i]) != 0) i = i + 1; }
M68K assembly:strcpy
ADD.L #4, SP Room in stack for 1 more itemMOVE D0, (SP) Save D0 into stackMOVEQ #0, D0 i 0
L1: MOVE.B (A1,D0), D4 D4 y[i]MOVE.B D4, (A0,D0) x[i] y[i]TST D5 if y[I] = 0BEQ L2 doneADDQ #1, D0 i i + 1BRA L1 Repeat
L2: MOVE.L (SP), D0 Restore D0ADD.L #-4, SP pop one word off stackRTS return
Parameter Passing Conventionbase of array x[ ] A0base of array y[ ] A1
Assumptioni D0
![Page 59: Subroutines - Part 2](https://reader035.fdocuments.net/reader035/viewer/2022081501/56814923550346895db65ca7/html5/thumbnails/59.jpg)
© 2006
Department of Computing Science
CMPUT 229
A Procedure that Doesn’t Call Another Procedure
i i + 1
save $s0 in stack
no
y[i] = 0?
i 0
x[i] y[i]
void strcpy ( char x[ ], char y[ ]) { int i;
i = 0; while ((x[i] = y[i]) != 0) i = i + 1; }
M68K assembly:strcpy
ADD.L #4, SP Room in stack for 1 more itemMOVE D0, (SP) Save D0 into stackMOVEQ #0, D0 i 0
L1: MOVE.B (A1,D0), D4 D4 y[i]MOVE.B D4, (A0,D0) x[i] y[i]TST D5 if y[I] = 0BEQ L2 doneADDQ #1, D0 i i + 1BRA L1 Repeat
L2: MOVE.L (SP), D0 Restore D0ADD.L #-4, SP pop one word off stackRTS return
Parameter Passing Conventionbase of array x[ ] A0base of array y[ ] A1
Assumptioni D0
![Page 60: Subroutines - Part 2](https://reader035.fdocuments.net/reader035/viewer/2022081501/56814923550346895db65ca7/html5/thumbnails/60.jpg)
© 2006
Department of Computing Science
CMPUT 229
A Procedure that Doesn’t Call Another Procedure
i i + 1
save $s0 in stack
no
y[i] = 0?
yes
restore $s0
return
i 0
x[i] y[i]
void strcpy ( char x[ ], char y[ ]) { int i;
i = 0; while ((x[i] = y[i]) != 0) i = i + 1; }
M68K assembly:strcpy
ADD.L #4, SP Room in stack for 1 more itemMOVE D0, (SP) Save D0 into stackMOVEQ #0, D0 i 0
L1: MOVE.B (A1,D0), D4 D4 y[i]MOVE.B D4, (A0,D0) x[i] y[i]TST D5 if y[I] = 0BEQ L2 doneADDQ #1, D0 i i + 1BRA L1 Repeat
L2: MOVE.L (SP), D0 Restore D0ADD.L #-4, SP pop one word off stackRTS return
Parameter Passing Conventionbase of array x[ ] A0base of array y[ ] A1
Assumptioni D0