Aqui trataremos como fazer um Hello World e iremos explicar cada coisa! Em Assembly temos 4 comandos:
- ax, Acumulador para operações numericas
- bx, Acumulador de registro base
- cx, Registro de contas realizado com string
- dx, Registro de dados
Normalmente são acompanhados da letra E que é compativel com computadores 32 e 64 bits, somente no assembly 64 bits podemos usar a letra R, no curso usarei a letra E para ser compatpivel com os dois tipos de sistemas.
O comando mov
é usado para mover valores e normalmente usamos eles pra passar valores para os comandos [eax, ebx, ecx, edx]
, vejamos os seus usos comentados no Hello World abaixo (lembrando que os scripts Assembly tem a extensão .asm então criei o arquivo hello.asm
)
section .data
msg db 'hello world', 0xA, ;Variavel msg que tem a string desejada
len equ $ - msg ;Variavel len que recebera o tamanho da string
section .text
global _start
_start:
mov eax, 4 ;Metodo de escrita(sys_write)
mov ebx, 1 ;Metodo de saida(std_out)
mov ecx, msg ;Mensagem
mov edx, len ;Tamanho
int 0x80 ;Chamando o kernel
mov eax, 1 ;Metodo de saida(sys_exit)
int 0x80 ;Chamando kernel
Quando passamos o método de saída "mov eax, 1", podemos retornar um valor com o "mov ebx," e o valor a ser retornado, isso é equivalente ao "return" do C.
E quando alocamos a variavel msg
, o 0xA é uma quebra de linha que funciona como o famoso \n de várias linguagens e, o db é o tipo de variavel, isso trataremos depois.
Agora temos que compilar o script .asm para poder ser executado!
Linux: Abra no terminal a pasta em que o script está localizado e compile com o NASM: nasm -f elf64 hello hello.asm
, o hello.asm é nosso arquivo Assembly e elf64 é a arquitetura do sistema alvo. Elf64 é usado para sistemas x64 bits e elf32 é usado para sistemas x32 bits. Esse comando irá gera o arquivo hello.o que é o codigo de maquina, o hello.o compilamos pra executavel digitando: ld -s -o hello hello.o
, hello é o arquivo executavel gerado que como sabemos, o linux não precisa de extensão e hello.o é nosso arquivo codigo de maquina gerado pelo nasm. Para executar o arquivo executavel hello no terminal digitamos ./hello
. Caso seu programa seja 32 bits elf32 o ld deve ser informado, que é 32 bits: ld -m elf_i386 -o hello hello.o
Windows: Abra no terminal a pasta em que o script está localizado e digite o comando nasm -f win32 hello.asm -o hello.o
(caso seu processador seja x64, utilize win64 ao invés de win32). Será gerado o arquivo hello.o, que contém o script que criamos, porém, em linguagem de máquina. Para gerar o executavel, basta rodar o comando
ld hello.o -o hello.exe
. Você pode executar seu script dando um duplo clique no arquivo .exe ou via terminal.