As vantagens e benefícios do Assembly

Agora que você já leu sobre as desvantagens e dificuldades da linguagem Assembly, vamos falar sobre onde  essa linguagem é usada e seus benefícios.

Assembly é eficiente

Se você mandar duas pessoas, equipes ou empresas, fazerem os mesmos softwares, verá que é impossível o código delas serem iguais. Programar é raciocinar, é criatividade, depende do intelecto, experiência e raciocínio dos programadores e chefes.
É por isso que existem navegadores Web bons e ruins, Sistemas Operacionais lentos e rápidos, jogos bem feitos e mal feitos etc.

Isso tudo é eficiência: fazer um programa que rode mais rápido, que consuma pouco processamento ou que exija o mínimo de memória possível. E isso o Assembly é único.
Um programa bem feito em Assembly é simplesmente imbatível.

Sim, é trabalhoso.
Sim, é demorado.
Sim, é, algumas vezes, entediante. Mas uma vez feito, e bem feito, você terá feito um ótimo trabalho e poderá ter a certeza que vai tirar o máximo de sua máquina.

Não é à toa que é Assembly é uma linguagem muito usada em situações críticas, como em alguns trechos da construção de sistemas operacionais, como o Linux (em sua grande parte é feito em C, mas em algumas partes é necessário usar Assembly).




Assembly é rápido

O gerenciamento de memória na linguagem Java, por exemplo, é feito de forma automática.
A vantagem disso é que o programador não precisa lidar com ponteiros, endereços de memória, alocação e liberação de memória (o que é considerado por muitos como as coisas mais difíceis em programação).
A desvantagem é que isso não é perfeito, e não passa nem perto de ser algo 100% eficiente.

Em Assembly não existe nada automático assim, é você programador que vai mandar e controlar tudo. E isso é essencial, ter o controle de tudo, quando é necessário funcionamento máximo, como em microcontroladores e sistemas eletrônicos (imagina um sistema lento em uma aeronave? Não dá, em questões e sistemas de segurança, precisamos de processamento máximo).


Assembly exige menos memória

Por dar total acesso e uso de cada espaço de memória ao programador, o Assembly permite que as aplicações feitas nessa linguagem possam ocupar e usar o mínimo de memória possível.

“Com tantos computadores poderosos de gigas e gigas de memória e processamento, por quê se preocupar com o tanto de memória utilizada?” pode se perguntar o leitor e programador de linguagens de alto nível.

A linguagem de Assembly não é somente para computadores.
Existem microcontroladores com meros kilobytes de memória, em que não é possível fazer nem um “Hello world” em diversas outras linguagens de programação, e só é possível programar neles, e em outros dispositivos digitais, com Assembly.

Do ponto de vista prático, nenhum empresário vai gastar Megas de memória em simples circuitos, como de calculadores, freezer e outros sistemas digitais, quando se pode gastar apenas poucos Kb usando a linguagem Assembly.
Se assembly usa menos memória, mais barato irá sair o projeto. Isso não é importante, é essencial para todos os engenheiros.
Ser eficiente só na teoria não adianta, tem que ser eficiente e economicamente viável.


Assembly dá acesso direto ao hardware

Nem todo equipamento é bonitinho e perfeito para se trabalhar como um computador.
Existem dispositivos sem teclado, sem tela, com tipos diferentes de memória, de processador e com arquiteturas e funcionamentos diferentes. Obviamente, a grande maioria das outras linguagens de programação não seriam nem cogitadas para se usar nesses sistemas.

Embora hoje em dia os vídeo-games sejam tão potentes quanto os computadores, eles não são feitos da mesma maneira que os PC's e Notebooks. Eles não tem as mesmas peças, acessórios e recursos que facilitam a programação neles.
Ou seja, em alguns casos, SÓ É POSSÍVEL DE SE TRABALHAR COM ASSEMBLY.
Em décadas passadas, não só o hardware dos vídeo games eram controlador por mas os jogos eram feitos inteiramente com o uso da linguagem Assembly.


Os programas em Assembly são menores

Embora os códigos tendam a ser bem maiores que os das outras linguagens, depois de pronto, os aplicativos em Assembly são bem menores em tamanho.

Isso se deve ao fato do programa em Assembly ser muito eficiente e consumir pouca memória.
Além de não ter outras aplicações atuando por debaixo dos panos, como acontece em outras linguagens.


Segurança no Assembly: uma faca de dois gumes

Esse tópico pode ser tanto uma vantagem como uma desvantagem.

Sistemas feitos em linguagens de alto nível são freqüentemente burlados por hackers, pois as aplicações que fazem uso de tais linguagens não mostram nem oferecem tudo aos programadores. A gigantesca maioria desses profissionais não sabe ao que está ocorrendo em baixo nível.
E mesmo que soubessem, a maioria das linguagens simplesmente não oferece a possibilidade de se trabalhar próximo ao hardware.

Como um aplicativo em Assembly age nos mais baixos e fundamentais níveis, um programa bem feito nessa linguagem é bem mais seguro em outras linguagens, pois você pode programar e controlar manualmente cada detalhe do sistema, e de sua máquina.

Porém, como dissemos anteriormente, códigos em Assembly são grandes e complexos.
Á medida que as aplicações e sistemas forem ficando maiores, o controle sobre tudo vai ficando cada vez menor.

Ou seja, um bom programador Assembly pode prover segurança e controle que nenhum outro pode ter. Porém, ele também pode abrir brechas que outras linguagens não abririam.
Fica óbvio o motivo de vários aplicativos de cunho hacker e cracker usarem Assembly.


Assembly serve para aprender como as coisas funcionam

Há pessoas que estudam não por serem obrigadas, por estarem na faculdade ou por ser necessário para ganhar dinheiro em sua profissão.
Há pessoas que simplesmente gostam de estudar, seja por paixão, hobbie ou tédio.

A definição correta de hacker é daquele indivíduo que quer saber como e porque as coisas funcionam. Costuma-se chamar escovador de bits aquele que é curioso, tem interesse em saber e mexer nos computadores em níveis mais fundamentais possíveis.

Não importa se programa em C, Java, .NET ou até mesmo para Web, saber Assembly vai te dar uma noção de como as coisas realmente funcionam, vai abrir sua mente, melhorar seu raciocínio e compreensão sobre computadores e dispositivos digitais, deixando você, por natureza, diferenciado dos outros profissionais que simplesmente usam as tecnologias, sem saber o que está ocorrendo debaixo de seu nariz.

“Não sou louco em querer entender como funciona um carro. Louco é quem senta em cima de toneladas de ferro que possuem a força de centenas de cavalos, sem saber o que está acontecendo logo abaixo.”

6 comentários:

Orion disse...

Muito bom... Antes eu só programava usando linguagens de alto nível, mas depois que eu aprendi a programar máquina NORMA, máquina de Turing e LISP a minha mente simplesmente se abriu. Eu passei a enxergar o fluxo de informações de uma maneira muito diferente. Conceber algoritmos tornou-se muito mais fácil depois que eu consegui compreender essas três máquinas que citei.
Eu já desenvolvi pequenas aplicações em Assembly, mas só coisas simples. Pena que não há muita informação disponível neste site. Gostaria muito de entrar de cabeça na programação Assembly.
Eu já fiz todo o C Progressivo e o Java Progressivo.

Abraço.

SPACE DIGITAL disse...

Cheguei até aqui e vou em frente.. JR Rocha

elimoraissilva disse...

Bom demais, obrigado pelo curso, está muito bom os estudos...

Anônimo disse...

Assembly, embora seja uma linguagem de baixo nível, devemos tudo a ela, ela fez o passado, enxergando o futuro. ela e a chave de um futuro tecnológico e será sempre usada por muitos.

eliasandrade disse...

Estou estudando, por hobby, o PIC 16F628A (comprei um livrinho esses dias e estou pra comprar um gravador PIC também), e vou continuar lendo seu blog. Tenho muito interesse em entender mais a fundo o assembly pra microcontroladores!

Renan Silva disse...

estou atualmente produzindo jogos para NES(estou em dúvida se seguir ou não) passei alguns dias e aqui o resultado: https://www.youtube.com/watch?v=fHr2__ZKztY apesar de existir, delphi, delphix, Visual studio, VB, etc, não curto nenhum e sempre quis fazer para o NES a tempos atrás havia pego para montar jogos nele porém lembro-me que fiz um texto na tela somente, mas admito, programar para console antigo, sinceramente o ATARI(Completo) é horrível, quando tentei, é muito limitado e para mandar um texto na tela é algo muito precário e dificultoso, Megadrive é bem parecido com X86 e Snes também, nes nem tanto por ser assembly, mas não deixa de ser mediano para se fazer jogos.