"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


Crivo de Eratóstenes Simples em Fortran 95

Para compilar, use: "gfortran sieve001.f95 -o sieve001", igual GNU Pascal e GCC Particularidades desta linguagem: - Início e fim de blocos demarcados por palavras, lembrando Pascal; - Cláusula "Program" ao início do programa semelhante a Pascal; - Declaração de variáveis no início do código, como em Pascal. - Arrays podem ser bem flexíveis ao serem dimensionados; - Usam-se parêntesis para determinar elementos de um array; - A simples declaração "LISTAGEM(:)=12345" preenche todos os elementos do array LISTAGEM com o mesmo valor. - Cláusula de fim de blocos terminam geralmente com a seguinte estrutura: "END" + "Comando titular do bloco" + "Identificador criador pelo programador". Exemplos: END DO, END IF, END PROGRAM XXXXXXX, END FUNCTION XXXXXXX; - Comentários são declarados após um ponto de exclamação; - Operadores lógicos são identificados por palavras abreviadas entre pontos (.OP.). Exemplos: .AND. .OR. .NOT. Provavelmente foi daí que veio .AND., .T. .F. do Dbase, Clipper etc.; - Originalmente "maior que (>)", "menor que (<)", "maior ou igual que (>=)", "menor ou igual que (<=)" etc em Fortran escreviam-se igual ao que se usa hoje em Bash Script ou no comando test: * Maior que: .GT. (Greater Than). Em Bash: -gt * Menor que: .GT. (Less Than). Em Bash: -lt * Maior ou igual que:: .GE. (Greater or Equal Than). Em Bash: -ge * Menor ou igual que:: .LE. (Less or Equal Than). Em Bash: -ge * Igual a: .EQ. (Equal). Em Bash -eq * Diferente de: .NE. (Not Equal). Em Bash -ne Usados dentro de colchetes em scripts em comandos "if/elif" e "while", por exemplo. - Atualmente os operadores simbólicos consagrados do tipo ">" para a omparação "maior que" podem ser usados em lugar das letras e pontos. No script fica como exemplificado. - Formatação de entrada/saída de strings e números, são mais complicadas que em C. São feitas com uma variável de string pré-declarada ou com um comando chamado "FORMAT", podendo até ter um número de linha de código (label) para identificá-lo. FORMAT lembra um comando chamado "PICTURE" do Clipper/XBase; - Impressão de término de linha ('\n' em C) no comando Write pode ser cancelada com a incomum declaração "Advance='no'"; - Cláusula "PARAMETER" pode definir constantes; - Strings são definidas por uma notação semelhante a uma multiplicação de um tipo de dado (Character) por um valor. Exemplo: Character*5. - Não existe operador para resto de divisão (módulo, sinal de porcentagem "%" em C), sendo necessário o uso de uma função já implementada na linguagem (não aparece neste código). - Não encontrei operador de auto-incremento semelhante ao "duplo mais" em C. Fortran não é lacônico, conciso e simbólico quanto C, porém pode ser tão poderoso quanto. Existem algumas facilidades sintáticas que não devem ser subestimadas.

Por: Perfil removido


Função Fatorial Recursiva em Fortran 95

A velha função fatorial, recursiva, em Fortran versão 95. Para compilar, use: "gfortran fatorial001.f95 -o fatorial001", igual GNU Pascal e GCC Durante a execução (após compilado), o programa pede um número de um intervalo pré-definido de 0 a J. Insistentemente, há um loop indefinido para isto. "J" deve ser no máximo até 20, já que o número definido por 21! (fatorial de 21) excede 2^63. O que há de diferente no código são as particularidades desta linguagem: - Blocos com início e fim definidos por palavras, lembrando Pascal; - Cláusula "Program" semelhante a Pascal; - Comentários vêm após um ponto de exclamação; - Operadores lógicos definidos por palavras entre pontos (.OP.). Provavelmente foi daí que veio .AND., .T. .F. do Dbase, Clipper etc.; - Máscaras de formatação com strings, algo mais complexas que C para formatação de entrada/saída de dados. Podem ser feitas com um comando chamado "FORMAT". De novo uma referência ao "PICTURE" do Clipper; - Necessidade de uma estranha expressão (Advance='no') para evitar avanço de linha; - Dimensionamento do tamanho do tipo de dados (KIND=8). Esta cláusula aumenta o inteiro para 64 bits. 8 é o valor máximo; - Cláusula "PARAMETER" para declarar constantes; - Funções e subrotinas devem estar num bloco determinado em uma áres definida pela cláusula "CONTAINS"; - Não foi usado algo como "RETURN" ao final, mas uma variável especificada para retorno do valor; - Variáveis de sequências de caracteres são definidas por uma coisa que "lembra" uma multiplicação de um tipo (Character) por um valor (Character*5). - Não existe operador para resto de divisão (módulo, sinal de porcentagem "%" em C), sendo necessário o uso de uma função já implementada na linguagem (não aparece neste código). A sintaxe de Fortran é ricamente cheia de recursos tanto quanto C. Infelizmente não tão lacônica e taquigráfica quanto. Seu código compilado com gfortran gerou um executável pequeno, mesmo sem usar "strip -s". É tão verborrágica quanto Pascal e até mais, lembrando também Clipper e COBOL.

Por: Perfil removido


Crivo de Eratóstenes Simples em Pascal

Esta implementação do Crivo de Erastótenes possui diretivas de pré-compilação que permitem que o código seja compilado por fpc (Free Pascal) ou gpc (GNU Pascal). Na prática é igual a um IF ... THEN ... sem usar BEGIN ... END e usando ENDIF. Sendo também que esta etapa ocorre como uma filtragem de código, antes deste ser compilado. No caso os compiladores consideram na compilação o código dentro de {$ifdef X} ... {$endif} somente se houver uma identificação de um símbolo (aqui chamado de X) no contexto Já {$ifndef X} ... {$endif} faz o contrário: compila se a definição do símbolo não for encontrada. A pré-definição "FPC" indica uso do compilador Free Pascal. A pré-definição __GPC_RELEASE__ indica uso do compilador GNU PASCAL. O código demarcado, portanto, só será usado conforme estes símbolos aparecerem {ifdef ...} ou não {ifndef ...}, isto é, conforme os compiladores utilizados. O nome dos tipos de dados numéricos para valores grandes é diferente nos dois compiladores e foi utilizada uma predefinição na área TYPE do código. Dentro desta área o código é selecionado em tempo de compilação conforme a diretiva. Mais abaixo também está outro par de compilações condicionais. A procedure Inc (...) parece não funcionar com valores não-ordinais ou inteiros no Free Pascal, portanto foi escolhido o incremento na forma-padrão como opção. Acredito que o uso de Inc (...) funcione do mesmo modo que a variável com "duplo mais" (V++) ou "mais igual" (V+=2) funcionam otimizados em C.

Por: Perfil removido


Crivo de Eratóstenes Simples em PHP

Não é muito comentado, mas pode-se fazer scripts que rodem direto do terminal para tarefas corriqueiras em PHP. Igual a Perl, Python e Shellscript. Como o objetivo desta linguagem é ser uma página dinâmica de web (ou CGI, mais raro), essa observação passa por desapercebido. Para rodar um script em PHP igual aos outros script, necessita-se de três coisas: 1ª Permissões de execução: "chmod +x ..." 2ª Colocar She-Bang na primeira linha: "#!/usr/bin/php" 3ª Todo o código deve estar entre as tags "". O que estiver fora das tags será impresso na tela sem ser interpretado. ================================================================= Este script tabula números primos. A contagem está marcada para o intervalo de 1 até 10000000 (dez milhões). Um script em Perl de código muito similar tabulou aqui os ńúmeros do intervalo de um a um milhão em quase quatro segundos. Este script fez o mesmo teste de um a um milhão em pouco menos de três, isto é um segundo a menos. Mas o que me chamou a atenção foi que o mesmo teste para ńúmeros do intervalo de um a dez milhões levou em Perl 1min 17seg (um minuto e desessete segundos). Este script aqui em "PHP de terminal" fez a mesma tabulação no intervalo de um a dez milhões em 57seg (cinquenta e sete segundos). Essa diferença de 20 segundos é muito significante para não ser notada. Se fosse em hardware mais antigo, seria uma eternidade. PHP mais rápido que Perl para ser usado em terminal?? Ainda é pouco para comparação. Falta testar acessos a recursos de sistema e ver até onde vai o poder de fogo de ambas as linguagens para tarefas similares. Desde CGI, administração de sistemas e uso em aplicativos... Pra variar, não sei se ainda pode ser melhorado, nem onde pode falhar. Aguardo por bugs.

Por: Perfil removido






Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts