FizzBuzz в сборке - ошибка сегментации
Я пытаюсь написать FizzBuzz на ассемблере и постоянно вижу ошибку сегментации. До сих пор я определил, что это не мои процедуры печати (потому что я удалил их содержимое и проблема не устранена), и ошибка скрывается где-то в основной функции.
Я получил этот вывод, когда я запускаю программу:
fizzSegmentation fault
Приводит меня к мысли, что проблема не в использовании деления и поиске остатков. Но я могу ошибаться, я не собирался в течение двух лет ...
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
Я компилирую, используя:
yasm -f elf64 -o fizzbuzz.o fizzbuzz.asm
ld -d -o fizzbuzz fizzbuzz.o