NASM чётное/нечётное

Всем доброго времени суток! В качестве ознакомления с ассемблером решил написать небольшую программу чётное/нечётное. Запускается цикл от 0 до 9 и там в зависимости от остатка деления должен совершаться принт. Но возникает segfault. Не могу понять почему. Помогите пожалуйста.

section .data
  str1: db "Чётное",  10, 0
  len_str1 equ $-str1

  str2: db "Нечетное", 10, 0
  len_str2 equ $-str2

section .text
    global _start

_start:
  mov cx, 9
  label:
     mov ax, cx
     mov bx, 2
     div bx
     cmp dx, 0
     jz print1
     jnz print2
     loop label
     
print1:
   mov ecx, str1
   mov edx, len_str1
   jmp end

print2:
   mov ecx, str2
   mov edx, len_str2
   jmp end

end:
  mov ebx, 1
  mov eax, 4
  int 80h
  jmp label

Ответы (1 шт):

Автор решения: Matvj

Во-первых у вас бесконечный цикл, потому что в конце вы опять переходите к метке label.

Во вторых в самом конце вы должны добавить системный вызов для выхода:

mov r10, 0
mov rax, 44
mov rdx, number ; number - это любое число обозначающее статус завершения программы
syscall

Теперь вместо ошибки сегмента у вас будет выводится number.

→ Ссылка