diff --git a/bin/meu_malloc.o b/bin/meu_malloc.o
index 4624a10edc2614cd913e8515fb2c9c669ba68f99..1efa1bd405d3b867004aff8b8761dd9b01b345f9 100644
Binary files a/bin/meu_malloc.o and b/bin/meu_malloc.o differ
diff --git a/lib/libmeu_malloc.a b/lib/libmeu_malloc.a
index c0a3011798857345f00bccd609e9428b9a54909f..7acda28347d161f4c2d02e5220ed1e8c21b86684 100644
Binary files a/lib/libmeu_malloc.a and b/lib/libmeu_malloc.a differ
diff --git a/pseudoc.c b/pseudoc.c
index e7fee05a5d9e86b0a4058af8a51efd06350c697c..3947440a7077a7540edf778f5700e161e3c1308b 100644
--- a/pseudoc.c
+++ b/pseudoc.c
@@ -50,6 +50,8 @@ void aloca_espaco(void tam_alloc)
 
 void* alocaMem(int tam_alloc)
 {
+	
+	//se a heap n esta inicializada
 	if(piso_heap == 0)
 		iniciaAlocador();
 	
@@ -58,7 +60,7 @@ void* alocaMem(int tam_alloc)
 	while (endr <= teto_heap)
 	{
 		//endereco livre		
-		if((endr == LIVRE))
+		if((*endr == LIVRE))
 		{
 			if (8(endr) >= tam_alloc)
 			{			
@@ -72,7 +74,7 @@ void* alocaMem(int tam_alloc)
 			{
 				endr = teto_heap;
 				aloca_espaco(tam_alloc);
-				(endr) = 0;
+				(endr) = OCUPADO;
 				8(endr) = tam_alloc;			
 			}			
 			break;		
@@ -106,7 +108,7 @@ void arruma_heap()
 void liberaMem(*void bloco)
 {
 	//bloco livre	
-	-16(bloco) = 1;
+	-16(bloco) = livre;
 	arruma_heap();	
 
 	return;
diff --git a/src/meu_malloc.s b/src/meu_malloc.s
index 629b69149150d6c5f9b8e55c5e38c77d90063365..e884ab23366e363d923bfd01d42c8f497100ad57 100644
--- a/src/meu_malloc.s
+++ b/src/meu_malloc.s
@@ -5,12 +5,13 @@
 	str2: .string "#"
 	str3: .string "-"
 	str4: .string "*"
-	str5: .string "INICIANDO O ALOCADOR\n"
+	str5: .string "INICIANDO O ALOCADOR!\n"
+	str6: .string "ENTRADA INVALIDA!\n"
 	pula_Linha: .string "\n"
 
-	flag: .string "%d"
+	flag: .string "%d"				#############APAGARRRRRRRR########## 
 	flaag: .string "%d, %d \n"		#############APAGARRRRRRRR########## 
-	oi: .string "oi\n"			#############APAGARRRRRRRR########## 
+	oi: .string "oi\n"				#############APAGARRRRRRRR########## 
 
 .section .bss
 	.equ ALOCADOR, 1040
@@ -36,20 +37,20 @@ iniciaAlocador:
 	movq $0, %rdi			# sbrk(0)
 	movq $12,%rax
 	syscall
-	
+
 	movq %rax, piso_heap	#piso_heap = inicio_heap
 	addq $ALOCADOR, %rax
 	movq %rax, teto_heap	#teto_heap = piso + alocador
-	
+
 	movq %rax, %rdi			#aloca o espaco reservado
 	movq $12, %rax
 	syscall	
 	
 	movq piso_heap, %rax
 	movq $LIVRE, (%rax)		#deixa livre o primeiro slot de memoria
-	movq $ALOCADOR, %r12
-	subq $16, %r12
-	movq %r12, 8(%rax)		#disponibiliza o tamanho do espaco alocado
+	movq $ALOCADOR, %r13
+	subq $16, %r13
+	movq %r13, 8(%rax)		#disponibiliza o tamanho do espaco alocado
 	
 	popq %rbp
 	ret
@@ -90,17 +91,25 @@ aloca_espaco:
 alocaMem:
 	pushq %rbp
 	movq %rsp, %rbp
-	subq $8, %rsp		#aloca espaco para endr	
+	subq $8, %rsp					#aloca espaco para endr	
 	
-	movq %rdi, %r12		#r12 = ponteiro alocado
-	movq piso_heap, %rbx
-	cmpq $0, %rbx
+	movq %rdi, %r12					#r12 = ponteiro alocado
+	cmpq $0, %r12
+	jne fim_pegadinha_if			#quando tam_alloc == 0 return
+		addq $8, %rsp
+		popq %rbp
+		ret
+	fim_pegadinha_if:
+	
+	movq piso_heap, %rax
+	cmpq $0, %rax
 	jne fim_if_aloca_mem	
-		call iniciaAlocador		 
+		call iniciaAlocador
 	fim_if_aloca_mem:
+	movq piso_heap, %rbx
 
 	movq %rbx,-8(%rbp)
-	movq -8(%rbp), %rbx			# endr = -8(rbp)
+	movq -8(%rbp), %rbx				# endr = -8(rbp)
 	while_loop_aloca_mem:
 	cmpq teto_heap, %rbx			#rbx = endr
 	jg fim_while_aloca_mem
@@ -112,7 +121,7 @@ alocaMem:
 				subq %r12, 8(%rbx)				
 				movq 8(%rbx), %r13
 				subq $16, %r12				
-				addq $16, %r13	#endr += 8(endr) + 16
+				addq $16, %r13		#endr += 8(endr) + 16
 				addq %r13, %rbx	
 				movq $OCUPADO, (%rbx)
 				movq %r12, 8(%rbx)				
@@ -136,7 +145,7 @@ alocaMem:
 		jmp while_loop
 	fim_while_aloca_mem:	
 			
-	movq %rbx, %rax		#retorna endr + 16
+	movq %rbx, %rax					#retorna endr + 16
 	addq $16, %rax	
 	
 	addq $8, %rsp
diff --git a/src/teste.c b/src/teste.c
index 7ca01d9abf05a9d3fd608c1bcaddf9ecbf1ec3ef..727642cdc897f6c6da6da1c25acb12e2c5062692 100644
--- a/src/teste.c
+++ b/src/teste.c
@@ -1,46 +1,41 @@
 #include <meu_malloc.h>
 #include <stdio.h>
 
-int main()
-{
-	void *w, *x, *y, *z;
-	
-	iniciaAlocador();
-	print_mapa();
-	printf("\n");
-	w = alocaMem(100);
-	print_mapa();
-	printf("\n");
-	x = alocaMem(200);
-	print_mapa();
-	printf("\n");
-	y = alocaMem(300);
-	print_mapa();
-	printf("\n");	
-	z = alocaMem(400);
-	print_mapa();
-	printf("\n");
-	
-	liberaMem(x);
-	print_mapa();
-	
-	x = alocaMem(50);
-	print_mapa();
-	printf("\n");
-	
-	printf("\n");
-	liberaMem(y);
-	print_mapa();
-	printf("\n");
-	liberaMem(w);
-	print_mapa();
-	printf("\n");
-	liberaMem(x);
-	print_mapa();
-	printf("\n");
-	liberaMem(z);
-	print_mapa();
-	printf("\n");
+int main () {
+	void *a,*b,*c,*d;
+
+	a=( void * ) alocaMem(1000);
+	 print_mapa();
+	printf("1\n");
+	b=( void * ) alocaMem(200);
+	 print_mapa();
+	printf("2\n");
+	c=( void * ) alocaMem(300);
+	 print_mapa();
+	printf("3\n");
+	d=( void * ) alocaMem(400);
+	 print_mapa();
+	printf("4\n");
+	liberaMem(b);
+	 print_mapa();
+	 printf("5\n");
+
+	b=( void * ) alocaMem(50);
+	 print_mapa();
+	 printf("6\n");
+
+	liberaMem(c);
+	 print_mapa();
+	printf("7\n");
+	liberaMem(a);
+	 print_mapa();
+	printf("8\n");
+	liberaMem(b);
+	 print_mapa();
+	printf("9\n");
+	liberaMem(d);
+	 print_mapa();
+	 printf("10\n");
 
 	return (0);
 }
diff --git a/teste b/teste
index a62e04207aa5ce53ce47c638b817124e16b7bbc3..df0132ad4d2865cb6d0e7bde28bb0d15e3072564 100755
Binary files a/teste and b/teste differ