El bucle en el ensamblaje de Intel x86 va para siempre

Actualmente estoy aprendiendo Intel x86 Assembly, y me he encontrado con un problema al intentar construir un bucle simple, que se repite 10 veces. Se supone que debe detenerse después de los 10 bucles, pero sigue y sigue, para siempre.

Este es el código que estoy usando:

    section .data
    msg     db      "Hello, World!", 0x0a
    len     equ     $-msg

    section .text
    global _start

    _start:
            mov     cx, 10  ; loop counter

            _loop_start:
                    mov     ebx, 0x01
                    mov     ecx, msg
                    mov     edx, len
                    mov     eax, 0x04
                    int     0x80

                    dec     cx
                    cmp     cx, 0
                    jge     _loop_start

            _done:
                    mov     ebx, 0x00
                    mov     eax, 0x01
                    int     0x80

Antes de intentar escribir este código, miréeste tutorial Para hacer aritmética simple.

Lo compilo así:

   nasm -f elf64 test.s -o test.o

Y enlace como este:

   ld -s -o test_exec test.o

Gracias de antemano, Anickyan

Respuestas a la pregunta(2)

Su respuesta a la pregunta