Programa exemplo em Assembler para Linux
Dica publicada em Linux / Introdução
Programa exemplo em Assembler para Linux
Este é um programa em assembler para Linux que deve ser compilado com o nasm. Ele está comentado para que se possa entender um pouco como a coisa funciona.
section .data
; 'MSG1' guarda a mensagem.
MSG1: db "Eu vou ler e escrever o que você digitar."
db " Você já pode digitar:"
; 'TAM1' guarda o tamanho de 'MSG1'
TAM1: equ $ - MSG1
section .text ; Seção do texto.
global _start ; Declaração do inicio do programa.
_start: ; Inicio do programa.
; Primeiro argumento.
mov eax, 4 ; Guarda o valor 4 em eax que é o número
; de chamada do sistema para escrever no
; output dado por ebx.
; Segundo argumento.
mov ebx, 1 ; Guarda o número do output, que neste
; caso é 1, o monitor.
; Terceiro argumento.
mov ecx, MSG1 ; Aqui é armazenado em ecx a
; mensagem 'MSG1'
; Quarto argumento.
mov edx, TAM1 ; edx recebe o tamanho da mensagem
; 'MSG1'
; Chamada do sistema.
int 0x80 ; Chama o sistema para executar a função
; que está em eax, ou seja, a função 4,
; imprime a mensagem que está no endereço
; armazenado em ecx através da saída que
; está em ebx, a saída 1, o monitor.
; Para a utilização de mais que cinco argumentos utilizamos a
; pilha, ou stack, para conseguirmos mais argumentos.
mov ecx, esp ; Armazena em ecx a primeira posição
; do stack esp.
sub esp, 11 ; Subtrai 11 da posição do
; stack para reservar 11 bytes nele.
; Primeiro argumento.
mov eax, 3 ; Armazena em eax o número da chamada
; do sistema, 3 significa leitura.
; Segundo argumento.
mov edx, 10 ; edx recebe o valor 10 (0ax em hex) que
; que é o tamanho da string que vai ser
; lido do input.
int 0x80 ; Chamada do sistema.
mov edx, eax
mov eax, 4 ; Pedido de escrita.
mov ebx, 1 ; Output, isto é, o monitor.
int 0x80 ; Chama o sistema para imprimir.
mov eax, 1 ; Saída do sistema.
mov ebx, 0 ; Verifica se está tudo ok.
int 0x80 ; Chamada do sistema para imprimir.
Copie e cole este programa num arquivo "<nome qualquer>.asm".
Agora, crie um makefile "Makefile" com as seguintes linhas:
<nome qualquer> : <nome qualquer>.o
ld -s -o <nome qualquer> <nome qualquer>.o
%.o: %.asm
nasm -E <nome qualquer>.err -f elf -l <nome qualquer>.lst -o $@ $<
ld -s -o <nome qualquer> <nome qualquer>.o
%.o: %.asm
nasm -E <nome qualquer>.err -f elf -l <nome qualquer>.lst -o $@ $<
onde '<nome qualquer>.err' é a saída de erro da compilação e '<nome qualquer>.lst' é a saída do programa em código de máquina, com o respectivo comando em linguagem 'humana', que é legal para ver como funciona a coisa.
Feito o "Makefile", dê o bendito comando "make" e você terá o seu executável de nome "<nome qualquer>".
Após a felicidade de ter conseguido fazer seu primeiro programa em assembler, você já pode espalhar para seus amigos que você é um programador de assembler profissional.
Divirtam-se. : )
Obs: Seria legal se vc publicasse um artigo mais detalhado sobre a linguagem, ajudaria muita gente.
Flws.