Ir ao conteúdo
  • Cadastre-se

alissonlcunha

Membro Júnior
  • Posts

    8
  • Cadastrado em

  • Última visita

Reputação

0
  1. Olá pessoal, Sou novato em assembly e estou com um probleminha aqui num problema de faculdade. section .data SYS_EXIT_PROGRAM equ 1 SYS_STANDARD_OUTPUT equ 1 SYS_STANDARD_INPUT equ 2 SYS_READ_FILE equ 3 SYS_WRITE_FILE equ 4 SYSTEM_CALL equ 0x80 ;textos de exibicao para entrada do programa TextoPedeCarta: db 'Informe a Carta: ',0 tamanhoTextoPedeCarta: equ $ - TextoPedeCarta TextoPedeNaipe: db 'Informe o Naipe: ',0 tamanhoTextoPedeNaipe: equ $ - TextoPedeNaipe ;textos de exibicao para erros de entrada TextoErroCarta: db 'Carta digitada inválida. [Digite uma carta entre 2,3,4,5,6,7,Q,J,K e A] ',13,10,0 tamanhoTextoErroCarta: equ $ - TextoErroCarta TextoErroNaipe: db 'Naipe digitado inválido. [Digite P para Paus, C para Copas, E para Espadas e O para Ouros] ',13,10,0 tamanhoTextoErroNaipe: equ $ - TextoErroNaipe QuebraLinha: db 13,10,0 tamanhoQuebraLinha: equ $ - QuebraLinha arrayCartas db '2','3','4','5','6','7','Q','J','K','A' arrayNaipes db 'P','C','E','O' section .bss cartaDigitada: resb 21 tamanhoCartaDigitada equ $ - cartaDigitada naipeDigitado: resb 21 tamanhoNaipeDigitado: equ $ - naipeDigitado CARTA: resb 4 NAIPE: resb 4 section .text global _start ;Esta rotina pede uma carta e verifica se ; o valor é válido ; Entradas: ; ECX - texto complementar da carta ; EDX - tamanho do texto complementar ; EDI - ponteiro para o local onde a carta será colocada Pede1Carta: mov eax,SYS_WRITE_FILE mov ebx,SYS_STANDARD_OUTPUT mov ecx,TextoPedeCarta mov edx,tamanhoTextoPedeCarta int SYSTEM_CALL mov eax,SYS_WRITE_FILE mov ebx,SYS_STANDARD_OUTPUT pop edx pop ecx ; precisa guardar os valores para ; caso ocorra erro de digitação push ecx push edx int SYSTEM_CALL mov eax,SYS_READ_FILE mov ebx,SYS_STANDARD_INPUT mov ecx,cartaDigitada mov edx,tamanhoCartaDigitada int SYSTEM_CALL call VerificaCarta Pede1Naipe: push edi push ecx push edx mov eax,SYS_WRITE_FILE mov ebx,SYS_STANDARD_OUTPUT mov ecx,TextoPedeNaipe mov edx,tamanhoTextoPedeNaipe int SYSTEM_CALL mov eax,SYS_WRITE_FILE mov ebx,SYS_STANDARD_OUTPUT pop edx pop ecx ; precisa guardar os valores para ; caso ocorra erro de digitação push ecx push edx int SYSTEM_CALL mov eax,SYS_READ_FILE mov ebx,SYS_STANDARD_INPUT mov ecx,naipeDigitado mov edx,tamanhoNaipeDigitado int SYSTEM_CALL VerificaCarta: mov eax,10 mov ecx, arrayCartas call loop loop: mov ebx,[cartaDigitada] cmp [ebx],ecx add ecx,1 jz Pede1Carta dec eax jnz loop CartaIncorreta: mov eax,SYS_WRITE_FILE mov ebx,SYS_STANDARD_OUTPUT mov ecx,TextoErroCarta mov edx,tamanhoTextoErroCarta int SYSTEM_CALL jmp Pede1Carta CartaCorreta: mov eax,[cartaDigitada] mov [CARTA],eax ret _start: call Pede1Carta call Pede1Naipe mov eax,SYS_EXIT_PROGRAM mov ebx,0 int SYSTEM_CALL O programa basicamente é um tutor de truco. Estou no começo ainda tentando validar as cartas. O programa compila e roda, mas após entrar qualquer carta, tenho um segmentation fault. Algúem consegue me ajudar o porque??

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

 

GRÁTIS: ebook Redes Wi-Fi – 2ª Edição

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!