ECE243

Spring 2005

Andreas Moshovos

 

Subroutine Example – Complete Execution Trace of calling Ackerman (1, 1)

 

In this section (which we will not cover in the lectures) we present an instruction-by-instruction trace of what happens when Ackerman (1,1) is called.

 

The code traced in this example is as follows:

 

                ORG     $20000

                move.l  #$50040, a7     ; INITIAL VALUE FOR THE STACK (example only)

                move.l  #1, -(a7)       ; push parameter y

                move.l  #1, -(a7)       ; push parameter x

                jsr     Ackerman

               

                stop

 

Ackerman  move.l 4(a7), d0 ; d0 = Mem[[a7]+4] = x

          bne Xnot0 ; if x == 0 then fall through

          move.l 8(a7), d0 ; return y + 1

          addq.l #1, d0

          jmp epilogue

Xnot0

          move.l 8(a7), d0 ; d0 = y

          bne Ynot0 ; if y==0 then fall through

          ; call Ackerman (x-1, 1)

          move.l #1, -(a7) ; push 1 as y parameter

          move.l 8(a7), d0 ; read x (now at distance +8 since we just pushed one element)

          subq.l #1, d0 ; d0 = x -1

          move.l d0,-(a7) ; push x-1 and the x parameter

          jsr Ackerman

          addq.l #8, a7 ; deallocate the space for the two parameters

          jmp epilogue ; jump to epilogue for returning  

Ynot0

          ; call Ackerman (x, y-1)

          move.l 8(a7), d0 ; read y into d0

          subq.l #1, d0 ; d0 = y - 1

          move.l -(a7), d0 ; push y-1 as second parameter

          move.l 8(a7), d0 ; d0 = x (at distance 8 now since we just pushed a longword on the stack)

          move.l -(a7), d0 ; push x as first parameter

          jsr Ackerman

          addq.l #8, a7 ; deallocate space for the two parameters

          ; call Ackerman (x-1, tmp) where tmp is the value returned from Ackerman (x, y-1)

          move.l d0, -(a7) ; d0 holds the return value of Ackerman (x, y – 1), push on the stack as second parameter

          move.l 8(a7), d0 ; read x

          subq.l #1, d0 ; calculate x -1

          move.l d0, -(a7) ; push x -1 as first parameter

          jsr Ackerman

 

          addq.l #8, a7 ; deallocate the two parametersepilogue

epilogue

          rts ; return to caller

 

 

 

       

Here’s the execution trace: Register and memory locations that are written into are shown in bold. Registers or memory locations that are read are shown underlined.

These were generated using a simulator. However, the simulator has a bug in its tracing facility, hence we had to update some values by hand (which can be error-prone).

 

EASy68K simulator log file created: 1/27/2005 12:04:02 AM

 

PC=00020000  Code=2E7C 00050040          Line=    9                  move.l  #$50040, a7  ß Instruction being executed

 

00050010: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ----------------                ß Memory after instruction execution

00050020: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ----------------

00050030: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ----------------

     

D0=00000000 D4=00000000 A0=00000000 A4=00000000    T_S__INT___XNZVC                       ß Registers After Instruction execution

D1=00000000 D5=00000000 A1=00000000 A5=00000000 SR=0010000000000000

D2=00000000 D6=00000000 A2=00000000 A6=00000000

D3=00000000 D7=00000000 A3=00000000 A7=00050040 SS=00050040

PC=00020006  Code=2F3C 00000001          Line=   10                  move.l  #1, -(a7)

 

00050010: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ----------------

00050020: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ----------------

00050030: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 01 ----------------

 

D0=00000000 D4=00000000 A0=00000000 A4=00000000    T_S__INT___XNZVC

D1=00000000 D5=00000000 A1=00000000 A5=00000000 SR=0010000000000000

D2=00000000 D6=00000000 A2=00000000 A6=00000000

D3=00000000 D7=00000000 A3=00000000 A7=0005003C SS=0005003C

PC=0002000C  Code=2F3C 00000001          Line=   11                  move.l  #1, -(a7)

 

00050010: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ----------------

00050020: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ----------------

00050030: 00 00 00 00 00 00 00 00 00 00 00 01 00 00 00 01 ----------------

 

D0=00000000 D4=00000000 A0=00000000 A4=00000000    T_S__INT___XNZVC

D1=00000000 D5=00000000 A1=00000000 A5=00000000 SR=0010000000000000

D2=00000000 D6=00000000 A2=00000000 A6=00000000

D3=00000000 D7=00000000 A3=00000000 A7=00050038 SS=00050038

PC=00020012  Code=4EB9 0002001C          Line=   12                  jsr     Ackerman

 

00050010: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ----------------

00050020: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ----------------

00050030: 00 00 00 00 00 02 00 18 00 00 00 01 00 00 00 01 ----------------

 

D0=00000000 D4=00000000 A0=00000000 A4=00000000    T_S__INT___XNZVC

D1=00000000 D5=00000000 A1=00000000 A5=00000000 SR=0010000000000000

D2=00000000 D6=00000000 A2=00000000 A6=00000000

D3=00000000 D7=00000000 A3=00000000 A7=00050034 SS=00050034

PC=0002001C  Code=202F 0004              Line=   15  Ackerman        move.l 4(a7), d0 ; d0 = Mem[[a7]+4] = x

 

00050010: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ----------------

00050020: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ----------------

00050030: 00 00 00 00 00 02 00 18 00 00 00 01 00 00 00 01 ----------------

 

D0=00000001 D4=00000000 A0=00000000 A4=00000000    T_S__INT___XNZVC

D1=00000000 D5=00000000 A1=00000000 A5=00000000 SR=0010000000000000

D2=00000000 D6=00000000 A2=00000000 A6=00000000

D3=00000000 D7=00000000 A3=00000000 A7=00050034 SS=00050034

PC=00020020  Code=6600 000E              Line=   16                  bne Xnot0 ; if x == 0 then fall through

 

00050010: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ----------------

00050020: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ----------------

00050030: 00 00 00 00 00 02 00 18 00 00 00 01 00 00 00 01 ----------------

 

D0=00000001 D4=00000000 A0=00000000 A4=00000000    T_S__INT___XNZVC

D1=00000000 D5=00000000 A1=00000000 A5=00000000 SR=0010000000000000

D2=00000000 D6=00000000 A2=00000000 A6=00000000

D3=00000000 D7=00000000 A3=00000000 A7=00050034 SS=00050034

PC=00020030  Code=202F 0008              Line=   21                  move.l 8(a7), d0 ; d0 = y

 

00050010: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ----------------

00050020: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ----------------

00050030: 00 00 00 00 00 02 00 18 00 00 00 01 00 00 00 01 ----------------

 

D0=00000001 D4=00000000 A0=00000000 A4=00000000    T_S__INT___XNZVC

D1=00000000 D5=00000000 A1=00000000 A5=00000000 SR=0010000000000000

D2=00000000 D6=00000000 A2=00000000 A6=00000000

D3=00000000 D7=00000000 A3=00000000 A7=00050034 SS=00050034

PC=00020034  Code=6600 001E              Line=   22                  bne Ynot0 ; if y==0 then fall through

 

00050010: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ----------------

00050020: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ----------------

00050030: 00 00 00 00 00 02 00 18 00 00 00 01 00 00 00 01 ----------------

 

D0=00000001 D4=00000000 A0=00000000 A4=00000000    T_S__INT___XNZVC

D1=00000000 D5=00000000 A1=00000000 A5=00000000 SR=0010000000000000

D2=00000000 D6=00000000 A2=00000000 A6=00000000

D3=00000000 D7=00000000 A3=00000000 A7=00050034 SS=00050034

PC=00020054  Code=202F 0008              Line=   33                  move.l 8(a7), d0 ; read y into d0

 

00050010: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ----------------

00050020: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ----------------

00050030: 00 00 00 00 00 02 00 18 00 00 00 01 00 00 00 01 ----------------

 

D0=00000001 D4=00000000 A0=00000000 A4=00000000    T_S__INT___XNZVC

D1=00000000 D5=00000000 A1=00000000 A5=00000000 SR=0010000000000000

D2=00000000 D6=00000000 A2=00000000 A6=00000000

D3=00000000 D7=00000000 A3=00000000 A7=00050034 SS=00050034

PC=00020058  Code=5380                   Line=   34                  subq.l #1, d0 ; d0 = y - 1

 

00050010: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ----------------

00050020: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ----------------

00050030: 00 00 00 00 00 02 00 18 00 00 00 01 00 00 00 01 ----------------

 

D0=00000000 D4=00000000 A0=00000000 A4=00000000    T_S__INT___XNZVC

D1=00000000 D5=00000000 A1=00000000 A5=00000000 SR=0010000000000100

D2=00000000 D6=00000000 A2=00000000 A6=00000000

D3=00000000 D7=00000000 A3=00000000 A7=00050034 SS=00050034

PC=0002005A  Code=2F00                   Line=   35                  move.l d0, -(a7) ; push y-1 as second parameter

 

00050010: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ----------------

00050020: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ----------------

00050030: 00 00 00 00 00 02 00 18 00 00 00 01 00 00 00 01 ----------------

 

D0=00000000 D4=00000000 A0=00000000 A4=00000000    T_S__INT___XNZVC

D1=00000000 D5=00000000 A1=00000000 A5=00000000 SR=0010000000000100

D2=00000000 D6=00000000 A2=00000000 A6=00000000

D3=00000000 D7=00000000 A3=00000000 A7=00050030 SS=00050030

PC=0002005C  Code=202F 0008              Line=   36                  move.l 8(a7), d0 ; d0 = x (at distance 8 now since we just pushed a longword on the stack)

 

00050010: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ----------------

00050020: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ----------------

00050030: 00 00 00 00 00 02 00 18 00 00 00 01 00 00 00 01 ----------------

 

 

D0=00000001 D4=00000000 A0=00000000 A4=00000000    T_S__INT___XNZVC

D1=00000000 D5=00000000 A1=00000000 A5=00000000 SR=0010000000000000

D2=00000000 D6=00000000 A2=00000000 A6=00000000

D3=00000000 D7=00000000 A3=00000000 A7=00050030 SS=00050030

PC=00020060  Code=2F00                   Line=   37                  move.l d0, -(a7) ; push x as first parameter

 

00050010: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ----------------

00050020: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 01 ----------------

00050030: 00 00 00 00 00 02 00 18 00 00 00 01 00 00 00 01 ----------------

 

D0=00000001 D4=00000000 A0=00000000 A4=00000000    T_S__INT___XNZVC

D1=00000000 D5=00000000 A1=00000000 A5=00000000 SR=0010000000000000

D2=00000000 D6=00000000 A2=00000000 A6=00000000

D3=00000000 D7=00000000 A3=00000000 A7=0005002C SS=0005002C

PC=00020062  Code=4EB9 0002001C          Line=   38                  jsr Ackerman

 

00050010: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ----------------

00050020: 00 00 00 00 00 00 00 00 00 02 00 68 00 00 00 01 ----------------

00050030: 00 00 00 00 00 02 00 18 00 00 00 01 00 00 00 01 ----------------

 

D0=00000001 D4=00000000 A0=00000000 A4=00000000    T_S__INT___XNZVC

D1=00000000 D5=00000000 A1=00000000 A5=00000000 SR=0010000000000000

D2=00000000 D6=00000000 A2=00000000 A6=00000000

D3=00000000 D7=00000000 A3=00000000 A7=00050028 SS=00050028

PC=0002001C  Code=202F 0004              Line=   15  Ackerman        move.l 4(a7), d0 ; d0 = Mem[[a7]+4] = x

 

00050010: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ----------------

00050020: 00 00 00 00 00 00 00 00 00 02 00 68 00 00 00 01 ----------------

00050030: 00 00 00 00 00 02 00 18 00 00 00 01 00 00 00 01 ----------------

 

D0=00000001 D4=00000000 A0=00000000 A4=00000000    T_S__INT___XNZVC

D1=00000000 D5=00000000 A1=00000000 A5=00000000 SR=0010000000000000

D2=00000000 D6=00000000 A2=00000000 A6=00000000

D3=00000000 D7=00000000 A3=00000000 A7=00050028 SS=00050028

PC=00020020  Code=6600 000E              Line=   16                  bne Xnot0 ; if x == 0 then fall through

 

00050010: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ----------------

00050020: 00 00 00 00 00 00 00 00 00 02 00 68 00 00 00 01 ----------------

00050030: 00 00 00 00 00 02 00 18 00 00 00 01 00 00 00 01 ----------------

 

D0=00000001 D4=00000000 A0=00000000 A4=00000000    T_S__INT___XNZVC

D1=00000000 D5=00000000 A1=00000000 A5=00000000 SR=0010000000000000

D2=00000000 D6=00000000 A2=00000000 A6=00000000

D3=00000000 D7=00000000 A3=00000000 A7=00050028 SS=00050028

PC=00020030  Code=202F 0008              Line=   21                  move.l 8(a7), d0 ; d0 = y

 

00050010: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ----------------

00050020: 00 00 00 00 00 00 00 00 00 02 00 68 00 00 00 01 ----------------

00050030: 00 00 00 00 00 02 00 18 00 00 00 01 00 00 00 01 ----------------

 

D0=00000000 D4=00000000 A0=00000000 A4=00000000    T_S__INT___XNZVC

D1=00000000 D5=00000000 A1=00000000 A5=00000000 SR=0010000000000100

D2=00000000 D6=00000000 A2=00000000 A6=00000000

D3=00000000 D7=00000000 A3=00000000 A7=00050028 SS=00050028

PC=00020034  Code=6600 001E              Line=   22                  bne Ynot0 ; if y==0 then fall through

 

00050010: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ----------------

00050020: 00 00 00 00 00 00 00 00 00 02 00 68 00 00 00 01 ----------------

00050030: 00 00 00 00 00 02 00 18 00 00 00 01 00 00 00 01 ----------------

 

D0=00000000 D4=00000000 A0=00000000 A4=00000000    T_S__INT___XNZVC

D1=00000000 D5=00000000 A1=00000000 A5=00000000 SR=0010000000000100

D2=00000000 D6=00000000 A2=00000000 A6=00000000

D3=00000000 D7=00000000 A3=00000000 A7=00050028 SS=00050028

PC=00020038  Code=2F3C 00000001          Line=   24                  move.l #1, -(a7) ; push 1 as y parameter

 

00050010: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ----------------

00050020: 00 00 00 00 00 00 00 01 00 02 00 68 00 00 00 01 ----------------

00050030: 00 00 00 00 00 02 00 18 00 00 00 01 00 00 00 01 ----------------

 

D0=00000000 D4=00000000 A0=00000000 A4=00000000    T_S__INT___XNZVC

D1=00000000 D5=00000000 A1=00000000 A5=00000000 SR=0010000000000000

D2=00000000 D6=00000000 A2=00000000 A6=00000000

D3=00000000 D7=00000000 A3=00000000 A7=00050024 SS=00050024

PC=0002003E  Code=202F 0008              Line=   25                  move.l 8(a7), d0 ; read x (now at distance +8 since we just pushed one element)

 

00050010: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ----------------

00050020: 00 00 00 00 00 00 00 01 00 02 00 68 00 00 00 01 ----------------

00050030: 00 00 00 00 00 02 00 18 00 00 00 01 00 00 00 01 ----------------

 

D0=00000001 D4=00000000 A0=00000000 A4=00000000    T_S__INT___XNZVC

D1=00000000 D5=00000000 A1=00000000 A5=00000000 SR=0010000000000000

D2=00000000 D6=00000000 A2=00000000 A6=00000000

D3=00000000 D7=00000000 A3=00000000 A7=00050024 SS=00050024

PC=00020042  Code=5380                   Line=   26                  subq.l #1, d0 ; d0 = x -1

 

00050010: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ----------------

00050020: 00 00 00 00 00 00 00 01 00 02 00 68 00 00 00 01 ----------------

00050030: 00 00 00 00 00 02 00 18 00 00 00 01 00 00 00 01 ----------------

 

 

D0=00000000 D4=00000000 A0=00000000 A4=00000000    T_S__INT___XNZVC

D1=00000000 D5=00000000 A1=00000000 A5=00000000 SR=0010000000000100

D2=00000000 D6=00000000 A2=00000000 A6=00000000

D3=00000000 D7=00000000 A3=00000000 A7=00050024 SS=00050024

PC=00020044  Code=2F00                   Line=   27                  move.l d0,-(a7) ; push x-1 and the x parameter

 

00050010: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ----------------

00050020: 00 00 00 00 00 00 00 01 00 02 00 68 00 00 00 01 ----------------

00050030: 00 00 00 00 00 02 00 18 00 00 00 01 00 00 00 01 ----------------

 

 

D0=00000000 D4=00000000 A0=00000000 A4=00000000    T_S__INT___XNZVC

D1=00000000 D5=00000000 A1=00000000 A5=00000000 SR=0010000000000100

D2=00000000 D6=00000000 A2=00000000 A6=00000000

D3=00000000 D7=00000000 A3=00000000 A7=00050020 SS=00050020

PC=00020046  Code=4EB9 0002001C          Line=   28                  jsr Ackerman

 

00050010: 00 00 00 00 00 00 00 00 00 00 00 00 00 02 00 4C ----------------

00050020: 00 00 00 00 00 00 00 01 00 02 00 68 00 00 00 01 ----------------

00050030: 00 00 00 00 00 02 00 18 00 00 00 01 00 00 00 01 ----------------

 

D0=00000000 D4=00000000 A0=00000000 A4=00000000    T_S__INT___XNZVC

D1=00000000 D5=00000000 A1=00000000 A5=00000000 SR=0010000000000100

D2=00000000 D6=00000000 A2=00000000 A6=00000000

D3=00000000 D7=00000000 A3=00000000 A7=0005001C SS=0005001C

PC=0002001C  Code=202F 0004              Line=   15  Ackerman        move.l 4(a7), d0 ; d0 = Mem[[a7]+4] = x

 

00050010: 00 00 00 00 00 00 00 00 00 00 00 00 00 02 00 4C ----------------

00050020: 00 00 00 00 00 00 00 01 00 02 00 68 00 00 00 01 ----------------

00050030: 00 00 00 00 00 02 00 18 00 00 00 01 00 00 00 01 ----------------

 

D0=00000000 D4=00000000 A0=00000000 A4=00000000    T_S__INT___XNZVC

D1=00000000 D5=00000000 A1=00000000 A5=00000000 SR=0010000000000100

D2=00000000 D6=00000000 A2=00000000 A6=00000000

D3=00000000 D7=00000000 A3=00000000 A7=0005001C SS=0005001C

PC=00020020  Code=6600 000E              Line=   16                  bne Xnot0 ; if x == 0 then fall through

 

00050010: 00 00 00 00 00 00 00 00 00 00 00 00 00 02 00 4C ----------------

00050020: 00 00 00 00 00 00 00 01 00 02 00 68 00 00 00 01 ----------------

00050030: 00 00 00 00 00 02 00 18 00 00 00 01 00 00 00 01 ----------------

 

 

D0=00000000 D4=00000000 A0=00000000 A4=00000000    T_S__INT___XNZVC

D1=00000000 D5=00000000 A1=00000000 A5=00000000 SR=0010000000000100

D2=00000000 D6=00000000 A2=00000000 A6=00000000

D3=00000000 D7=00000000 A3=00000000 A7=0005001C SS=0005001C

PC=00020024  Code=202F 0008              Line=   17                  move.l 8(a7), d0 ; return y + 1

 

00050010: 00 00 00 00 00 00 00 00 00 00 00 00 00 02 00 4C ----------------

00050020: 00 00 00 00 00 00 00 01 00 02 00 68 00 00 00 01 ----------------

00050030: 00 00 00 00 00 02 00 18 00 00 00 01 00 00 00 01 ----------------

 

 

D0=00000001 D4=00000000 A0=00000000 A4=00000000    T_S__INT___XNZVC

D1=00000000 D5=00000000 A1=00000000 A5=00000000 SR=0010000000000000

D2=00000000 D6=00000000 A2=00000000 A6=00000000

D3=00000000 D7=00000000 A3=00000000 A7=0005001C SS=0005001C

PC=00020028  Code=5280                   Line=   18                  addq.l #1, d0

 

00050010: 00 00 00 00 00 00 00 00 00 00 00 00 00 02 00 4C ----------------

00050020: 00 00 00 00 00 00 00 01 00 02 00 68 00 00 00 01 ----------------

00050030: 00 00 00 00 00 02 00 18 00 00 00 01 00 00 00 01 ----------------

 

 

D0=00000002 D4=00000000 A0=00000000 A4=00000000    T_S__INT___XNZVC

D1=00000000 D5=00000000 A1=00000000 A5=00000000 SR=0010000000000000

D2=00000000 D6=00000000 A2=00000000 A6=00000000

D3=00000000 D7=00000000 A3=00000000 A7=0005001C SS=0005001C

PC=0002002A  Code=4EF9 0002007C          Line=   19                  jmp epilogue

 

00050010: 00 00 00 00 00 00 00 00 00 00 00 00 00 02 00 4C ----------------

00050020: 00 00 00 00 00 00 00 01 00 02 00 68 00 00 00 01 ----------------

00050030: 00 00 00 00 00 02 00 18 00 00 00 01 00 00 00 01 ----------------

 

 

D0=00000002 D4=00000000 A0=00000000 A4=00000000    T_S__INT___XNZVC

D1=00000000 D5=00000000 A1=00000000 A5=00000000 SR=0010000000000000

D2=00000000 D6=00000000 A2=00000000 A6=00000000

D3=00000000 D7=00000000 A3=00000000 A7=0005001C SS=0005001C

PC=0002007C  Code=4E75                   Line=   49                  rts ; return to caller

 

00050010: 00 00 00 00 00 00 00 00 00 00 00 00 00 02 00 4C ----------------

00050020: 00 00 00 00 00 00 00 01 00 02 00 68 00 00 00 01 ----------------

00050030: 00 00 00 00 00 02 00 18 00 00 00 01 00 00 00 01 ----------------

 

 

D0=00000002 D4=00000000 A0=00000000 A4=00000000    T_S__INT___XNZVC

D1=00000000 D5=00000000 A1=00000000 A5=00000000 SR=0010000000000000

D2=00000000 D6=00000000 A2=00000000 A6=00000000

D3=00000000 D7=00000000 A3=00000000 A7=00050020 SS=00050020

PC=0002004C  Code=508F                   Line=   29                  addq.l #8, a7 ; deallocate the space for the two parameters

 

00050010: 00 00 00 00 00 00 00 00 00 00 00 00 00 02 00 4C ----------------

00050020: 00 00 00 00 00 00 00 01 00 02 00 68 00 00 00 01 ----------------

00050030: 00 00 00 00 00 02 00 18 00 00 00 01 00 00 00 01 ----------------

 

 

D0=00000002 D4=00000000 A0=00000000 A4=00000000    T_S__INT___XNZVC

D1=00000000 D5=00000000 A1=00000000 A5=00000000 SR=0010000000000000

D2=00000000 D6=00000000 A2=00000000 A6=00000000

D3=00000000 D7=00000000 A3=00000000 A7=00050028 SS=00050028

PC=0002004E  Code=4EF9 0002007C          Line=   30                  jmp epilogue ; jump to epilogue for returning  

 

00050010: 00 00 00 00 00 00 00 00 00 00 00 00 00 02 00 4C ----------------

00050020: 00 00 00 00 00 00 00 01 00 02 00 68 00 00 00 01 ----------------

00050030: 00 00 00 00 00 02 00 18 00 00 00 01 00 00 00 01 ----------------

 

 

D0=00000002 D4=00000000 A0=00000000 A4=00000000    T_S__INT___XNZVC

D1=00000000 D5=00000000 A1=00000000 A5=00000000 SR=0010000000000000

D2=00000000 D6=00000000 A2=00000000 A6=00000000

D3=00000000 D7=00000000 A3=00000000 A7=00050028 SS=00050028

PC=0002007C  Code=4E75                   Line=   49                  rts ; return to caller

 

00050010: 00 00 00 00 00 00 00 00 00 00 00 00 00 02 00 4C ----------------

00050020: 00 00 00 00 00 00 00 01 00 02 00 68 00 00 00 01 ----------------

00050030: 00 00 00 00 00 02 00 18 00 00 00 01 00 00 00 01 ----------------

 

 

D0=00000002 D4=00000000 A0=00000000 A4=00000000    T_S__INT___XNZVC

D1=00000000 D5=00000000 A1=00000000 A5=00000000 SR=0010000000000000

D2=00000000 D6=00000000 A2=00000000 A6=00000000

D3=00000000 D7=00000000 A3=00000000 A7=0005002C SS=0005002C

PC=00020068  Code=508F                   Line=   39                  addq.l #8, a7 ; deallocate space for the two parameters

 

00050010: 00 00 00 00 00 00 00 00 00 00 00 00 00 02 00 4C ----------------

00050020: 00 00 00 00 00 00 00 01 00 02 00 68 00 00 00 01 ----------------

00050030: 00 00 00 00 00 02 00 18 00 00 00 01 00 00 00 01 ----------------

 

 

D0=00000002 D4=00000000 A0=00000000 A4=00000000    T_S__INT___XNZVC

D1=00000000 D5=00000000 A1=00000000 A5=00000000 SR=0010000000000000

D2=00000000 D6=00000000 A2=00000000 A6=00000000

D3=00000000 D7=00000000 A3=00000000 A7=00050034 SS=00050034

PC=0002006A  Code=2F00                   Line=   41                  move.l d0, -(a7) ; d0 holds the return value of Ackerman (x, y – 1), push on the stack as second parameter

 

00050010: 00 00 00 00 00 00 00 00 00 00 00 00 00 02 00 4C ----------------

00050020: 00 00 00 00 00 00 00 01 00 02 00 68 00 00 00 01 ----------------

00050030: 00 00 00 02 00 02 00 18 00 00 00 01 00 00 00 01 ----------------

 

 

D0=00000002 D4=00000000 A0=00000000 A4=00000000    T_S__INT___XNZVC

D1=00000000 D5=00000000 A1=00000000 A5=00000000 SR=0010000000000000

D2=00000000 D6=00000000 A2=00000000 A6=00000000

D3=00000000 D7=00000000 A3=00000000 A7=00050030 SS=00050030

PC=0002006C  Code=202F 0008              Line=   42                  move.l 8(a7), d0 ; read x

 

00050010: 00 00 00 00 00 00 00 00 00 00 00 00 00 02 00 4C ----------------

00050020: 00 00 00 00 00 00 00 01 00 02 00 68 00 00 00 01 ----------------

00050030: 00 00 00 02 00 02 00 18 00 00 00 01 00 00 00 01 ----------------

 

D0=00000001 D4=00000000 A0=00000000 A4=00000000    T_S__INT___XNZVC

D1=00000000 D5=00000000 A1=00000000 A5=00000000 SR=0010000000000000

D2=00000000 D6=00000000 A2=00000000 A6=00000000

D3=00000000 D7=00000000 A3=00000000 A7=00050030 SS=00050030

PC=00020070  Code=5380                   Line=   43                  subq.l #1, d0 ; calculate x -1

 

00050010: 00 00 00 00 00 00 00 00 00 00 00 00 00 02 00 4C ----------------

00050020: 00 00 00 00 00 00 00 01 00 02 00 68 00 00 00 01 ----------------

00050030: 00 00 00 02 00 02 00 18 00 00 00 01 00 00 00 01 ----------------

 

D0=00000000 D4=00000000 A0=00000000 A4=00000000    T_S__INT___XNZVC

D1=00000000 D5=00000000 A1=00000000 A5=00000000 SR=0010000000000100

D2=00000000 D6=00000000 A2=00000000 A6=00000000

D3=00000000 D7=00000000 A3=00000000 A7=00050030 SS=00050030

PC=00020072  Code=2F00                   Line=   44                  move.l d0, -(a7) ; push x -1 as first parameter

 

00050010: 00 00 00 00 00 00 00 00 00 00 00 00 00 02 00 4C ----------------

00050020: 00 00 00 00 00 00 00 01 00 02 00 68 00 00 00 00 ----------------

00050030: 00 00 00 02 00 02 00 18 00 00 00 01 00 00 00 01 ----------------

 

D0=00000000 D4=00000000 A0=00000000 A4=00000000    T_S__INT___XNZVC

D1=00000000 D5=00000000 A1=00000000 A5=00000000 SR=0010000000000100

D2=00000000 D6=00000000 A2=00000000 A6=00000000

D3=00000000 D7=00000000 A3=00000000 A7=0005002C SS=0005002C

PC=00020074  Code=4EB9 0002001C          Line=   45                  jsr Ackerman

 

00050010: 00 00 00 00 00 00 00 00 00 00 00 00 00 02 00 4C ----------------

00050020: 00 00 00 00 00 00 00 01 00 02 00 7A 00 00 00 00 ----------------

00050030: 00 00 00 02 00 02 00 18 00 00 00 01 00 00 00 01 ----------------

 

D0=00000000 D4=00000000 A0=00000000 A4=00000000    T_S__INT___XNZVC

D1=00000000 D5=00000000 A1=00000000 A5=00000000 SR=0010000000000100

D2=00000000 D6=00000000 A2=00000000 A6=00000000

D3=00000000 D7=00000000 A3=00000000 A7=00050028 SS=00050028

PC=0002001C  Code=202F 0004              Line=   15  Ackerman        move.l 4(a7), d0 ; d0 = Mem[[a7]+4] = x

 

00050010: 00 00 00 00 00 00 00 00 00 00 00 00 00 02 00 4C ----------------

00050020: 00 00 00 00 00 00 00 01 00 02 00 7A 00 00 00 00 ----------------

00050030: 00 00 00 02 00 02 00 18 00 00 00 01 00 00 00 01 ----------------

 

 

D0=00000000 D4=00000000 A0=00000000 A4=00000000    T_S__INT___XNZVC

D1=00000000 D5=00000000 A1=00000000 A5=00000000 SR=0010000000000100

D2=00000000 D6=00000000 A2=00000000 A6=00000000

D3=00000000 D7=00000000 A3=00000000 A7=00050028 SS=00050028

PC=00020020  Code=6600 000E              Line=   16                  bne Xnot0 ; if x == 0 then fall through

 

00050010: 00 00 00 00 00 00 00 00 00 00 00 00 00 02 00 4C ----------------

00050020: 00 00 00 00 00 00 00 01 00 02 00 7A 00 00 00 00 ----------------

00050030: 00 00 00 02 00 02 00 18 00 00 00 01 00 00 00 01 ----------------

 

D0=00000000 D4=00000000 A0=00000000 A4=00000000    T_S__INT___XNZVC

D1=00000000 D5=00000000 A1=00000000 A5=00000000 SR=0010000000000100

D2=00000000 D6=00000000 A2=00000000 A6=00000000

D3=00000000 D7=00000000 A3=00000000 A7=00050028 SS=00050028

PC=00020024  Code=202F 0008              Line=   17                  move.l 8(a7), d0 ; return y + 1

 

00050010: 00 00 00 00 00 00 00 00 00 00 00 00 00 02 00 4C ----------------

00050020: 00 00 00 00 00 00 00 01 00 02 00 7A 00 00 00 00 ----------------

00050030: 00 00 00 02 00 02 00 18 00 00 00 01 00 00 00 01 ----------------

 

D0=00000002 D4=00000000 A0=00000000 A4=00000000    T_S__INT___XNZVC

D1=00000000 D5=00000000 A1=00000000 A5=00000000 SR=0010000000000000

D2=00000000 D6=00000000 A2=00000000 A6=00000000

D3=00000000 D7=00000000 A3=00000000 A7=00050028 SS=00050028

PC=00020028  Code=5280                   Line=   18                  addq.l #1, d0

 

00050010: 00 00 00 00 00 00 00 00 00 00 00 00 00 02 00 4C ----------------

00050020: 00 00 00 00 00 00 00 01 00 02 00 7A 00 00 00 00 ----------------

00050030: 00 00 00 02 00 02 00 18 00 00 00 01 00 00 00 01 ----------------

 

D0=00000003 D4=00000000 A0=00000000 A4=00000000    T_S__INT___XNZVC

D1=00000000 D5=00000000 A1=00000000 A5=00000000 SR=0010000000000000

D2=00000000 D6=00000000 A2=00000000 A6=00000000

D3=00000000 D7=00000000 A3=00000000 A7=00050028 SS=00050028

PC=0002002A  Code=4EF9 0002007C          Line=   19                  jmp epilogue

 

00050010: 00 00 00 00 00 00 00 00 00 00 00 00 00 02 00 4C ----------------

00050020: 00 00 00 00 00 00 00 01 00 02 00 7A 00 00 00 00 ----------------

00050030: 00 00 00 02 00 02 00 18 00 00 00 01 00 00 00 01 ----------------

 

D0=00000003 D4=00000000 A0=00000000 A4=00000000    T_S__INT___XNZVC

D1=00000000 D5=00000000 A1=00000000 A5=00000000 SR=0010000000000000

D2=00000000 D6=00000000 A2=00000000 A6=00000000

D3=00000000 D7=00000000 A3=00000000 A7=00050028 SS=00050028

PC=0002007C  Code=4E75                   Line=   49                  rts ; return to caller

 

00050010: 00 00 00 00 00 00 00 00 00 00 00 00 00 02 00 4C ----------------

00050020: 00 00 00 00 00 00 00 01 00 02 00 7A 00 00 00 00 ----------------

00050030: 00 00 00 02 00 02 00 18 00 00 00 01 00 00 00 01 ----------------

 

D0=00000003 D4=00000000 A0=00000000 A4=00000000    T_S__INT___XNZVC

D1=00000000 D5=00000000 A1=00000000 A5=00000000 SR=0010000000000000

D2=00000000 D6=00000000 A2=00000000 A6=00000000

D3=00000000 D7=00000000 A3=00000000 A7=0005002C SS=0005002C

PC=0002007A  Code=508F                   Line=   47                  addq.l #8, a7 ; deallocate the two parametersepilogue

 

00050010: 00 00 00 00 00 00 00 00 00 00 00 00 00 02 00 4C ----------------

00050020: 00 00 00 00 00 00 00 01 00 02 00 7A 00 00 00 00 ----------------

00050030: 00 00 00 02 00 02 00 18 00 00 00 01 00 00 00 01 ----------------

 

D0=00000003 D4=00000000 A0=00000000 A4=00000000    T_S__INT___XNZVC

D1=00000000 D5=00000000 A1=00000000 A5=00000000 SR=0010000000000000

D2=00000000 D6=00000000 A2=00000000 A6=00000000

D3=00000000 D7=00000000 A3=00000000 A7=0005003C SS=00050034

PC=0002007C  Code=4E75                   Line=   49                  rts ; return to caller

 

00050010: 00 00 00 00 00 00 00 00 00 00 00 00 00 02 00 4C ----------------

00050020: 00 00 00 00 00 00 00 01 00 02 00 7A 00 00 00 00 ----------------

00050030: 00 00 00 02 00 02 00 18 00 00 00 01 00 00 00 01 ----------------

 

D0=00000003 D4=00000000 A0=00000000 A4=00000000    T_S__INT___XNZVC

D1=00000000 D5=00000000 A1=00000000 A5=00000000 SR=0010000000000000

D2=00000000 D6=00000000 A2=00000000 A6=00000000

D3=00000000 D7=00000000 A3=00000000 A7=00050040 SS=00050034