Pular para o conteúdo

"Clear Screen" para Linux x86 em Assembly Puro (Nasm - Netwide Assembler)

Obs[1]: Testado apenas para o nasm (Netwide Assembler.). Não funciona com "as" (GNU Assembler). Nem o outro para o GNU Assembler funciona com Nasm.
Obs[2]: Sempre é bom lembrar: não funciona em nada que rode "INT 21h". TASM está fora... Aqui é int 0x80 (int 80h).
Obs[3]: O comando "strip" retira informações usadas para depurar com o gdb. Como está tudo ok, estas serão retiradas para ficar menor ainda. Ou então usa-se a opção "-s" no comando "ld", que já faz isso direto.
Obs[4]: (Já ocorreu antes) Sequẽncias de escape não estão sendo visttas corretaente. Qualquer coisa que use BACKSLASH "\" + "0", por exemplo. Estão saindo assim

"\" + "0" = "{" + FONTE + "}"

Sem as aspas e os espaços em branco. Em todo o caso, recomendo baixar o código para visualizar melhor.

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

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:
"$ nasm -f elf clrscr001.asm"

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

A opção "-s" é opcional e aplica um "strip -s" automaticamente. Se alguém quiser usar o gdb, não deverá aplicar "-s", nem usar "strip -s" após a linkedição.

Depois para executar:
"$ ./clrscr001"

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

E aaṕos o processo de "strip", retirando informações de montagem, linkedição etc. seja junto com a linkedição ou após "strip -s" ficou com apenas 348 bytes.

Quer dizer, também ficou menor que os 512 bytes da MBR de um HD convencional, mas uns poucos bytes maior que um equivalente feito em GNU Assembler.
Perfil removido removido
Hits: 7.084 Categoria: C/C++ Subcategoria: Assembly
  • Download
  • Nova versão
  • Indicar
  • Denunciar

Descrição

Obs[1]: Testado apenas para o nasm (Netwide Assembler.). Não funciona com "as" (GNU Assembler). Nem o outro para o GNU Assembler funciona com Nasm.
Obs[2]: Sempre é bom lembrar: não funciona em nada que rode "INT 21h". TASM está fora... Aqui é int 0x80 (int 80h).
Obs[3]: O comando "strip" retira informações usadas para depurar com o gdb. Como está tudo ok, estas serão retiradas para ficar menor ainda. Ou então usa-se a opção "-s" no comando "ld", que já faz isso direto.
Obs[4]: (Já ocorreu antes) Sequẽncias de escape não estão sendo visttas corretaente. Qualquer coisa que use BACKSLASH "\" + "0", por exemplo. Estão saindo assim

"\" + "0" = "{" + FONTE + "}"

Sem as aspas e os espaços em branco. Em todo o caso, recomendo baixar o código para visualizar melhor.

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

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:
"$ nasm -f elf clrscr001.asm"

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

A opção "-s" é opcional e aplica um "strip -s" automaticamente. Se alguém quiser usar o gdb, não deverá aplicar "-s", nem usar "strip -s" após a linkedição.

Depois para executar:
"$ ./clrscr001"

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

E aaṕos o processo de "strip", retirando informações de montagem, linkedição etc. seja junto com a linkedição ou após "strip -s" ficou com apenas 348 bytes.

Quer dizer, também ficou menor que os 512 bytes da MBR de um HD convencional, mas uns poucos bytes maior que um equivalente feito em GNU Assembler.
Download clrscr001.asm Enviar nova versão

Esconder código-fonte

; nasm -f elf clrscr001.asm
; ld -s clrscr001.o -o clrscr001
; a opção -s no linkeditor faz "strip -s" automaticamente
;
section   .text
global _start 

_start:

   mov   eax, 0x04
   mov   ebx, 0x01
   mov   ecx, strcls
   mov   edx, sizecls
   int   0x80
   mov   eax, 0x01
   int   0x80

section   .data

strcls      db   `
; nasm -f elf clrscr001.asm
; ld -s clrscr001.o -o clrscr001
; a opção -s no linkeditor faz "strip -s" automaticamente
;
section   .text
global _start 

_start:

   mov   eax, 0x04
   mov   ebx, 0x01
   mov   ecx, strcls
   mov   edx, sizecls
   int   0x80
   mov   eax, 0x01
   int   0x80

section   .data

strcls      db   `
; nasm -f elf clrscr001.asm
; ld -s clrscr001.o -o clrscr001
; a opção -s no linkeditor faz "strip -s" automaticamente
;
section   .text
global _start 

_start:

   mov   eax, 0x04
   mov   ebx, 0x01
   mov   ecx, strcls
   mov   edx, sizecls
   int   0x80
   mov   eax, 0x01
   int   0x80

section   .data

strcls      db   `{FONTE}33c`
sizecls   equ   $ - strcls
33c` sizecls   equ   $ - strcls
33c` sizecls   equ   $ - strcls

Fibonacci em assembly

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

Escrita de um número em binário na tela em Assembly Puro para Linux x86 (Nasm - Netwide Assembler)

FreeBSD Execve

Fatorial Assembly MIPS

#1 Comentário enviado por _wolf em 09/05/2012 - 13:47h
Excelente demonstração.

Contribuir com comentário

Entre na sua conta para comentar.