Pular para o conteúdo

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

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.
Perfil removido removido
Hits: 4.386 Categoria: C/C++ Subcategoria: Assembly
  • Download
  • Nova versão
  • Indicar
  • Denunciar

Descrição

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.
Download clrscr001.s Enviar nova versão

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 "
##############################################
#        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 "
##############################################
#        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
33c
##############################################
#        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
" 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
33c
##############################################
#        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 "
##############################################
#        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
33c
##############################################
#        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
" 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
" 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

GAS Informações da CPU

GAS Inteiro para String (formato binário)

Escrita de um número em binário na tela em Assembly Puro para Linux 64 bits (GNU Assem

Algoritmo de Raiz Quadrada Inteira em Assembly Puro para Linux x86 (NASM - Netwide Assembler)

Fatorial Assembly MIPS

Contribuir com comentário

Entre na sua conta para comentar.