Dicas de linux



Dicas de linux

Programa exemplo em Assembler para Linux

Dica enviado por albert guedes

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 $@ $<

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. : )


www.dicasdelinux.com.br - Dicas de Linux para te ajudar no Dia-dia "Seja livre! Acesse dicas de linux."