Obra: Assembly x86/Introdução
programação com assembly linguagem assembly também conhecida por assembler ou asm linguagem de programação mais primitiva que existe tendo aparecido como uma ajuda aos primeiros programadores que antes disso utilizavam exclusivamente código máquina para programar assembly preserva toda flexibilidade que hardware oferece permitindo que programador otimize seu código unha utilizando truques que seriam impossíveis numa linguagem de programação de alto nível como ao programar em assembly programador utiliza as instruções que seu processador reconhece mas não tem de escrevê las na forma nativa do processador isto não tem necessidade de escrever os códigos binários que indicam ao processador para executar determinada operação códigos esses conhecidos por opcodes em vez disso programador tem ao seu dispor um conjunto de mnemônicas serem posteriormente traduzidas para linguagem de máquina por um programa chamado assembler assemblador ou montador os assembladores normalmente fornecem também outros recursos que facilitam muito programação em baixo nível mais onipresente dos quais possibilidade de definir símbolos que são normalmente utilizados para referenciar localizações na memória conhecidas pelo assemblador outros recursos incluem possibilidade de fazer operações aritméticas alguns casos algébricas no momento da assemblagem os pré processadores que oferecem funcionalidades muitas vezes superiores aos oferecidos pelo pré processador do assembly nos dias de hoje atualidade do panorama da programação largamente contrária programação em baixo nível no geral as mentes bem pensantes geralmente desaconselham utilização de assembly ou até mesmo do para novos projetos incentivam reescrita de software escrito em assembly numa linguagem de alto nível verdade que muita coisa que se diz sobre necessidade de dar alguma importância programação 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 validade de muitas das razões que esses programadores alegam apenas apresentamos mais inquestionável qualquer documento didático sobre assembly tipicamente encarrega se de desmotivar as pessoas antes de começar ensinar linguagem em si mas aqui vamos tentar que as pessoas não fiquem obcecadas com problema de encontrar uma razão para usar assembly que usem realmente linguagem formem uma opinião sobre ela admitamos que leitor deseja usar assembly porque quer principal problema que código escrito em assembly não independente da plataforma nem facilmente portável sobre isto há três coisas dizer código assembly escrito para determinada arquitetura de processadores nunca irá correr num processador de outra arquitetura sem uma reescrita completa não se trata apenas de portar no sentido clássico da coisa mas basicamente de repetir todo processo de desenvolvimento mas com outras instruções as de outro processador diferentes sistemas operativos utilizam diferentes abis application binary interfac
utro processador diferentes sistemas operativos utilizam diferentes abis application binary interface que significa que um programa escrito para um sistema operativo não irá facilmente correr noutro apesar de haver algumas saídas para esta dificuldade das quais programador iniciado rapidamente se aperceberá alguns casos estas podem ser bastante complicadas de implementar título de exemplo indicamos fasm um assemblador escrito em assembly que foi portado para dos unix windows segredo deste programa adaptação do código da interface com utilizador que chama as partes internas do assemblador que são essencialmente algorítmicas portanto não necessitam de ser portadas devemos ter no entanto atenção ao fato de que relativamente fácil prática habitual escrever código que também não portável certas práticas que saem fora do âmbito da biblioteca padrão geralmente necessitam de adaptação para compilar sem problemas tanto em unix como windows vantagens de utilizar assembly há quatro vantagens gerais em usar assembly otimização da rapidez de execução em assembly sempre possível escrever código mais rápido embora essa vantagem não venha automaticamente pois requer treino otimização do espaço ocupado em memória os compiladores por vezes traduzem código de uma maneira demasiado mecanizada geram código supérfluo usando assembly este problema não existe porque código gerado por seres pensantes capacidades da linguagem as linguagens de alto nível como ou python existem para eliminar ou atenuar problema da portabilidade se estas incluíssem funções instruções específicas de determinado processador falhariam nesse objetivo com assembly isso não acontece uma vez que as linguagens assembly são específicas de cada processador não aspiram portabilidade por esta razão kernel de um sistema operativo necessita sempre de incluir algum código assembly ainda que maior parte possa ser escrita em ou noutra linguagem de alto nível conhecimento acontece também que geralmente aqueles que sabem assembly mesmo que nunca cheguem utilizar ativamente linguagem acabam por escrever código mais eficiente mesmo quando programam em alto nível isso acontece porque fica se saber quais as operações que compilador mais facilmente efetivamente otimiza conciliando os dois mundos quem quiser programar em assembly recomenda se que dê atenção questão da portabilidade se programa não tiver definitivamente como objetivo ser utilizado por outros que não programador problema fica eliminado mas deve se tomar em atenção que para certos programas isto pode não ser óbvio um bom exemplo kernel do linux se programador tenciona apenas reescrever algumas partes do programa em assembly de modo melhorar rapidez bom que mantenha uma versão portável quem use uma arquitetura diferente da do programador iria de outra forma ter problemas ao tentar compilar programa