# Execution begins at address 0 .pos 0 irmovq stack, %rsp # Set up stack pointer call main # Execute main program halt # Terminate program # Sample linked list .align 8 ele1: .quad 0x00a .quad ele2 ele2: .quad 0x0b0 .quad ele3 ele3: .quad 0xc00 .quad 0 main: irmovq ele1,%rdi xorq %rax,%rax call rsumlist ret # sum_list - Recursive version of sum_list # start in %rdi rsumlist: pushq %rcx andq %rdi , %rdi je end mrmovq (%rdi) , %rcx irmovq $8 , %rbx addq %rbx , %rdi mrmovq (%rdi), %rdi call rsumlist addq %rcx , %rax end: popq %rcx ret # Stack starts here and grows to lower addresses .pos 0x200 stack: