Olá pessoal, sou novo na programação e novo nesse fórum também. Não sei como corrigir esse erro que está dando no meu código. O código é para dizer ao usuario se o numero que ele digitar é primo ou não. A linguagem é assembly. Ao colocar os valores 0 ou 1, ele dá falha de segmentação (imagem do núcleo gravada) Ao colocar qualquer outro valor, ele dá exceção do ponto flutuante (imagem do núcleo gravada). Segue o código abaixo.
%include "asm_io.inc";; initialized data is put in the .data segment;segment .data;; These labels refer to strings used for output;prompt1 db "Digite um número: ", 0 ; don't forget nul terminatoroutmsg1 db "Não é primo ", 0outmsg2 db "É primo ", 0;; uninitialized data is put in the .bss segment;segment .bss;; These labels refer to double words used to store the inputs;input1 resd 1; code is put in the .text segment;segment .text global asm_mainasm_main: mov eax, prompt1 ; print out prompt call print_string call read_int ; read integer cmp eax, 0 ; ao ler 0 ele pula para fimnp jz fimnp cmp eax, 1 ; ao ler 1 ele pula para fimnp jz fimnp mov ebx, 2 ; move 2 para o divisor mov edx, 0 ; limpa registrador edx div ebx ; divide eax por ebx cmp edx, 0 ; se o resto for zero pula para fimnp jz fimnp add ebx, 1 ; adiciona 1 no divisor mov edx, 0 ; limpa registrador edx div ebx ; divide eax por ebx cmp edx, 0 ; se o resto for zero pula para fimnp jz fimnp repeat: add ebx, 2 ; adiciona 2 no divisor mov edx, 0 ; limpa registrador edx div ebx ; divide eax por ebx cmp edx, 0 ; se o resto for zero pula para fimnp jz fimp jmp repeat ; se não ter pulado para fimnp ele volta para o repeat fimnp: ; número não é primo mov eax, outmsg1 ; move outmsg1 para o registrador eax call print_string ; imprime a string leave fimp: ; número é primo mov eax, outmsg2 call print_string leave leave ret
*perceberam que copiei e colei né? não consegui anexar o arquivo. ^^