![]() |
Ainda vale a pena aprender Assembly? |
Será que nos dias atuais ainda é vantajoso aprender Assembly ou essa linguagem pertence apenas ao passado?
|
![]() Implementação do clássico Hello World em um Assembler de MS-DOS.
Atualmente, ao observar o trecho de código acima, uns ficam confusos e perplexos, outros têm sentimentos de desprezo, e ainda há aqueles que se sentem nostálgicos. Isso se deve à popularidade alcançada pelas linguagens de alto nível, e ao conseqüente declínio do uso da linguagem de programação Assembly. Esse fato nos leva à seguinte pergunta: “Ainda é vantajoso estudar Assembly?”. A linguagem de programação Assembly pode ser considerada como uma família de linguagens já que cada arquitetura de processador possui a sua. Seu nome é frequentemente abreviado como ASM e é muito comum o uso do termo Assembler para se referir à linguagem embora isso seja errado, pois, Assembler é a palavra usada para denominar o programa que traduz o código Assembly, de fato, uma possível tradução para o termo Assembler é “montador”. Ela é a primeira linguagem sem ser de máquina a ser criada, sendo amplamente usada até a década de 90. A partir dessa época, foi gradualmente trocada pelas linguagens de alto nível que traziam várias vantagens, a exemplo da maior facilidade de uso, da maior produtividade e da menor chance de cometer erros. Todavia, essas vantagens trazidas por essas novas linguagens têm um custo, elas oferecem um desempenho menor do que o Assembly. Isso acontece por que no código ASM se está utilizando diretamente as instruções suportadas pelo processador, sendo assim, a transformação desse código em linguagem de máquina fica simples, ao passo que em uma linguagem de alto nível, o compilador precisa resolver como converter um código escrito em construções de nível mais abstrato, que não pode ser traduzido diretamente para linguagem de máquina. Apesar do substancial declínio da popularidade da linguagem, na atualidade, ela ainda é usada em diversas áreas, destacando os sistemas embarcados, boot loaders, drivers de dispositivos, emuladores, ou seja, em áreas cujo desempenho do programa precisa ser máximo, devido ao fato de ser a linguagem legível por humanos capaz de produzir os menores e mais rápidos programas. Isso não quer dizer, porém, que o seu estudo é inútil para outras áreas em que a preocupação com o desempenho não vem em primeiro lugar. Há quem defenda que para se escrever código de qualidade em linguagens de alto nível, é preciso saber como o compilador traduz as instruções de uma linguagem desse tipo para código de máquina, para se ter condições de fazer uma escolha consciente de qual implementação utilizar. Um desses defensores é Randall Hyde, autor dos famosos livros “The Art of Assembly Language” (A Arte da Linguagem Assembly) e “Write Great Code” (Escreva código excelente). Hyde afirma que apesar dos processadores estarem cada vez mais rápidos, grande parte dos programas não está acompanhando esse aumento na velocidade. Ele argumenta que esse ganho de desempenho ao invés de beneficiar o usuário, na verdade, beneficia os programadores que deles se aproveitam para escrever códigos mal elaborados e ineficientes. Hyde atribui como causa disso, o fato de grande parte dos programadores não saber desenvolver códigos velozes, e isso por sua vez devido a não conhecerem o funcionamento interno do computador detalhadamente. ![]() Implementação de Hello World em Assembly de Win32 escrito no MASM32, um dos inúmeros Assemblers existentes.
Há um certo consenso de que uma das melhores maneiras de estudar arquitetura de computadores, examinando o funcionamento do hardware minuciosamente, se dá pelo uso de Assembly. Ela permite que os alunos acessem todas as funcionalidades internas de um processador e adquiram, assim, uma boa noção de como eles operam e de como é o processador por dentro. Finalmente, pode-se ver que existem boas razões para o estudo dessa linguagem, tida como misteriosa por muitos, sendo as principais delas, um maior entendimento do hardware e uma melhor aptidão para desenvolver programas mais eficientes. E, além de todos os pontos evidenciados, é interessante relembrar a ideia de que um cientista da computação deve conhecer o máximo de ferramentas possível a fim de poder utilizar a mais apropriada para uma dada situação. Alguns sites para os interessados em aprender mais sobre Assembly:- Livro on-line "The Art of Assembly Language" - Manuais Intel das Arquiteturas Intel 64 e IA-32 - Manuais AMD da Arquitetura AMD64 - Comunidade ASM Community - Assemblers |
Por Victor Freire (victorclf@lcc.ufcg.edu.br) |