"Clear Screen" para Linux x86 em Assembly Puro (GNU Assembly)

Publicado por Perfil removido (última atualização em 08/05/2012)

[ Hits: 4.031 ]

Download clrscr001.s




Obs[1]: Testado apenas para o as (GNU Assembly.). Não tentei com o Nasm.
Obs[2]: Óbvio, mas bom ressaltar: não funciona em nada que rode "INT 21h". TASM está fora...
Obs[3]: (De última hora) Está aparecendo um sinal entre chaves escrito em maiúsculo "FONTE" no lugar do BACKSLASHZERO (barra invertida-zero), sinal de caractere zero e de fim de string em C, quando alguma coisa lê uma string e entende o símbolo como zero.

"\" + "0" = BACKSLASHZERO = Caractere nulo.

Ditando a grosso modo, caso não dê pra ver corretamente, fica sendo a seguinte linha deste modo:

   .ascii "BACKSLASHZERO33cBACKSLASHZERO"

O "33" fica aonde está, junto com a letra "c" (minúscula). Apenas troca-se o nome da barra pela barra e o ZERO pelo algarismo "0".

=======================================

Este código simplesmente retira os caracteres do console após executado muito parecido com o comando "clear" do Unix/Linux.

Para gerar o executável, usar:
"$ as clrscr001.s -o clrscr001.o"

Em seguida usar:
"ld clrscr001.o -o clrscr001"

Depois para executar:
"$ ./clrscr001"

Após a montagem, por aqui ficou com apenas 591 bytes.

E logo depois ao usar "$ strip -s clrscr001" para retirar informações de montagem, link edição etc ficou com apenas 308 bytes.

Quer dizer, menor que os 512 bytes da MBR de um HD convencional.

Obs: O comando "strip" retira informações usadas para depurar com o gdb. Como está tudo ok, estas serão retiradas para ficar menor ainda.

  



Esconder código-fonte

##############################################
#        Comentários:
##############################################
#    Para gerar o executável, usar:
#    "$ as clrscr001.s -o clrscr001.o"
#
#    e em seguida usar:
#    "$ ld clrscr001.o -o clrscr001"
#
#    depois para executar:
#    "$ ./clrscr001"
##############################################
   .section   .rodata
clear:
   .ascii "{FONTE}33c{FONTE}"
size:
   .int . -clear         
   .section   .text         
   .globl _start         
_start:               
   movl $4, %eax         
   movl $1, %ebx         
   movl $clear, %ecx
   movl size, %edx
   int $0x80
   movl %eax, %ebx
   movl $1, %eax
   int $0x80

Scripts recomendados

codigo em assembley que soma dois numeros

Fibonnaci de N em Assembly

Fibonacci em assembly

Escrita de um número em decimal na tela em Assembly Puro para Linux x86 (Nasm - Netwide Assembly)

FreeBSD Write


  

Comentários


Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts