Perguntas e respostas com Assembly e NASM
Publicado por Perfil removido (última atualização em 14/04/2014)
[ Hits: 6.098 ]
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
Dicas e truques Matematica Básica
MoonScript - Agenda telefônica semifuncional em 101 linhas
Nenhum coment�rio foi encontrado.
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
Como gerar um podcast a partir de um livro em PDF
Organizando seus PDF com o Zotero
Erro no realm join [Resolvido]
Um programa para baixar vídeos: Parabolic
Como Definir o Painel Principal em Múltiplos Monitores no Linux Mint
Sempre que vou baixar algum pacote acontece o erro dpkg (2)
BlueMail não abre no Kubuntu 25.04 (6)
Não consigo montar meu cartão SD (5)
aplicativos criados com webapp-manager não aparecem no menu do xfce (1)