Assembly

## O que é Assembly?

*Assembly*  é uma notação legível por humanos para o código de máquina que uma arquitetura de computador específica usa, utilizada para programar códigos entendidos por dispositivos computacionais, como microprocessadores e microcontroladores. O código de máquina torna-se legível pela substituição dos valores em bruto por símbolos chamados mnemónicos

## Um pouco sobre Assembly

O Assembly foi provavelmente a primeira linguagem de programação da história, surgida na década de 50, época em que os computadores ainda usavam válvulas. A idéia do Assembly é usar um comando em substituição a cada instrução de máquina.

No Assembly, cada uma destas instruções equivale a uma instrução do processador. Ao invés de usar instruções como 10101011, você pode usar outras bem mais fáceis de entender e de memorizar, como add, div, mul, and, or, not, etc. Você também pode criar variáveis, que são pequenos espaços na memória RAM reservados para guardar algum tipo de informação, que o programa precisará mais tarde. Você pode usar aquelas instruções que citei para lidar com elas. Por exemplo, a instrução "add" faz com que o processador some duas variáveis; "add x, y" por exemplo, soma os valores de x e y.

Apesar de ser exaustivamente trabalhoso, você pode perfeitamente desenvolver pequenos programas em Assembly. Para isso só vai precisar de um compilador e bastante paciência para aprender.

A linguagem assembly é também única para cada tipo de CPU, de forma que um programa escrito em linguagem assembly para uma CPU poderá não ser executado em outra CPU de uma família diferente.

## Vantagens de Assembly

* Tamanho dos programas de Assembly são menores;
* Assembly permite criar ações de alta complexidade, impossíveis ou difíceis de se realizar em linguagens de Alto Nível;
* Conhecimento, em Assembly possibilita a programação nos outros tipos de linguagem;
* É um programa recomendável onde o tempo é um fator crítico como por exemplo: medições de tempo que exigem boa performance;
* Se torna de fácil compreensão com algum conhecimento de conceitos de hardware e seus dialetos.

## Desvantagens de Assembly

* Programar em Assembly consome muito tempo para o programador;
* A linguagem não é portável. Ela é portável apenas dentro de uma família de processadores.
* Como é uma linguagem especifica para processares de cada máquina, é necessário desenvolver um programa para cada máquina.
* Não existe rotinas pré-definidas, o programador deverá desenvolver suas próprias rotinas.
* A linguagem Assembly apresenta um número muito reduzido de instruções, do tipo operações de movimentação de dados em memória, para registros e para memórias, e operações lógicas e aritméticas bem simples. Estas instruções são de baixa expressividade, isto é, elas são de baixo nível. O programador deve programar num nível de detalhamento muito maior para fazer a mesma coisa que em um programa escrito em linguagem de alto nível.
* Como o programador utiliza diretamente os recursos do processador e memória, ele deve conhecer muito bem a máquina onde ele está programando.

## Assembly na atualidade

A atualidade da programação é largamente contrária à programação em baixo nível no geral. As mentes bem pensantes geralmente não aconselham a utilizar Assembly, ou até mesmo C, para novos projetos e incentivam a reescrita de software escrito em Assembly numa linguagem de alto nível.

A verdade é que muita coisa que se diz sobre a necessidade de dar alguma importância à programação, e até mesmo ao estudo, do Assembly nos dias de hoje. Regra geral, qualquer programador dá uma série de razões para não usar Assembly. Sendo discutível a validade de muitas das razões que esses programadores alegam, apenas apresentamos a mais inquestionável.