section .text global _main _main: mov eax, 3 ;m mov ebx, 4 ;n call ack ;returns number in ebx ret ack: cmp eax, 0 je M0 ;if M == 0 cmp ebx, 0 je N0 ;if N == 0 dec ebx ;else N-1 push eax ;save M call ack1 ;ack(m,n) -> returned in ebx so no further instructions needed pop eax ;restore M dec eax ;M - 1 call ack1 ;return ack(m-1,ack(m,n-1)) ret M0: inc ebx ;return n + 1 ret N0: dec eax inc ebx ;ebx always 0: inc -> ebx = 1 call ack1 ;return ack(M-1,1) ret