Perguntas e respostas com Assembly e NASM
Publicado por Perfil removido (última atualização em 14/04/2014)
[ Hits: 6.004 ]
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
Zfehwallpaper - wallpaper no Openbox
gitignore para gerenciar dotfiles
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
Instalando Brave Browser no Linux Mint 22
vídeo pra quem quer saber como funciona Proteção de Memória:
Encontre seus arquivos facilmente com o Drill
Mouse Logitech MX Ergo Advanced Wireless Trackball no Linux
Compartilhamento de Rede com samba em modo Público/Anônimo de forma simples, rápido e fácil
Remoção de propaganda com o programa Comskip[AJUDA] (5)
Linux Lite Demorando Muito Para Ligar (2)
Instalação do drive do adaptador wiffi (5)