Perguntas e respostas com Assembly e NASM
Publicado por Perfil removido (última atualização em 14/04/2014)
[ Hits: 6.159 ]
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
Verifica se o link caiu e manda aviso por email - MIkrotik v5.*
Programação para sistemas embarcados em Assembly
Nenhum coment�rio foi encontrado.
Comparação entre os escalonadores BFQ e MQ-Deadline (acesso a disco) no Arch e Debian
Conciliando o uso da ZRAM e SWAP em disco na sua máquina
Servidor de Backup com Ubuntu Server 24.04 LTS, RAID e Duplicati (Dell PowerEdge T420)
Visualizar câmeras IP ONVIF no Linux sem necessidade de instalar aplicativos
Converter os repositórios Debian para o novo formato com as chaves
Instalando Spotify no Debian 13
Realizar overclock no Miyoo Mini (plus ou normal)
linux mint reconhece microfone de lapela como fone de ouvido sem micro... (4)
Erro na inicialização do Debian como resolver (2)
Como desinstalar o GIMP? [RESOLVIDO] (1)