FizzBuzz na montagem - falha de segmentação

Estou tentando escrever o FizzBuzz no Assembly e vejo falhas de segmentação o tempo todo. Até agora, determinei que não são minhas rotinas de impressão (porque removi o conteúdo e o problema persiste) e o erro está oculto em algum lugar da função principal.

Eu estava recebendo essa saída quando executo o programa:

fizzSegmentation fault

Levando-me a acreditar que não é o problema de usar a divisão e procurar os restantes. Mas posso estar errado, não faço Assembléia há dois anos ...

SECTION .data
global _start
    fizz: db "fizz", 4
    buzz: db "buzz", 4

SECTION .bss
    counter: resb    1

SECTION .text
_start:

    mov ax,0
    mov [counter],ax

main_loop:

    cmp ax,100          ;from 0 to 100
    je  exit            ;
    mov bl,3            ;divisor
    mov ah,0            ;here will be a remainder
    div bl              ;divide
    cmp ah,0            ;compare the remainder with 0
    je  print_fizz      ;print fizz if they equal
    mov bl,5            ;new divisor
    mov ah,0            ;do I have to do it every time?
    div bl              ;divide
    cmp ah,0            ;compare the remainder with 0
    je  print_buzz      ;print buzz if they equal
    jmp print_ax        ;print contents of ax if not
    inc ax              ;increment ax
    jmp main_loop       ;jump to label

print_ax:
    ret

print_fizz:
    ret

print_buzz:
    ret

exit:
    mov rax,1
    mov rbx,0
    int 80h
    ret

Estou compilando usando:

yasm -f elf64 -o fizzbuzz.o fizzbuzz.asm
ld -d -o fizzbuzz fizzbuzz.o

questionAnswers(3)

yourAnswerToTheQuestion