Estava procurando material para aprender a trabalhar com a linguagem Assembly. Achei algumas coisas interessantes o problema é que esse material é muito difuso e para iniciantes como eu, essa quantidade de informações importantes espalhadas em diversos tutoriais não ajuda muito. É certo que nunca vai existir um livro “completo” falando de uma linguagem de programação ainda mais sobre o Assembly, que sendo linguagem considerada de baixo nível por ser um tipo de linguagem muito próxima da linguagem de maquina, varia de acordo com o Hardware que se pretende programar.
Então decidi reuni eu mesmo essas informações num conteúdo só, com o objetivo de facilitar o acesso á essas informações muito preciosas. Ajudando pessoas como eu, que estão se iniciando nesse mundo da programação Assembly a entender o mecanismo de funcionamento dessa linguagem tão poderosa.
Estarei postando constantemente neste fórum conteúdo direcionado à quem é iniciante. Aqueles que puderem contribuir para o enriquecimento de nossos conhecimentos fiquem à vontade para portar observações.
Conto com o apoio de todos, espero que gostem.
Abraços
Então vamos começar:
Antes de tudo, a introdução (Essa parte é meio chata, mas é importantíssima):
O Assembly é uma linguagem de baixo nível por ser uma linguagem próxima daquela que as máquinas entendem. Para usá-la é necessário, além do conhecimento da própria linguagem, conhecimento das características de funcionamento da máquina.
Mas para que eu vou querer aprender uma liguagem desse tipo???
Para agilizar seus trabalhos. Se você tem uma rotina que acaba fritando a CPU de tanto processamento isso será muito útil. Os executáveis criados em Assembly apresentam duas grandes vantagens: velocidade de execução (como ela está próxima do código de máquina, ela é muito veloz) e tamanho reduzido. Além disto, como a linguagem não tem firulas e vai direto ao ponto (ou aos registradores), a execução exige muito menos recursos porque qualquer assembler supera a capacidade dos melhores compiladores de linguagens de alto nível. O software de desempenho crítica é um alvo natural para os programas em assembly puro.
Ele também permite a você falar com a máquina a nível de hardware por se comunicar diretamente com o kernel do seu sistema operacional lhe dando muito maior controle e flexibilidade sobre o PC .
Pra quem se interessar pelo surgimento da linguagem assembly: Apenas usuários registrados e ativados podem ver os links., Clique aqui para se cadastrar...
Assemble vem do Inglês e significa construir, juntar partes; é daí que vem o nome da linguagem de programação, o ASSEMBLY. Assembler significa construtor e é o nome que se dá a programas que "juntam partes", que "constroem" executáveis. É por isto que não é possível escrever um programa em assembler (como se costuma ver por aí): o programa é escrito em Assembly e depois pode ser transformado num executável por um assembler.
Quando se escreve um programa, na realidade se escreve um texto que contém um roteiro que precisa ser transformado num programa. Esta transformação é feita em duas etapas. Primeiro, o texto precisa ser transformado num novo roteiro que contenha instruções para a CPU. Esta primeira tradução produz os assim chamados arquivos objeto. O programa que produz arquivos objeto é chamado de assembler ou compilador. Os arquivos objeto, por sua vez, servem de fonte para outro tipo de programa: o linker. Os linkers adicionam referências de endereços aos arquivos objeto e os transformam em arquivos executáveis, a versão final do seu programa. Resumindo as etapas, tem-se o seguinte:
Editor de texto = Arquivo Texto (.ASM) ---> Assembler (compilador)= Arquivo Objeto (.OBJ) ---> Linker = Arquivo Executável (.EXE) ou uma DLL
Para criar um programa escrito em Assembly e que rode no ambiente Windows e *nix, essas etapas precisam ser cumpridas.
Então vamos detalhar um pouco pra entendermos o processo.
Observe que são três etapas distintas: elaboração do código fonte, compilação e linkedição.
Os arquivos que contêm o código fonte devem ser gravados em texto ASCII puro, ou seja, não devem conter caracteres especiais de formatação. Podem ser produzidos em qualquer editor de texto que ofereça a possibilidade de salvar arquivos neste formato (geralmente chamado simplesmente de formato texto). Até o bloco de notas do Windows é um bom editor para este trabalho.
É hábito dos programadores indicar a linguagem usada na extensão do arquivo fonte. Por exemplo, .asm para código fonte em Assembly, .c para a linguagem C, .cpp para a C++ ou .pas para Pascal (Delphi). O programa assembler (ou compilador) aceita qualquer extensão, contanto que o código fonte seja o que ele espera.
Um arquivo .asm contém as instruções para o processador na forma de palavras e números. Estas instruções serão executadas pelo processador quando o programa rodar. Acontece que o processador não entende o código fonte: ele precisa ser transformado em "linguagem de máquina" e estar "arrumado" de acordo com um padrão que o sistema operacional consiga identificar. Esta transformação é feita em duas etapas: o compilador prepara o código fonte guardando o código fornecido no formato COFF (Common Object File Format) num arquivo objeto (.obj) e este, por sua vez, é transformado pelo linkeditor num arquivo executável (.exe) no formato PE (Portable Executable).
Um arquivo objeto é criado pelo compilador ou assembler a partir de um arquivo .asm. O compilador pega as instruções do arquivo .asm, que estão em palavras e números, e as transforma no formato objeto COFF, que é o formato que o linker espera. O compilador concatena todo o código e os dados de instrução presentes no código fonte e os coloca em seções de código e de dados no arquivo .obj. A seção de código contém as instruções, os chamados códigos operacionais (opcodes) que o processador executa quando o programa é rodado. A seção de dados contém informações que serão mantidas na memória enquanto o programa estiver sendo executado.
Não é possível rodar um arquivo .obj como um programa, por que não tem a forma final de um executável. O formato de um executável esperado pelo Windows é o formato PE. Algumas vezes o arquivo .obj é chamado de arquivo "binário" ou simplesmente "bin", o que se justifica porque ele não contém mais os mnemônicos, apenas números.
O arquivo executável é o arquivo final que pode ser executado pelo sistema operacional. Geralmente está no formato PE, reconhecido pelo Unix, Linux, Windows, etc. O programa é produzido por um linker, o qual usa um ou mais arquivos .obj e .res e os combina num executável final. O formato PE também exige que o executável tenha um cabeçalho com informações a respeito do arquivo .exe. O linker fornece estas informações.
Em resumo curto e grosseiro: O script é a “receita do programa” é criado num editor de texto simples. O programa assembler pega essa receita e a traduz pra linguagem da CPU (aquele monte de 1 e 0 que todo mundo já conhece). Para o sistema operacional entender esse “binarês” esse tem de ser organizado numa seqüência de execução própria então o programa linker “arruma” o negocio pro sistema operacional entender também.
Fontes:
Apenas usuários registrados e ativados podem ver os links., Clique aqui para se cadastrar...
Curso de Assembly ¦ Aula Nº 01 ¦
Por: Frederico Pissarra
Tutorial de Assembler de Adam Hyde 1.0
University of Guadalajara
Então decidi reuni eu mesmo essas informações num conteúdo só, com o objetivo de facilitar o acesso á essas informações muito preciosas. Ajudando pessoas como eu, que estão se iniciando nesse mundo da programação Assembly a entender o mecanismo de funcionamento dessa linguagem tão poderosa.
Estarei postando constantemente neste fórum conteúdo direcionado à quem é iniciante. Aqueles que puderem contribuir para o enriquecimento de nossos conhecimentos fiquem à vontade para portar observações.
Conto com o apoio de todos, espero que gostem.
Abraços
Então vamos começar:
Antes de tudo, a introdução (Essa parte é meio chata, mas é importantíssima):
O Assembly é uma linguagem de baixo nível por ser uma linguagem próxima daquela que as máquinas entendem. Para usá-la é necessário, além do conhecimento da própria linguagem, conhecimento das características de funcionamento da máquina.
Mas para que eu vou querer aprender uma liguagem desse tipo???
Para agilizar seus trabalhos. Se você tem uma rotina que acaba fritando a CPU de tanto processamento isso será muito útil. Os executáveis criados em Assembly apresentam duas grandes vantagens: velocidade de execução (como ela está próxima do código de máquina, ela é muito veloz) e tamanho reduzido. Além disto, como a linguagem não tem firulas e vai direto ao ponto (ou aos registradores), a execução exige muito menos recursos porque qualquer assembler supera a capacidade dos melhores compiladores de linguagens de alto nível. O software de desempenho crítica é um alvo natural para os programas em assembly puro.
Ele também permite a você falar com a máquina a nível de hardware por se comunicar diretamente com o kernel do seu sistema operacional lhe dando muito maior controle e flexibilidade sobre o PC .
Pra quem se interessar pelo surgimento da linguagem assembly: Apenas usuários registrados e ativados podem ver os links., Clique aqui para se cadastrar...
Assemble vem do Inglês e significa construir, juntar partes; é daí que vem o nome da linguagem de programação, o ASSEMBLY. Assembler significa construtor e é o nome que se dá a programas que "juntam partes", que "constroem" executáveis. É por isto que não é possível escrever um programa em assembler (como se costuma ver por aí): o programa é escrito em Assembly e depois pode ser transformado num executável por um assembler.
Quando se escreve um programa, na realidade se escreve um texto que contém um roteiro que precisa ser transformado num programa. Esta transformação é feita em duas etapas. Primeiro, o texto precisa ser transformado num novo roteiro que contenha instruções para a CPU. Esta primeira tradução produz os assim chamados arquivos objeto. O programa que produz arquivos objeto é chamado de assembler ou compilador. Os arquivos objeto, por sua vez, servem de fonte para outro tipo de programa: o linker. Os linkers adicionam referências de endereços aos arquivos objeto e os transformam em arquivos executáveis, a versão final do seu programa. Resumindo as etapas, tem-se o seguinte:
Editor de texto = Arquivo Texto (.ASM) ---> Assembler (compilador)= Arquivo Objeto (.OBJ) ---> Linker = Arquivo Executável (.EXE) ou uma DLL
Para criar um programa escrito em Assembly e que rode no ambiente Windows e *nix, essas etapas precisam ser cumpridas.
Então vamos detalhar um pouco pra entendermos o processo.
Observe que são três etapas distintas: elaboração do código fonte, compilação e linkedição.
Os arquivos que contêm o código fonte devem ser gravados em texto ASCII puro, ou seja, não devem conter caracteres especiais de formatação. Podem ser produzidos em qualquer editor de texto que ofereça a possibilidade de salvar arquivos neste formato (geralmente chamado simplesmente de formato texto). Até o bloco de notas do Windows é um bom editor para este trabalho.
É hábito dos programadores indicar a linguagem usada na extensão do arquivo fonte. Por exemplo, .asm para código fonte em Assembly, .c para a linguagem C, .cpp para a C++ ou .pas para Pascal (Delphi). O programa assembler (ou compilador) aceita qualquer extensão, contanto que o código fonte seja o que ele espera.
Um arquivo .asm contém as instruções para o processador na forma de palavras e números. Estas instruções serão executadas pelo processador quando o programa rodar. Acontece que o processador não entende o código fonte: ele precisa ser transformado em "linguagem de máquina" e estar "arrumado" de acordo com um padrão que o sistema operacional consiga identificar. Esta transformação é feita em duas etapas: o compilador prepara o código fonte guardando o código fornecido no formato COFF (Common Object File Format) num arquivo objeto (.obj) e este, por sua vez, é transformado pelo linkeditor num arquivo executável (.exe) no formato PE (Portable Executable).
Um arquivo objeto é criado pelo compilador ou assembler a partir de um arquivo .asm. O compilador pega as instruções do arquivo .asm, que estão em palavras e números, e as transforma no formato objeto COFF, que é o formato que o linker espera. O compilador concatena todo o código e os dados de instrução presentes no código fonte e os coloca em seções de código e de dados no arquivo .obj. A seção de código contém as instruções, os chamados códigos operacionais (opcodes) que o processador executa quando o programa é rodado. A seção de dados contém informações que serão mantidas na memória enquanto o programa estiver sendo executado.
Não é possível rodar um arquivo .obj como um programa, por que não tem a forma final de um executável. O formato de um executável esperado pelo Windows é o formato PE. Algumas vezes o arquivo .obj é chamado de arquivo "binário" ou simplesmente "bin", o que se justifica porque ele não contém mais os mnemônicos, apenas números.
O arquivo executável é o arquivo final que pode ser executado pelo sistema operacional. Geralmente está no formato PE, reconhecido pelo Unix, Linux, Windows, etc. O programa é produzido por um linker, o qual usa um ou mais arquivos .obj e .res e os combina num executável final. O formato PE também exige que o executável tenha um cabeçalho com informações a respeito do arquivo .exe. O linker fornece estas informações.
Em resumo curto e grosseiro: O script é a “receita do programa” é criado num editor de texto simples. O programa assembler pega essa receita e a traduz pra linguagem da CPU (aquele monte de 1 e 0 que todo mundo já conhece). Para o sistema operacional entender esse “binarês” esse tem de ser organizado numa seqüência de execução própria então o programa linker “arruma” o negocio pro sistema operacional entender também.
Fontes:
Apenas usuários registrados e ativados podem ver os links., Clique aqui para se cadastrar...
Curso de Assembly ¦ Aula Nº 01 ¦
Por: Frederico Pissarra
Tutorial de Assembler de Adam Hyde 1.0
University of Guadalajara
Comment