Neste tópico irei abordar alguns conceitos básicos da linguagem Assembly utilizada pelo compilador NASM. Expliquei como compilar programas assembly no ubuntu neste post.
section .data ;dados inicializados e constantes
msg db 'Ola mundo!', 0xa ;string
len equ $ - msg ;tamanho da string
Vantagens da linguagem Assembly
- Interfaceia os programas diretamente com o hardware, sistema operacional e BIOS.
- O fato da linguagem ser de baixo nível, permite que programa rode geralmente mais rápido e consumindo menos memória.
- Devido sua facilidade em acessar hardware, é uma boa alternativa na hora de construir drivers e afins.
Desvantagens da linguagem Assembly
- Em muitos casos é pouco produtiva em termos de tempo.
- Pode exigir bem mais conhecimentos do que uma linguagem de nivel alto.
- Em muitas situações, especialmente em processadores de arquitetura RISC (acrônimo de Reduced Instruction Set Computer; em português, "Computador com um conjunto reduzido de instruções") você terá de construir as rotinas manualmente.
Endereçando dados na memória em assembly
O processo de execução ou ciclo de execução se divide em três partes principais: buscar , decodificar e executar as instruções.
Em determinados grupos de dados o processador terá que "quebrar" a informação que está no registrador para armazenar na memória.
Por exemplo, um valor 1012h poderá ser dividido em dois grupos de 1 byte, o primeiro armazenando 10h e o segundo com 12h.
Os dados são armazenados na memória de forma reversa, ou seja, na posição da memória "x" será armazenado o valor 12h já na posição x+1, o valor 10h. Quando retirado da memória para os registradores, ocorre novamente uma troca pelo qual ele volta a ficar na posição original.
Existem dois tipos de enderaçamento de memoria: endereçamento por valor"absoluto" e por "segmentação". No endereçamento direto ou absoluto, faz-se referenciamento ao endereço diretamente; já no endereçamento por segmentação é usado um sistema de offset, no qual é usado um endereço inicial mais um valor chamado "offset".
Em determinados grupos de dados o processador terá que "quebrar" a informação que está no registrador para armazenar na memória.
Por exemplo, um valor 1012h poderá ser dividido em dois grupos de 1 byte, o primeiro armazenando 10h e o segundo com 12h.
Os dados são armazenados na memória de forma reversa, ou seja, na posição da memória "x" será armazenado o valor 12h já na posição x+1, o valor 10h. Quando retirado da memória para os registradores, ocorre novamente uma troca pelo qual ele volta a ficar na posição original.
Existem dois tipos de enderaçamento de memoria: endereçamento por valor"absoluto" e por "segmentação". No endereçamento direto ou absoluto, faz-se referenciamento ao endereço diretamente; já no endereçamento por segmentação é usado um sistema de offset, no qual é usado um endereço inicial mais um valor chamado "offset".
Sintaxe básica de um programa assembly
Um programa em assembly é comumente dividido em trẽs seções:
- section .data - seção utilizada para guardar constantes e dados inicializados (aqueles que já são declarados junto com a sua inicialização).
- section .bss - seção que guarda as variáveis de seu programa.
- section .text - este é o local que irá armazenar as instruções , ou seja, o código. Esta seção deve conter o ponto de entrada do sistema que é representada pela declaração global main.
section .text ;seção onde o código é escrito
global main
main: ;ponto de entrada do linker
mov edx,len
mov ecx,msg
mov ebx,1
mov eax,4
int 0x80
global main
main: ;ponto de entrada do linker
mov edx,len
mov ecx,msg
mov ebx,1
mov eax,4
int 0x80
mov eax,1
int 0x80
int 0x80
section .data ;dados inicializados e constantes
msg db 'Ola mundo!', 0xa ;string
len equ $ - msg ;tamanho da string
section .bss
Comentários
São representados pelo ";" seguidos do comentário.
Exemplo:
add ah,bh ;isto é um comentário
Declarações da linguagem Assembly
São basicamente três tipos de delclarações: instruções, diretivas e macros.- Instruções são códigos voltados à máquina, o que gera a execução de uma ação e dizem efetivamente o que o processador deve fazer. Essas instruções geram um código de máquina.
- Diretivas são voltadas ao compilador e não a máquina. Dizem ao compilador (assembler) como será o processo de assemblagem (compilação).
- Macros funcionam como simples substituição de texto.
A partir de
agora iremos fazer nossos primeiros programas nessa maravilhosa
linguagem. Para isso recomendo instalar o SASM, que é uma IDE que
utilizo para construir meus programas e é bem compativel com o NASM.
Neste post aprendemos a montar o esqueleto básico em assembly. No próximo, começarei a explicar os tópicos principais desta linguagem.
Neste post aprendemos a montar o esqueleto básico em assembly. No próximo, começarei a explicar os tópicos principais desta linguagem.
Nenhum comentário:
Postar um comentário