Code
assembly
; sum_to(N) -> 1+2+...+N rdi=N, result in rax
section .text
global sum_to
sum_to:
xor eax, eax ; accumulator = 0
test edi, edi
jle .done ; if N <= 0, return 0
.loop:
add eax, edi ; accumulate N, N-1, ...
dec edi
jnz .loop ; repeat until edi == 0
.done:
ret
; Faster closed form: sum(N) = N*(N+1)/2
global sum_to_fast
sum_to_fast:
mov eax, edi
add eax, 1 ; N+1
imul eax, edi ; N*(N+1)
shr eax, 1 ; /2
ret