1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
# !> Print an array of numbers in a "for loop"

.global main

.text

main:
  enter $0, $0

  mov $numbers, %r12
  mov $0, %r13 # i = 0
loop:
  cmpq $8, %r13 # i < 8
  jge loop_end  # -> end the loop
  # numbers -> %r12
  # i -> %r13

  mov $format, %rdi
  mov (%r12, %r13, 8), %rsi
  mov $0, %al
  call printf

  incq %r13
  jmp loop

loop_end:
  mov $0, %rax
  leave
  ret

.data

numbers:
  .quad 1, 2, 3, 4, 5, 6, 7, 8

format:
  .asciz "%ld\n"