"Clear Screen" para Linux x86 em Assembly Puro (GNU Assembly)
Publicado por Perfil removido (última atualização em 08/05/2012)
[ Hits: 4.323 ]
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.
##############################################
# 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
Crivo de Eratóstenes Simples para Linux x86 em Assembly Puro (GNU Assembler)
Assembler 8086 - Recebe um caractere do usuário e imprime o código ASCII em pontos
Escrita de um número em decimal na tela em Assembly Puro para Linux 64 bits (GNU Assembly)
codigo em assembley que soma dois numeros
Como criar um make.conf no Gentoo (para iniciantes)
Como instalar o Open WebUI para Ollama no Gentoo (com systemd)
INSTALAR (e jogar) COUNTER STRIKE 1.6 (install cs 1.6) NO LINUX
A tragédia silenciosa das distribuições baseadas (ou “agregadas”)
Papel de Parede Animado no KDE Plasma 6 (Com dicas para Gentoo)
Homebrew: o gerenciador de pacotes que faltava para o Linux!
Removendo a trava de versão do Project Brutality para GZDoom/UZDoom
Acelere a compilação no Gentoo com distcc (guia para Systemd)
KDE Plasma 6.5: Como manter o Projetor fixo enquanto você alterna Áreas de Trabalho no PC
ATUALIZAÇÃO DO KERNEL LINUX (1)
[Matemática] o que seria algo mais poderoso do que uma função? [RESOLV... (5)









