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