Perguntas e respostas com Assembly e NASM
Publicado por Perfil removido (última atualização em 14/04/2014)
[ Hits: 6.007 ]
Simples aplicação de perguntas e respostas feito em Assembly usando assemblador NASM.
Este script foi testado em uma máquina com processador Intel Pentium 4, arquitetura x64.
Para executar o exemplo, deve-se ter o NASM instalado em sua máquina. Daí, execute os seguintes comandos para compilar o arquivo, e transformá-lo em um programa executável:
Para compilar:
$ nasm -f elf64 pergunta.asm
Para gerar o executável:
$ ld pergunta.o -o pergunta
Para executar:
$ ./pergunta
; Variáveis setadas section .data p DB "PRIMEIRA PERGUNTA", 0xa ln_p equ $ - p p_d DB "SEGUNDA PERGUNTA", 0xa ln_p_d equ $ - p_d r1 DB "OI" R2 DB "DOIS" ac DB "voce acertou" l_ac equ $ - ac ec DB "voce errou" l_ec equ $ - ec l_r1 equ $ - r1 fim DB "ACABOU" l_f equ $ - fim ; Variáveis declaradas section .bss resp1 RESB 2 resp2 RESB 2 ; Corpo do documento section .text global _start _start: mov eax, 4 ; Indica pro KERNEL que é operação de saída mov ebx, 1 ; 0 = NADA; 1 = STDOUT(Saída); 2 = STDIN (Entrada) mov ecx, p ; Conteúdo mov edx, ln_p ; quantidade de caracteres que serão exibidos int 0x80 ; Sinal para o KERNEL mov eax, 3 ; Indica pro KERNEL que é para receber um campo mov ebx, 2 ; STDIN (Entrada) mov ecx, resp1 ; Campo digitado pelo usuário vai para a variável resp1 mov edx, 2 ; Espaço para digitação de dois caracteres int 0x80 mov esi, resp1 ; Joga em esi o valor de resp1 mov edi, r1 ; Joga em edi o valor da resposta (r1) mov ecx, 2 cld ; Incrementa registradores de strings (Pula de um caracter para outro) repe cmpsb ; REPE repete o comando cmpsb até ecx igualar á 0. O comando CMPSB compara valores de string que estao em ESI e EDI. jecxz acertou ; Pula para o trecho acertou quando jmp _start ; Quando o usuário erra, volta para este fluxo ;jmp errou jmp sair ; Exibo na tela mensagem de que acertou acertou: mov eax, 4 mov ebx, 1 mov ecx, ac mov edx, l_ac int 0x80 ; Fluxo da segunda pergunta, semelhante á primeira segunda: mov eax, 4 mov ebx, 1 mov ecx, p_d mov edx, ln_p_d int 0x80 mov eax, 3 mov ebx, 2 mov ecx, resp2 mov edx, 4 int 0x80 mov esi, resp2 mov edi, R2 mov ecx, 2 cld repe cmpsb jecxz finish jmp segunda errou: mov eax, 4 mov ebx, 1 mov ecx, ec mov edx, l_ec int 0x80 jmp sair finish: mov eax, 4 mov ebx, 1 mov ecx, fim mov edx, l_f int 0x80 jmp sair ; eax recebe valor de 1, indicando ao KERNEL que é o fim do programa sair: mov eax, 1 mov ebx, 0 int 0x80
PJEOffice - Baixa automaticamente última versão do CNJ (Conselho Nacional de Justi&cce
MoonScript - Agenda telefônica semifuncional em 101 linhas
Nenhum comentário foi encontrado.
Passkeys: A Evolução da Autenticação Digital
Instalação de distro Linux em computadores, netbooks, etc, em rede com o Clonezilla
Título: Descobrindo o IP externo da VPN no Linux
Armazenando a senha de sua carteira Bitcoin de forma segura no Linux
Enviar mensagem ao usuário trabalhando com as opções do php.ini
Como configurar posicionamento e movimento de janelas no Lubuntu (Openbox) com atalhos de teclado
Máquinas Virtuais com IP estático acessando Internet no Virtualbox
Instalar o Microsoft Edge no Slackware 15
Instalando Brave Browser no Linux Mint 22
vídeo pra quem quer saber como funciona Proteção de Memória:
crontab executar em tempos (1)
Formatando cartão de memoria que nao formata[AJUDA] (9)
Programa duplicado no "Abrir com" e na barra de pesquisa do ... (3)