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

Este programa utiliza-se da pilha por causa da reordenação dos dígitos após a divisões. Do modo como foi escrito, trabalha com variáveis locais. Não são tão adequadas ou elegantes como algum tipo de variável local ou pilha, mas facilita a compreensão para se ter uma visão intuitiva do programa. Conforme os restos são obtidos, são empilhados e ao término são desempilhados conforme vai sendo feita a impressão de cada dígito. O último item a ser desempilhado é o endereço de um "new line", ponteiro para '\n' definido antecipadamente no código. A interrupção de escrita trabalha com endereços de memória do que se deseja que seja enviado para uma saída, no caso a tela. Este caractere identifica o final da escrita dos dígitos.

Por: Perfil removido


Algoritmo de Raiz Quadrada Inteira em Assembly Puro para Linux x86 (GNU Assembler)

Algoritmo de obtenção de raiz quadrada inteira em assembly puro para Linux. Sem uso de alguma instrução para a operação ou algoritmo iterativo que necessite de valores de ponto flutuante.

Por: Perfil removido


"Clear Screen" para Linux x86 com Inline Assembly (embutido no código) em C

Esta função dentro deste código realiza o mítico "clear screen" em ANSI C. Uma chamada de interrupção de kernel para imprimir uma sequência de escape de terminal que limpe o código. Nenhum segredo para compilar. Apenas uso simples do GCC.

Por: Perfil removido


"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.

Por: Perfil removido


"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.

Por: Perfil removido


GAS Bubblesort

Algoritmo de ordenação bubblesort ordenando uma string.

Por: Ewerton Daniel de Lima






Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts