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:
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