Em programação, começar do começo não é algo comum.
Tendo em vista esses dados sobre a informação da ordem das coisas em um código, vamos falar neste tutorial de Assembly sobre as seções (sections) de um arquivo-fonte em Assembly.
Deixando seu código organizado
Programas feitos na linguagem de baixo nível Assembly tem uma características em comum: eles são grandes.Sim, programar em Assembly é escrever bastante, pois é uma linguagem totalmente crua, onde muito pouco 'existe' e muito, quase tudo, é necessário criar.
Para se fazer um simples programa de cálculos matemáticos simples (somar, subtrair etc) é necessário que fazer uma rotina, manualmente, para essa tarefa, usando somente as instruções nativas do processador.
Em linguagens de alto nível, como C e Java, isso já vem totalmente pronto.
Não é necessário criar nada, somente utilizar.
Então, mais que todas as outras linguagens, é necessário ter organização para programar em Assembly. Seu código deve ser legível, organizado e comentado.
Visando essa organização, existe um comando (ou simplesmente rótulo, ou marcador) chamado section, que serve para definirmos seções em nosso código.
Para declarar uma section fazemos:
section .nomeDaSecao
Como dividir um código Assembly: .data, .bss e .text
De uma maneira geral, os programadores Assembly utilizam três sections para organizar seus códigos. Seguir esses passos é interessante, visto que fará com que seus programas sejam organizados da maneira padrão, da maneira que é universalmente usada.Na .data section, como o nome sugere, é uma região do código que será usada para tratar as informações, os dados, as variáveis.
Nesse trecho (geralmente o inicial), declaramos e inicializamos as variáveis.
Fazemos algo parecido na .bss section, porém não inicializamos as informações.
Por fim, a .text section é o local onde irá ficar armazenado suas instruções, que irão trabalhar com os dados previamente declarados.
Essa é a única seção obrigatória, pois conterá a label (rótulo) _start, que é o local onde os executáveis são inicializados.
Se já estudou C, C++ ou Java, por exemplo, a _start seria o main().
Logo, o esqueleto dos códigos em Assembly é:
section .dat ;declaração e inicialização de dados section .bss ;declaração sem inicialização das informações que serão usadas section .text ;o programa começa a rodar aqui, a partir da _start
Se comunicando com o mundo externo: global
Como as memórias e processadores estão ficando cada vez mais modernos e maiores (em relação ao tamanho da memória), está possível, cada vez mais, usar linguagens de alto nível (principalmente o C), para tarefas que eram feitas exclusivamente em Assembly.Uma prova disso é o sistema operacional Linux, onde sua gigantesca parte é feita em C, com algumas pitadas em Assembly.
Essa pitada de Assembly no Kernel é justamente na parte que é necessária uma maior eficiência da máquina, pois como sabemos, em termos de eficiência nenhuma outra linguagem bate nossa amada linguagem.
Por isso, é bem comum a interação entre Assembly e outras linguagens. Um exemplo disso são os games de alto desempenho, que possuem rotinas feitas em Assembly, que se comunica com o resto do programa.
Ainda em nosso curso de Assembly veremos como usar funções das bibliotecas da linguagem C.
Uma maneira de fazer essa interação é através da diretiva (explicaremos o que é isso em breve) global.
A diretiva global mostra que o label relacionado é global, ou seja, é passível de uso externamente.
Geralmente usamos para declarar o label principal, o _start.
Portanto, o nosso esqueleto de código será:
section .dat ;declaração e inicialização de dados section .bss ;declaração sem inicialização das informações que serão usadas section .text global _start _start: ;o programa começa a rodar aqui, a partir daqui
Nenhum comentário:
Postar um comentário