"Clear Screen" para Linux x86 em Assembly Puro (GNU Assembly)
Publicado por Perfil removido (última atualização em 08/05/2012)
[ Hits: 4.144 ]
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
Retorna o maior elemento de um vetor
Escrita de número em hexadecimal em Assembly Puro para Linux 64bits (Nasm - Netwide Assemble)
Escrita de um número em binário na tela em Assembly Puro para Linux x86 (Nasm - Netwide Assembler)
Simples JIT (just in time) em C
Algoritmo de Raiz Quadrada Inteira em Assembly Puro para Linux x86 (NASM - Netwide Assembler)
Aprenda a Gerenciar Permissões de Arquivos no Linux
Como transformar um áudio em vídeo com efeito de forma de onda (wave form)
Como aprovar Pull Requests em seu repositório Github via linha de comando
Aplicativo simples para gravar tela
Quebra de linha na data e hora no Linux Mint
Como fazer boot em img do debian 12.img da web? (11)
Manjaro 25.0 no permite usar crontab (1)
trocar linhas [RESOLVIDO] (11)