
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
Cirurgia para acelerar o openSUSE em HD externo via USB
Void Server como Domain Control
Modo Simples de Baixar e Usar o bash-completion
Monitorando o Preço do Bitcoin ou sua Cripto Favorita em Tempo Real com um Widget Flutuante
Atualizar Linux Mint 22.2 para 22.3 beta
Jogar games da Battle.net no Linux com Faugus Launcher
Como fazer a Instalação de aplicativos para acesso remoto ao Linux
Assisti Avatar 3: Fogo e Cinzas (3)
Conky, alerta de temperatura alta (8)
Duas Pasta Pessoal Aparecendo no Ubuntu 24.04.3 LTS (42)









