2-syntax.md
March 18, 2023 · View on GitHub
Aqui iremos aprender sobre alguns elementos dos scripts Assembly
Sobre as diferenças do assembly, temos sintaxes diferentes! Esta tabela resume as principais diferenças das sintaxes Assembly INTEL e AT&T:
| Intel | AT&T | |
|---|---|---|
| Comentários | ; |
// |
| Instruções | add |
addq |
| Registros | eax, ebx, Etc. |
%eax, %ebx, Etc. |
| Imediatos | 0x100 | $ 0x100 |
| Indireto | [eax] |
(%eax) |
| Indireta geral | [base + reg + reg * scale + displacement] |
displacement(reg, reg, scale) |
Nesse curso trataremos da sintaxe Intel e Assembly x86 usando o sistema Linux, alguns codigo podem não funcionar no Windows, caso queira mostrar um codigo que não funciona no Windows, abra uma Issue!
No assembly usamos o ; para criar comentarios no codigo!
Além disso, dividimos nosso codigo em seções, vejamos:
.DATA
Na .data, 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.
OBS: Na .bss section, fazemos algo parecido, porém não inicializamos as informações de imediato.
.TEXT
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, _start é como o main() do C.
Comando global: Usado para declarar labels globais, ou seja, passíveis de uso externo.
Geralmente usamos para declarar o label principal, o _start.
Portanto, o nosso esqueleto de código será:

Lembrando que a identação não é nescessária no compilador NASM.