Enviado em 16/05/2017 - 17:08h
Olá pessoal,
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
Aprenda a Gerenciar Permissões de Arquivos no Linux
Como transformar um áudio em vídeo com efeito de forma de onda (wave form)
Como aprovar Pull Requests em seu repositório Github via linha de comando
Dando - teoricamente - um gás no Gnome-Shell do Arch Linux
Como instalar o Google Cloud CLI no Ubuntu/Debian
Mantenha seu Sistema Leve e Rápido com a Limpeza do APT!
Procurando vídeos de YouTube pelo terminal e assistindo via mpv (2025)
manjaro 22xx nativo para minha sbc, deu certo. (9)
como eu instalo o mali-t60x_r12... [RESOLVIDO] (6)
usb's param de funcionar do nada (0)