Perguntas e respostas com Assembly e NASM

Publicado por Perfil removido (última atualização em 14/04/2014)

[ Hits: 5.950 ]

Download pergunta.asm




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

  



Esconder código-fonte

; 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

Scripts recomendados

Conectar o gns3 na Internet

Crivo de Eratóstenes Simples em XBase (Clipper)

LINUX instalacao do Ubuntu

gitignore para gerenciar dotfiles

Método das Cordas em SCILAB


  

Comentários

Nenhum comentário foi encontrado.


Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts