#include #include long sum_array(long*, size_t); // Array pointer is in rdi // length is in rsi asm("sum_array: \n" " mov $0, %rax\n" "top:\n" " add (%rdi), %rax\n" " add $8, %rdi\n" " dec %rsi\n" " cmp $0, %rsi\n" " jne top\n" " ret\n" ); long other_sum_array(long* a, size_t len){ long sum = 0; do { sum += *a; a++; len--; } while (len); return sum; } int main(int argc, char ** argv){ long stack_array[] = {2, 4, 6, 8, 10}; printf("Sum: %ld\n", sum_array(stack_array, 5)); long *heap_array = malloc(sizeof(long) * 5); heap_array[0] = 20; heap_array[1] = 40; heap_array[2] = 60; heap_array[3] = 80; heap_array[4] = 100; printf("Sum: %ld\n", other_sum_array(heap_array, 5)); free(heap_array); return 0; }