quinta-feira, 19 de fevereiro de 2015

Assembly

Olá pessoal ... esta postagem demorou, as últimas semanas foram bem corridas,consegui arranjar um tempinho só hoje. Terminei um projeto de home page, mas tem toda uma parte burocrática que toma um tempo considerável ... Pois bem, vamos a nossa linguagem de hoje ... Assembly ...

Considero a linguagem Assembly umas das mais inusitadas. Bom, na verdade, ela é uma linguagem bem específica. É usada para programar dispositivos computacionais, como microprocessadores e microcontroladores. Desta forma, a linguagem Assembly é uma linguagem de baixo nível, ou seja, é muito próxima da linguagem de máquina. Tanto que é uma linguagem conhecida também como linguagem de montagem.



A linguagem de máquina utiliza um padrão de bits, algo que o ser humano não consegue ler. Desta forma, o Assembly substitui este padrão de bits por símbolos, que são chamados mnemônicos. Por exemplo, para um computador, a instrução 10110000 01100001 remove uma instrução para o registrador AL (se eu não me perdi nesses 1 e 0 ...). Como sabemos, fica muito difícil para um ser humano escrever códigos usando binários. Com o Assembly, usamos o mnemônico MOV AL,61h, que manda o mesmo comando para a máquina.

A informação é mandada para o montador, ou assembler, que faz a tradução do comando para a máquina. O assembler é um tradutor mais simples que um compilador, que é usado em linguagens como C e Java.

Processadores Intel I7 e I5 - linguagem Assembly em ação
O montador cria um código objeto, traduzindo os códigos do Assembly para a linguagem de máquina. Alguns montadores aceitam diretivas, que são comandos específicos para o montador. Por exemplo, podemos definir constantes usando diretivas.

Além do montador, que traduz os códigos usados em Assembly, temos o desmontador, que faz o trabalho inverso: traduz as informações da linguagem de máquina para a linguagem Assembly.

E que tal darmos uma olhada num código Assembly? Olha que coisa mais doida ... vamos para o nosso famoso "Hello World" em Assembly ...



.model small
.data
Msg db "Hello World em Assembly x86 by Edson Ricardo Czarneski"
.code
Inicio:
mov ax, seg msg
mov ds, ax
mov dx, offset msg
mov ah, 9h
int 21h

mov ax, 4c00h
int 21h
end inicio

Bastante código estranho, não é mesmo? São os mnemônicos. Mas, olhe abaixo o resultado deste código:

Hello World em Assembly
Se um dia você, caro leitor, quiser trabalhar programando processadores, controladores ou essas partes da arquitetura dos computadores,  saiba que o Assembly será sua linguagem ... eu prefiro as linguagens de médio e alto nível, como C, C++, Java, PHP ... Mas, como se diz, cada um na sua praia, afinal, precisamos de todos não é mesmo??? Próximo post, vamos falar de Python ... Até +++

terça-feira, 3 de fevereiro de 2015

Linguagem C/C++

Olá pessoa, só agora consegui um tempinho para fazer mais uma postagem ... a de hoje é sobre uma das linguagens mais antigas que ainda estão sendo usadas em nossos dias: a linguagem C.

Linguagem C
A linguagem C foi criada em 1972 pelo cientista da computação americano Dennis Ritchie. Dennis trabalhava nos laboratórios da AT&T Bells Labs, e criou a linguagem C para a programação do sistema operacional Unix, que era escrito em Assembly. A linguagem foi chamada de C por que suas características foram desenvolvidas de uma outra linguagem chamada B.

Em 1973, a linguagem C tornou-se poderosa o suficiente para que a maior parte do kernel (núcleo) do sistema Unix fosse reescrito nessa linguagem. Até então, o kernel era escrito somente em Assembly, que é uma linguagem de baixo nível e bastante complexa (ainda é usada na programação de processadores).

É interessante que a linguagem C até hoje é uma das mais usadas no mundo da programação. Na verdade, se olhar o índice Tiobe, C sempre está numa briga com Java pelas primeiras colocações. Mas, esse sucesso não foi imediato. No começo, apenas alguns laboratórios usavam a linguagem C na programação do kernel dos sistemas operacionais. Mas, em 1978, Dennis Ritchie e o cientista da computação canadense Brian Kernighan lançaram um livro intitulado "The C Programming Language " (A Linguagem de Programação C) que serviu como guia para outros programadores implementarem esta linguagem em seus projetos. Muitos programadores se referem ao livro como "K&R C" lembrando das iniciais dos sobrenomes dos autores.

Dennis Ritchie
A Linguagem C é muito usada na implementação de sistemas. A maior vantagem desta linguagem é a rapidez no processamento de dados. Não há a menor dúvida que C é a linguagem mais rápida neste sentido. Além disso, é uma linguagem de médio nível, permitindo ao programador prever com mais precisão o comportamento do software durante o uso. Por isso que, apesar da sua complexidade, C é uma das linguagens mais usadas em cursos de TI.

Mas nem tudo são rosas na programação usando C. Um dos maiores problemas são resultados inesperados e erros difíceis de encontrar num sistema. Por exemplo, se montarmos um vetor com dez membros e pedirmos o vigésimo membro (que não existe) o sistema devolve um valor que estará no buffer da memória.

Mas, como já estamos acostumados, vamos ver o nosso "Hello World" em C. Para tanto, uso uma IDE chamada CodeBlocks, muito boa para a programação com esta linguagem. Para ter uma visualização melhor, fiz uma programação com uma interface gráfica, mas, sinceramente, eu acho muito complicado fazer a parte gráfica em C. Mas segue o código:

#include <stdio.h>
#include <windows.h>

int WINAPI WinMain(HINSTANCE hInstance,
                   HINSTANCE hprevInstance,
                   LPSTR lpCmdLine,
                   int nCmdShow)

    {
        MessageBox (NULL, "Hello World!!!" ,"Edson Ricardo Czarneski", MB_OK | MB_ICONINFORMATION);
        
        system ("pause");
        return 0;
    }

A linguagem C precisa de importação de bibliotecas com as funções necessárias para a execução do código pelo compilador. Para tanto, nas primeiras linhas temos os #includes que incluem no código as bibliotecas.

Abaixo, segue o resultado do código acima:

Terminal, código e janela do Hello World em C


A linguagem C++ é uma implementação da linguagem C, com algumas modificações e melhoramentos. Por isso, após aprender alguma coisa de C, já ingressamos na linguagem C++. Até esse nome é uma alusão do incremento (i++) quando, na programação, adicionamos algo no sistema. Assim, C++ é a linguagem C adicionada de algumas melhorias.

Assim, terminamos a linguagem C. Na próxima, vamos falar de uma linguagem muito diferente e de baixo nível: Assembly ... essa é bem diferente ... Mas vamos conhece-la na semana que vem ... Até lá ...

o K&R - a ajuda para entender o C