[Estudando Assembly]

Quando eu comecei a programar, na era do 8bits, aprender um pouco de assembly era inevitável, as maquinas eram muito mais simples que os computadores atuais e geralmente nem mesmo tínhamos um compilador a mão, no lugar digitávamos pequenos trechos de opcodes diretamente em hexadecimal.

Isso era incrivelmente útil para contornar limitações do BASIC que servia tanto como linguagem de programação como sistema operacional. (diretamente gravado na ROM da máquina)

Nessa época toda revista de informática vinha com exemplos de código e muitas vezes programas inteiros.

“Se você sabe assembly, todo programa é de código aberto."

Com a evolução dos micro-computadores para 16bits, as maquinas ficaram mais interessantes, mas ainda muito menos potentes que as atuais. Apesar de já termos compiladores e interpretadores ótimos para várias linguagens, muitos programas e até sistemas operacionais inteiros ainda eram escritos em assembly simplesmente para que pudessem funcionar em um ambiente tão limitado.

Com processadores como o 80286 e depois com o 80386 ouve uma grande melhora nos processadores, agora era possível ter memória mapeada e modo protegido, uma característica que antes era apenas dos grandes computadores agora estava disponível para computadores domésticos.

Ainda assim, levou um bom tempo até surgirem sistemas operacionais que tirassem proveito do modo protegido. É difícil explicar como era programar em uma época que seu programa tem acesso a absolutamente qualquer parte da máquina. 

Sem modo protegido seu programa pode fazer o que bem entender, pode alterar qualquer bit na RAM, pode alterar a tabela de interrupções e quando seu programa está rodando ele é o rei, nenhum outro programa pode assumir o controle se seu programa não permitir.

Claro que também se seu programa travar, a única coisa que você pode fazer é reiniciar a máquina.

Com os sistemas operacionais modernos trabalhando em modo protegido, não é mais possível acessar o hardware diretamente, é necessário sempre passar pelo kernel, isso torna os sistemas muito mais seguros, mas também tira muito da graça e do controle que tínhamos.

As máquinas são muito mais poderosas e os compiladores muito mais espertos e não é mais necessário descer para o assembly toda vez que se quer fazer algo mais interessante.

Assembly hoje em dia

Quais os motivos para se estudar assembly já que as máquinas são tão poderosas e não temos mais o controle que tínhamos? 

Note que muitas vezes você nem mesmo precisa programar diretamente em assembly para tirar proveito de conhecer essa linguagem. Você aprendeu o funcionamento dos computadores no nível do hardware e isso permite que você escreva software melhor mesmo em outras linguagens, afinal, não importa a linguagem que você escolha, depois de passar por todas as camadas do sistema operacional, virtualização, etc. seu código ainda tem que ser executado pelo hardware.

Assembly, Assembler e linguagem de máquina. 

Aqui usei assembly abrangendo todo um conceito, por exemplo, quando código diretamente em hexadecimal la nos computadores de 8bits, na verdade isso não é assembly, estamos digitando diretamente em linguagem de máquina. Eu explico um pouco sobre isso no texto Assembly, Assembler e linguagem de máquina.

Por onde começar

A parte mais difícil para iniciar em qualquer linguagem de programação é a configuração do ambiente de desenvolvimento. Para assembly temos ainda uma complexidade adicional, é preciso definir qual plataforma você vai estudar porque como assembly é muito próximo do hardware e do sistema operacional, cada plataforma vai ter uma configuração específica e seria impossível cobrir todas. Entretanto, escrevi alguns textos que podem ajudar.

Cesar Gimenes