1 / 60

Subroutines - Part 2

Calling Itself. Subroutines - Part 2. Calling Itself. int fact ( int n ) { if (n < 1) return (1); else return (n * fact(n-1)); }. D0. Linking a Recursive Procedure. int fact ( int n ) { if (n < 1) return (1); else return (n * fact(n-1));

shepry
Download Presentation

Subroutines - Part 2

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Calling Itself Subroutines - Part 2 CMPUT 229

  2. CMPUT 229 Calling Itself int fact ( intn ) { if (n < 1) return(1); else return(n * fact(n-1)); }

  3. CMPUT 229 D0 Linking a Recursive Procedure int fact ( intn ) { if (n < 1) return(1); else return(n * fact(n-1)); } A6 SP 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 $7FFC $8000 $8004 $8008 $800C $8010 $8014 $8018 SP

  4. CMPUT 229 D0 Example: fact(3) int fact ( intn ) { if (n < 1) return(1); else return(n * fact(n-1)); } A6 $12345678 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 SP $00008014 Memory $7FFC $8000 $8004 $8008 $800C $8010 SP $8014 $10004000 $1000 3FFB MOVEQ #3,(SP) $1000 3FFC BSR fact $1000 4000 …. $8018 3

  5. CMPUT 229 D0 Example: fact(3) int fact ( intn ) { if (n < 1) return(1); else return(n * fact(n-1)); } A6 $00008010 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 SP $0000800C Memory $7FFC $8000 $8004 $8008 $800C SP $8010 $12345678 A6 $8014 $10004000 $1000 3FFB MOVEQ #3,(SP) $1000 3FFC BSR fact $1000 4000 …. $8018 3

  6. CMPUT 229 D0 Example: fact(3) int fact ( intn ) { if (n < 1) return(1); else return(n * fact(n-1)); } A6 $00008010 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 SP $0000800C Memory $7FFC $8000 $8004 $8008 $800C SP $8010 $12345678 A6 $8014 $10004000 $1000 3FFB MOVEQ #3,(SP) $1000 3FFC BSR fact $1000 4000 …. $8018 3

  7. CMPUT 229 D0 3 Example: fact(3) int fact ( intn ) { if (n < 1) return(1); else return(n * fact(n-1)); } A6 $00008010 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 SP $0000800C Memory $7FFC $8000 $8004 $8008 $800C SP $8010 $12345678 A6 $8014 $10004000 $1000 3FFB MOVEQ #3,(SP) $1000 3FFC BSR fact $1000 4000 …. $8018 3

  8. CMPUT 229 D0 2 Example: fact(3) int fact ( intn ) { if (n < 1) return(1); else return(n * fact(n-1)); } A6 $00008010 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 SP $0000800C Memory $7FFC $8000 $8004 $8008 $800C SP $8010 $12345678 A6 $8014 $10004000 $1000 3FFB MOVEQ #3,(SP) $1000 3FFC BSR fact $1000 4000 …. $8018 3

  9. CMPUT 229 D0 2 Example: fact(3) int fact ( intn ) { if (n < 1) return(1); else return(n * fact(n-1)); } A6 $00008010 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 SP $0000800C Memory $7FFC $8000 $8004 $8008 $800C 2 SP $8010 $12345678 A6 $8014 $10004000 $1000 3FFB MOVEQ #3,(SP) $1000 3FFC BSR fact $1000 4000 …. $8018 3

  10. CMPUT 229 Assuming that call to subroutine fact is at address $100024FC D0 2 Example: fact(3) int fact ( intn ) { if (n < 1) return(1); else return(n * fact(n-1)); } A6 $00008010 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 SP $00008008 Memory $7FFC $8000 $8004 $1000 2500 SP $8008 $10002500 $800C 2 $8010 $12345678 A6 $8014 $10004000 $1000 3FFB MOVEQ #3,(SP) $1000 3FFC BSR fact $1000 4000 …. $8018 3

  11. CMPUT 229 D0 2 Example: fact(3) int fact ( intn ) { if (n < 1) return(1); else return(n * fact(n-1)); } A6 $00008004 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 SP $00008000 Memory $7FFC SP $8000 A6 $8004 $0008010 $1000 2500 $8008 $10002500 $800C 2 $8010 $12345678 $8014 $10004000 $1000 3FFB MOVEQ #3,(SP) $1000 3FFC BSR fact $1000 4000 …. $8018 3

  12. CMPUT 229 D0 2 Example: fact(3) int fact ( intn ) { if (n < 1) return(1); else return(n * fact(n-1)); } A6 $00008004 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 SP $00008000 Memory $7FFC SP $8000 A6 $8004 $0008010 $1000 2500 $8008 $10002500 $800C 2 $8010 $12345678 $8014 $10004000 $1000 3FFB MOVEQ #3,(SP) $1000 3FFC BSR fact $1000 4000 …. $8018 3

  13. CMPUT 229 D0 2 Example: fact(3) int fact ( intn ) { if (n < 1) return(1); else return(n * fact(n-1)); } A6 $00008004 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 SP $00008000 Memory $7FFC SP $8000 A6 $8004 $0008010 $1000 2500 $8008 $10002500 $800C 2 $8010 $12345678 $8014 $10004000 $1000 3FFB MOVEQ #3,(SP) $1000 3FFC BSR fact $1000 4000 …. $8018 3

  14. CMPUT 229 D0 1 Example: fact(3) int fact ( intn ) { if (n < 1) return(1); else return(n * fact(n-1)); } A6 $00008004 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 SP $00008000 Memory $7FFC SP $8000 A6 $8004 $0008010 $1000 2500 $8008 $10002500 $800C 2 $8010 $12345678 $8014 $10004000 $1000 3FFB MOVEQ #3,(SP) $1000 3FFC BSR fact $1000 4000 …. $8018 3

  15. CMPUT 229 D0 1 Example: fact(3) int fact ( intn ) { if (n < 1) return(1); else return(n * fact(n-1)); } A6 $00008004 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 SP $00008000 Memory $7FFC SP $8000 1 A6 $8004 $0008010 $1000 2500 $8008 $10002500 $800C 2 $8010 $12345678 $8014 $10004000 $1000 3FFB MOVEQ #3,(SP) $1000 3FFC BSR fact $1000 4000 …. $8018 3

  16. CMPUT 229 D0 1 Example: fact(3) int fact ( intn ) { if (n < 1) return(1); else return(n * fact(n-1)); } A6 $00008004 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 SP $00007FFC Memory $7FF0 $7FF4 $7FF8 $7FFC $10002500 SP $8000 1 A6 $8004 $0008010 $1000 2500 $8008 $10002500 $800C 2 $8010 $12345678 $8014 $10004000 $1000 3FFB MOVEQ #3,(SP) $1000 3FFC BSR fact $1000 4000 …. $8018 3

  17. CMPUT 229 D0 1 Example: fact(3) int fact ( intn ) { if (n < 1) return(1); else return(n * fact(n-1)); } A6 $00007FF8 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 SP $00007FF4 Memory $7FF0 $7FF4 SP $7FF8 A6 $00008004 $7FFC $10002500 $8000 1 $8004 $0008010 $1000 2500 $8008 $10002500 $800C 2 $8010 $12345678 $8014 $10004000 $1000 3FFB MOVEQ #3,(SP) $1000 3FFC BSR fact $1000 4000 …. $8018 3

  18. CMPUT 229 D0 1 Example: fact(3) int fact ( intn ) { if (n < 1) return(1); else return(n * fact(n-1)); } A6 $00007FF8 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 SP $00007FF4 Memory $7FF0 $7FF4 SP $7FF8 A6 $00008004 $7FFC $10002500 $8000 1 $8004 $0008010 $1000 2500 $8008 $10002500 $800C 2 $8010 $12345678 $8014 $10004000 $1000 3FFB MOVEQ #3,(SP) $1000 3FFC BSR fact $1000 4000 …. $8018 3

  19. CMPUT 229 D0 1 Example: fact(3) int fact ( intn ) { if (n < 1) return(1); else return(n * fact(n-1)); } A6 $00007FF8 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 SP $00007FF4 Memory $7FF0 $7FF4 SP $7FF8 A6 $00008004 $7FFC $10002500 $8000 1 $8004 $0008010 $1000 2500 $8008 $10002500 $800C 2 $8010 $12345678 $8014 $10004000 $1000 3FFB MOVEQ #3,(SP) $1000 3FFC BSR fact $1000 4000 …. $8018 3

  20. CMPUT 229 D0 0 Example: fact(3) int fact ( intn ) { if (n < 1) return(1); else return(n * fact(n-1)); } A6 $00007FF8 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 SP $00007FF4 Memory $7FF0 $7FF4 SP $7FF8 A6 $00008004 $7FFC $10002500 $8000 1 $8004 $0008010 $1000 2500 $8008 $10002500 $800C 2 $8010 $12345678 $8014 $10004000 $1000 3FFB MOVEQ #3,(SP) $1000 3FFC BSR fact $1000 4000 …. $8018 3

  21. CMPUT 229 D0 0 Example: fact(3) int fact ( intn ) { if (n < 1) return(1); else return(n * fact(n-1)); } A6 $00007FF8 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 SP $00007FF4 Memory $7FF0 $7FF4 SP 0 $7FF8 A6 $00008004 $7FFC $10002500 $8000 1 $8004 $0008010 $1000 2500 $8008 $10002500 $800C 2 $8010 $12345678 $8014 $10004000 $1000 3FFB MOVEQ #3,(SP) $1000 3FFC BSR fact $1000 4000 …. $8018 3

  22. CMPUT 229 D0 0 Example: fact(3) A6 $00007FF8 int fact ( intn ) { if (n < 1) return(1); else return(n * fact(n-1)); } SP $00007FF0 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 $7FE8 $7FEC $7FF0 SP $10002500 $7FF4 0 $7FF8 A6 $00008004 $7FFC $10002500 $8000 1 $8004 $0008010 $1000 2500 $8008 $10002500 $800C 2 $8010 $12345678 $8014 $10004000 $1000 3FFB MOVEQ #3,(SP) $1000 3FFC BSR fact $1000 4000 …. $8018 3

  23. CMPUT 229 D0 0 Example: fact(3) A6 $00007FEC int fact ( intn ) { if (n < 1) return(1); else return(n * fact(n-1)); } SP $00007FE8 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 Memory SP $7FE8 $7FEC A6 $00007FF8 $7FF0 $10002500 $7FF4 0 $7FF8 $00008004 $7FFC $10002500 $8000 1 $8004 $0008010 $1000 2500 $8008 $10002500 $800C 2 $8010 $12345678 $8014 $10004000 $1000 3FFB MOVEQ #3,(SP) $1000 3FFC BSR fact $1000 4000 …. $8018 3

  24. CMPUT 229 D0 0 Example: fact(3) A6 $00007FEC int fact ( intn ) { if (n < 1) return(1); else return(n * fact(n-1)); } SP $00007FE8 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 Memory SP $7FE8 $7FEC A6 $00007FF8 $7FF0 $10002500 $7FF4 0 $7FF8 $00008004 $7FFC $10002500 $8000 1 $8004 $0008010 $1000 2500 $8008 $10002500 $800C 2 $8010 $12345678 $8014 $10004000 $1000 3FFB MOVEQ #3,(SP) $1000 3FFC BSR fact $1000 4000 …. $8018 3

  25. CMPUT 229 D0 1 Example: fact(3) A6 $00007FEC int fact ( intn ) { if (n < 1) return(1); else return(n * fact(n-1)); } SP $00007FE8 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 Memory SP $7FE8 $7FEC A6 $00007FF8 $7FF0 $10002500 $7FF4 0 $7FF8 $00008004 $7FFC $10002500 $8000 1 $8004 $0008010 $1000 2500 $8008 $10002500 $800C 2 $8010 $12345678 $8014 $10004000 $1000 3FFB MOVEQ #3,(SP) $1000 3FFC BSR fact $1000 4000 …. $8018 3

  26. CMPUT 229 D0 1 Example: fact(3) A6 $00007FEC int fact ( intn ) { if (n < 1) return(1); else return(n * fact(n-1)); } SP $00007FE8 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 Memory SP $7FE8 1 $7FEC A6 $00007FF8 $7FF0 $10002500 $7FF4 0 $7FF8 $00008004 $7FFC $10002500 $8000 1 $8004 $0008010 $1000 2500 $8008 $10002500 $800C 2 $8010 $12345678 $8014 $10004000 $1000 3FFB MOVEQ #3,(SP) $1000 3FFC BSR fact $1000 4000 …. $8018 3

  27. CMPUT 229 D0 1 Example: fact(3) A6 $00007FEC int fact ( intn ) { if (n < 1) return(1); else return(n * fact(n-1)); } SP $00007FE8 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 Memory SP $7FE8 1 $7FEC A6 $00007FF8 $7FF0 $10002500 $7FF4 0 $7FF8 $00008004 $7FFC $10002500 $8000 1 $8004 $0008010 $1000 2500 $8008 $10002500 $800C 2 $8010 $12345678 $8014 $10004000 $1000 3FFB MOVEQ #3,(SP) $1000 3FFC BSR fact $1000 4000 …. $8018 3

  28. CMPUT 229 D0 1 Example: fact(3) A6 $00007FF8 int fact ( intn ) { if (n < 1) return(1); else return(n * fact(n-1)); } SP $00007FF0 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 Memory $7FE8 1 $7FEC $00007FF8 SP $7FF0 $10002500 $7FF4 0 A6 $7FF8 $00008004 $7FFC $10002500 $8000 1 $8004 $0008010 $1000 2500 $8008 $10002500 $800C 2 $8010 $12345678 $8014 $10004000 $1000 3FFB MOVEQ #3,(SP) $1000 3FFC BSR fact $1000 4000 …. $8018 3

  29. CMPUT 229 D0 1 Example: fact(3) A6 $00007FF8 int fact ( intn ) { if (n < 1) return(1); else return(n * fact(n-1)); } SP $00007FF4 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 Memory $7FE8 1 $7FEC $00007FF8 $7FF0 $10002500 SP $7FF4 0 A6 $7FF8 $00008004 $7FFC $10002500 $8000 1 $8004 $0008010 $1000 2500 $8008 $10002500 $800C 2 $8010 $12345678 $8014 $10004000 $1000 3FFB MOVEQ #3,(SP) $1000 3FFC BSR fact $1000 4000 …. $8018 3

  30. CMPUT 229 D0 1 Example: fact(3) A6 $00007FF8 int fact ( intn ) { if (n < 1) return(1); else return(n * fact(n-1)); } SP $00007FF8 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 Memory $7FE8 1 $7FEC $00007FF8 $7FF0 $10002500 $7FF4 0 SP/A6 $7FF8 $00008004 $7FFC $10002500 $8000 1 $8004 $0008010 $1000 2500 $8008 $10002500 $800C 2 $8010 $12345678 $8014 $10004000 $1000 3FFB MOVEQ #3,(SP) $1000 3FFC BSR fact $1000 4000 …. $8018 3

  31. CMPUT 229 D0 1 Example: fact(3) A6 $00007FF8 int fact ( intn ) { if (n < 1) return(1); else return(n * fact(n-1)); } SP $00007FF0 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 Memory $7FE8 1 $7FEC $00007FF8 $7FF0 $10002500 $7FF4 0 SP/A6 $7FF8 $00008004 $7FFC $10002500 $8000 1 $8004 $0008010 $1000 2500 $8008 $10002500 $800C 2 $8010 $12345678 $8014 $10004000 $1000 3FFB MOVEQ #3,(SP) $1000 3FFC BSR fact $1000 4000 …. $8018 3

  32. CMPUT 229 D0 1 Example: fact(3) A6 $00007FF8 int fact ( intn ) { if (n < 1) return(1); else return(n * fact(n-1)); } SP $00007FF0 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 Memory $7FE8 1 $7FEC $00007FF8 $7FF0 $10002500 $7FF4 1 SP/A6 $7FF8 $00008004 $7FFC $10002500 $8000 1 $8004 $0008010 $1000 2500 $8008 $10002500 $800C 2 $8010 $12345678 $8014 $10004000 $1000 3FFB MOVEQ #3,(SP) $1000 3FFC BSR fact $1000 4000 …. $8018 3

  33. CMPUT 229 D0 1 Example: fact(3) A6 $00008004 int fact ( intn ) { if (n < 1) return(1); else return(n * fact(n-1)); } SP $00007FFC 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 Memory $7FE8 1 $7FEC $00007FF8 $7FF0 $10002500 $7FF4 1 $7FF8 $00008004 $7FFC SP $10002500 $8000 1 $8004 $0008010 A6 $1000 2500 $8008 $10002500 $800C 2 $8010 $12345678 $8014 $10004000 $1000 3FFB MOVEQ #3,(SP) $1000 3FFC BSR fact $1000 4000 …. $8018 3

  34. CMPUT 229 D0 1 Example: fact(3) A6 $00008004 int fact ( intn ) { if (n < 1) return(1); else return(n * fact(n-1)); } SP $00008000 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 Memory $7FE8 1 $7FEC $00007FF8 $7FF0 $10002500 $7FF4 1 $7FF8 $00008004 $7FFC $10002500 SP $8000 1 $8004 $0008010 A6 $1000 2500 $8008 $10002500 $800C 2 $8010 $12345678 $8014 $10004000 $1000 3FFB MOVEQ #3,(SP) $1000 3FFC BSR fact $1000 4000 …. $8018 3

  35. CMPUT 229 D0 2 Example: fact(3) A6 $00008004 int fact ( intn ) { if (n < 1) return(1); else return(n * fact(n-1)); } SP $00008004 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 Memory $7FE8 1 $7FEC $00007FF8 $7FF0 $10002500 $7FF4 1 $7FF8 $00008004 $7FFC $10002500 $8000 1 $8004 $0008010 SP/A6 $1000 2500 $8008 $10002500 $800C 2 $8010 $12345678 $8014 $10004000 $1000 3FFB MOVEQ #3,(SP) $1000 3FFC BSR fact $1000 4000 …. $8018 3

  36. CMPUT 229 D0 2 Example: fact(3) A6 $00008004 int fact ( intn ) { if (n < 1) return(1); else return(n * fact(n-1)); } SP $00008004 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 Memory $7FE8 1 $7FEC $00007FF8 $7FF0 $10002500 $7FF4 1 $7FF8 $00008004 $7FFC $10002500 $8000 2 $8004 $0008010 SP/A6 $1000 2500 $8008 $10002500 $800C 2 $8010 $12345678 $8014 $10004000 $1000 3FFB MOVEQ #3,(SP) $1000 3FFC BSR fact $1000 4000 …. $8018 6

  37. CMPUT 229 D0 2 Example: fact(3) A6 $00008010 int fact ( intn ) { if (n < 1) return(1); else return(n * fact(n-1)); } SP $00008008 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 Memory $7FE8 1 $7FEC $00007FF8 $7FF0 $10002500 $7FF4 1 $7FF8 $00008004 $7FFC $10002500 $8000 2 $8004 $0008010 $1000 2500 SP $8008 $10002500 $800C 2 A6 $8010 $12345678 $8014 $10004000 $1000 3FFB MOVEQ #3,(SP) $1000 3FFC BSR fact $1000 4000 …. $8018 3

  38. CMPUT 229 D0 2 Example: fact(3) A6 $00008010 int fact ( intn ) { if (n < 1) return(1); else return(n * fact(n-1)); } SP $00008008 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 Memory $7FE8 1 $7FEC $00007FF8 $7FF0 $10002500 $7FF4 1 $7FF8 $00008004 $7FFC $10002500 $8000 2 $8004 $0008010 $1000 2500 $8008 $10002500 SP $800C 2 A6 $8010 $12345678 $8014 $10004000 $1000 3FFB MOVEQ #3,(SP) $1000 3FFC BSR fact $1000 4000 …. $8018 3

  39. CMPUT 229 D0 2 Example: fact(3) A6 $00008010 int fact ( intn ) { if (n < 1) return(1); else return(n * fact(n-1)); } SP $00008010 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 Memory $7FE8 1 $7FEC $00007FF8 $7FF0 $10002500 $7FF4 1 $7FF8 $00008004 $7FFC $10002500 $8000 2 $8004 $0008010 $1000 2500 $8008 $10002500 $800C 2 SP/A6 $8010 $12345678 $8014 $10004000 $1000 3FFB MOVEQ #3,(SP) $1000 3FFC BSR fact $1000 4000 …. $8018 3

  40. CMPUT 229 D0 6 Example: fact(3) A6 $00008010 int fact ( intn ) { if (n < 1) return(1); else return(n * fact(n-1)); } SP $00008010 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 Memory $7FE8 1 $7FEC $00007FF8 $7FF0 $10002500 $7FF4 1 $7FF8 $00008004 $7FFC $10002500 $8000 2 $8004 $0008010 $1000 2500 $8008 $10002500 $800C 2 SP/A6 $8010 $12345678 $8014 $10004000 $1000 3FFB MOVEQ #3,(SP) $1000 3FFC BSR fact $1000 4000 …. $8018 3

  41. CMPUT 229 D0 6 Example: fact(3) A6 $00008010 int fact ( intn ) { if (n < 1) return(1); else return(n * fact(n-1)); } SP $00008010 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 Memory $7FE8 1 $7FEC $00007FF8 $7FF0 $10002500 $7FF4 1 $7FF8 $00008004 $7FFC $10002500 $8000 1 $8004 $0008010 $1000 2500 $8008 $10002500 $800C 6 SP/A6 $8010 $12345678 $8014 $10004000 $1000 3FFB MOVEQ #3,(SP) $1000 3FFC BSR fact $1000 4000 …. $8018 3

  42. CMPUT 229 D0 6 Example: fact(3) A6 $12345678 int fact ( intn ) { if (n < 1) return(1); else return(n * fact(n-1)); } SP $00008014 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 Memory $7FE8 1 $7FEC $00007FF8 $7FF0 $10002500 $7FF4 1 $7FF8 $00008004 $7FFC $10002500 $8000 1 $8004 $0008010 $1000 2500 $8008 $10002500 $800C 6 $8010 $12345678 SP $8014 $10004000 $1000 3FFB MOVEQ #3,(SP) $1000 3FFC BSR fact $1000 4000 …. $8018 3

  43. CMPUT 229 D0 6 Example: fact(3) A6 $12345678 int fact ( intn ) { if (n < 1) return(1); else return(n * fact(n-1)); } SP $00008018 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 Memory $7FE8 1 $7FEC $00007FF8 $7FF0 $10002500 $7FF4 1 $7FF8 $00008004 $7FFC $10002500 $8000 1 $8004 $0008010 $1000 2500 $8008 $10002500 $800C 6 $8010 $12345678 $8014 $10004000 $1000 3FFB MOVEQ #3,(SP) $1000 3FFC BSR fact $1000 4000 …. SP $8018 3

  44. CMPUT 229 D0 6 Example: fact(3) A6 $12345678 int fact ( intn ) { if (n < 1) return(1); else return(n * fact(n-1)); } SP $00008018 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 Memory $7FE8 1 $7FEC $00007FF8 $7FF0 $10002500 $7FF4 1 $7FF8 $00008004 $7FFC $10002500 $8000 1 $8004 $0008010 $1000 2500 $8008 $10002500 $800C 6 $8010 $12345678 $8014 $10004000 $1000 3FFB MOVEQ #3,(SP) $1000 3FFC BSR fact $1000 4000 …. SP $8018 3

  45. CMPUT 229 D0 2 Example: fact(3) A6 $00008010 int fact ( intn ) { if (n < 1) return(1); else return(n * fact(n-1)); } SP $00008008 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 Memory $7FE8 1 $7FEC $00007FF8 $7FF0 $10002500 $7FF4 1 $7FF8 $00008004 $7FFC $10002500 $8000 1 $8004 $0008010 $1000 2500 $8008 $10002500 SP $800C 2 A6 $8010 $12345678 $1000 3FFB MOVEQ #3,D0 $1000 3FFC BSR fact $1000 4000 …. $8014 $10004000 $8018 3

  46. CMPUT 229 D0 2 Example: fact(3) A6 $00008010 int fact ( intn ) { if (n < 1) return(1); else return(n * fact(n-1)); } SP $00008014 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 Memory $7FE8 1 $7FEC $00007FF8 $7FF0 $10002500 $7FF4 1 $7FF8 $00008004 $7FFC $10002500 $8000 1 $8004 $0008010 $1000 2500 $8008 $10002500 $800C 2 $8010 $12345678 $1000 3FFB MOVEQ #3,D0 $1000 3FFC BSR fact $1000 4000 …. $8014 $10004000 SP $8018 3

  47. CMPUT 229 D0 6 Example: fact(3) A6 $00008010 int fact ( intn ) { if (n < 1) return(1); else return(n * fact(n-1)); } SP $00008010 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 Memory $7FE8 1 $7FEC $00007FF8 $7FF0 $10002500 $7FF4 1 $7FF8 $00008004 $7FFC $10002500 $8000 1 $8004 $0008010 $1000 2500 $8008 $10002500 $800C 2 SP/A6 $8010 $12345678 $1000 3FFB MOVEQ #3,D0 $1000 3FFC BSR fact $1000 4000 …. $8014 $10004000 $8018 6

  48. CMPUT 229 D0 6 Example: fact(3) A6 $00008010 int fact ( intn ) { if (n < 1) return(1); else return(n * fact(n-1)); } SP $00008010 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 Memory $7FE8 1 $7FEC $00007FF8 $7FF0 $10002500 $7FF4 1 $7FF8 $00008004 $7FFC $10002500 $8000 1 $8004 $0008010 $1000 2500 $8008 $10002500 $800C 2 SP/A6 $8010 $12345678 $1000 3FFB MOVEQ #3,D0 $1000 3FFC BSR fact $1000 4000 …. $8014 $10004000 $8018 6

  49. CMPUT 229 D0 6 Example: fact(3) A6 $12345678 int fact ( intn ) { if (n < 1) return(1); else return(n * fact(n-1)); } SP $00008010 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 Memory $7FE8 1 $7FEC $00007FF8 $7FF0 $10002500 $7FF4 1 $7FF8 $00008004 $7FFC $10002500 $8000 1 $8004 $0008010 $1000 2500 $8008 $10002500 $800C 2 $8010 $12345678 SP $1000 3FFB MOVEQ #3,D0 $1000 3FFC BSR fact $1000 4000 …. $8014 $10004000 $8018 6

  50. CMPUT 229 D0 6 Example: fact(3) A6 $12345678 int fact ( intn ) { if (n < 1) return(1); else return(n * fact(n-1)); } SP $00008010 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 Memory $7FE8 1 $7FEC $00007FF8 $7FF0 $10002500 $7FF4 1 $7FF8 $00008004 $7FFC $10002500 $8000 1 $8004 $0008010 $1000 2500 $8008 $10002500 $800C 2 $8010 $12345678 $1000 3FFB MOVEQ #3,D0 $1000 3FFC BSR fact $1000 4000 …. $8014 $10004000 SP $8018 6

More Related