Ir ao conteúdo
  • Cadastre-se

Erro Assembly


Posts recomendados

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. ^^

Link para o comentário
Compartilhar em outros sites

Visitante
Este tópico está impedido de receber novas respostas.

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...