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.