|
- format ms64 coff
-
- section '.text' code readable executable
-
- use64
-
- public _loop
- _loop:
- xor eax, eax
- inc eax
- mov rbx, rdx ; RDX is overwritten by mul
- @again:
- cmp rbx, 0
- je @loop_end
- mul rcx
- dec rbx
- jmp @again
- @loop_end:
- ret
-
- public _tail_recursion
- _tail_recursion:
- test ecx, ecx
- je @is_0
- mov eax, ecx
- dec ecx
- @loop:
- test ecx, ecx
- jz @tr_end
-
- mul ecx
- dec ecx
-
- jnz @loop
- jmp @tr_end
- @is_0:
- mov eax, 1
- @tr_end:
- ret
|