Skip to content
Snippets Groups Projects
Commit f921af27 authored by PEDRO MARTINS E SA's avatar PEDRO MARTINS E SA
Browse files

inicial

parent 71004a2f
Branches
No related tags found
No related merge requests found
No preview for this file type
...@@ -9,9 +9,9 @@ void aloca_espaco(int tam_alloc); ...@@ -9,9 +9,9 @@ void aloca_espaco(int tam_alloc);
void* alocaMem(int tam_alloc); void* alocaMem(int tam_alloc);
//void arruma_heap(); void arruma_heap();
//void liberaMem(void* bloco); void liberaMem(void* bloco);
void print_mapa(); void print_mapa();
......
No preview for this file type
...@@ -70,13 +70,11 @@ void* alocaMem(int tam_alloc) ...@@ -70,13 +70,11 @@ void* alocaMem(int tam_alloc)
} }
else else
{ {
if (endr == teto_heap) endr = teto_heap;
{
aloca_espaco(tam_alloc); aloca_espaco(tam_alloc);
(endr) = 0; (endr) = 0;
8(endr) = tam_alloc; 8(endr) = tam_alloc;
} }
}
break; break;
} }
//endereco ocupado //endereco ocupado
...@@ -86,23 +84,15 @@ void* alocaMem(int tam_alloc) ...@@ -86,23 +84,15 @@ void* alocaMem(int tam_alloc)
return (endr + 16); return (endr + 16);
} }
cmpq $LIVRE, %rbx
jne fim_if_aloca_mem
void arruma_heap() void arruma_heap()
{ {
if (piso_heap == 1) void *endr_ant, endr;
return;
endr_ant = piso_heap; endr_ant = piso_heap;
endr = piso_heap + 8(endr_ant) + 16; endr = piso_heap + 8(endr_ant) + 16;
while (endr < teto_heap) while (endr < teto_heap)
{ {
if ((endr == 1) && (endr_ant == 1)) if ((endr == 1) && ((endr_ant) == 1))
8(endr_ant) += 8(endr) + 16; 8(endr_ant) += 8(endr) + 16;
else else
endr_ant = endr; endr_ant = endr;
......
...@@ -8,7 +8,8 @@ ...@@ -8,7 +8,8 @@
str5: .string "INICIANDO O ALOCADOR\n" str5: .string "INICIANDO O ALOCADOR\n"
pula_Linha: .string "\n" pula_Linha: .string "\n"
flag: .string "%d\n" #############APAGARRRRRRRR########## flag: .string "%d"
flaag: .string "%d, %d \n" #############APAGARRRRRRRR##########
oi: .string "oi\n" #############APAGARRRRRRRR########## oi: .string "oi\n" #############APAGARRRRRRRR##########
.section .bss .section .bss
...@@ -75,7 +76,13 @@ finalizaAlocador: ...@@ -75,7 +76,13 @@ finalizaAlocador:
aloca_espaco: aloca_espaco:
pushq %rbp pushq %rbp
movq %rsp, %rbp movq %rsp, %rbp
#traducao nao feita
movq %rdi, %rax
addq $16, %rax
addq %rax, teto_heap
movq teto_heap, %rdi
movq $12, %rax
syscall
popq %rbp popq %rbp
ret ret
...@@ -86,11 +93,6 @@ alocaMem: ...@@ -86,11 +93,6 @@ alocaMem:
subq $8, %rsp #aloca espaco para endr subq $8, %rsp #aloca espaco para endr
movq %rdi, %r12 #r12 = ponteiro alocado movq %rdi, %r12 #r12 = ponteiro alocado
#movq $flag, %rdi
#movq %r12, %rsi
#call printf
movq piso_heap, %rbx movq piso_heap, %rbx
cmpq $0, %rbx cmpq $0, %rbx
jne fim_if_aloca_mem jne fim_if_aloca_mem
...@@ -108,21 +110,21 @@ alocaMem: ...@@ -108,21 +110,21 @@ alocaMem:
jl else_if_aloca_mem2 jl else_if_aloca_mem2
addq $16, %r12 #8(endr) -= tam_alloc + 16 addq $16, %r12 #8(endr) -= tam_alloc + 16
subq %r12, 8(%rbx) subq %r12, 8(%rbx)
movq 8(%rbx), %r13
addq $16, 8(%rbx) #endr += 8(endr) + 16 subq $16, %r12
addq 8(%rbx), %rbx addq $16, %r13 #endr += 8(endr) + 16
addq %r13, %rbx
movq $OCUPADO, (%rbx) movq $OCUPADO, (%rbx)
movq %r12, 8(%rbx) movq %r12, 8(%rbx)
jmp fim_if_aloca_mem2 jmp fim_if_aloca_mem2
else_if_aloca_mem2: else_if_aloca_mem2:
cmpq teto_heap, %rbx movq teto_heap,%rbx
jne fim_if_aloca_mem2 movq %r12, %r15
pushq %r12 pushq %r12
call aloca_espaco call aloca_espaco
popq %r12
movq $OCUPADO,(%rbx) movq $OCUPADO,(%rbx)
movq %r12, 8(%rbx) movq %r15, 8(%rbx)
jmp fim_if_aloca_mem2 jmp fim_if_aloca_mem2
fim_if_aloca_mem2: fim_if_aloca_mem2:
jmp fim_while_aloca_mem jmp fim_while_aloca_mem
...@@ -144,14 +146,59 @@ alocaMem: ...@@ -144,14 +146,59 @@ alocaMem:
arruma_heap: arruma_heap:
pushq %rbp pushq %rbp
movq %rsp, %rbp movq %rsp, %rbp
#traducao nao feita subq $16, %rsp
movq piso_heap, %r10
movq %r10, -8(%rbp) #endr_ant = piso_heap
movq -8(%rbp), %rax
movq piso_heap, %rbx
addq $16, %rbx
addq 8(%rax), %rbx
movq %rbx, -16(%rbp) #endr = piso_heap + tam_piso + 16
while_arruma_heap:
cmpq teto_heap, %rbx
jge fim_while_arruma_heap
cmpq $1, (%rbx)
jne else_if_arruma_heap
cmpq $1, (%rax)
jne else_if_arruma_heap
movq 8(%rbx), %r10
addq %r10, 8(%rax)
addq $16, 8(%rax)
jmp fim_if_arruma_heap
else_if_arruma_heap:
movq %rbx, %rax
jmp fim_if_arruma_heap
fim_if_arruma_heap:
movq 8(%rbx), %r13
addq $16, %r13
addq %r13, %rbx
jmp while_arruma_heap
fim_while_arruma_heap:
#movq $flaag, %rdi
#movq (%rax), %rsi
#movq (%rbx), %rdx
#call printf
addq $16, %rsp
popq %rbp popq %rbp
ret ret
#---------------------------------------------------------------------# #---------------------------------------------------------------------#
liberaMem: liberaMem:
pushq %rbp pushq %rbp
movq %rsp, %rbp movq %rsp, %rbp
#traducao nao feita
movq %rdi, %rbx
movq $LIVRE, -16(%rbx)
call arruma_heap
popq %rbp popq %rbp
ret ret
#---------------------------------------------------------------------# #---------------------------------------------------------------------#
...@@ -184,9 +231,10 @@ print_mapa: ...@@ -184,9 +231,10 @@ print_mapa:
addq $1, %r12 addq $1, %r12
jmp for_cabecalho jmp for_cabecalho
fim_for_cabecalho: fim_for_cabecalho:
#movq flag,%rdi
#movq 8(%rbx),%rsi movq $flag,%rdi
#call printf movq 8(%rbx),%rsi
call printf
cmpq $LIVRE, (%rbx) cmpq $LIVRE, (%rbx)
jne else_if_while jne else_if_while
...@@ -216,8 +264,10 @@ print_mapa: ...@@ -216,8 +264,10 @@ print_mapa:
jmp fim_if_while jmp fim_if_while
fim_if_while: fim_if_while:
addq $16, 8(%rbx) movq 8(%rbx), %r13
addq 8(%rbx), %rbx addq $16, %r13
addq %r13, %rbx
jmp while_loop jmp while_loop
fim_while_loop: fim_while_loop:
......
#include <meu_malloc.h> #include <meu_malloc.h>
#include <stdio.h>
int main() int main()
{ {
void* x; void *w, *x, *y, *z;
iniciaAlocador(); iniciaAlocador();
x = alocaMem(1024);
print_mapa(); print_mapa();
finalizaAlocador(); 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");
return (0); return (0);
} }
teste 0 → 100755
File added
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment