30 lines
574 B
Plaintext
30 lines
574 B
Plaintext
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
|