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

def final

parent 8b8e89dc
No related branches found
No related tags found
No related merge requests found
File added
File added
......@@ -7,6 +7,7 @@ short int livre = 1
short int ocupado = 0
void* piso_heap = 0
void* teto_heap = 0;
//variavel local
int alocador = 1040
void* endr;
......@@ -15,11 +16,11 @@ void iniciaAlocador()
{
endr = sbrk(0) //endr na posicao corrente da heap
piso_heap = endr;
endr += alocador; //soma 1024 a posicao de endr
endr += alocador; //soma 1040 a posicao de endr
teto_heap = endr;
brk(endr); //aloca endr.
endr = piso_heap;
(endr) = 1;
*endr = 1;
8(endr) = alocador - 16;
return;
......@@ -42,13 +43,13 @@ void finalizaAlocador()
void aloca_espaco(void tam_alloc)
{
teto_heap += tam_alloc;
teto_heap += tam_alloc+16;
brk(teto_heap);
return;
}
void* alocaMem(int tam_alloc)
void* meuMalloc(int tam_alloc)
{
//se a heap n esta inicializada
......@@ -62,12 +63,14 @@ void* alocaMem(int tam_alloc)
//endereco livre
if((*endr == LIVRE))
{
//verifica se tem espaco
if (8(endr) >= tam_alloc)
{
//8(endr) = valor contido dentro desse espaço de memoria
8(endr) -= tam_alloc + 16;
endr += 8(endr) + 16;
(endr) = 0;
tam_atual = 8(endr)
endr += 16 + tam_atual;
(endr) = OCUPADO;
8(endr) = tam_alloc;
}
else
......@@ -88,7 +91,7 @@ void* alocaMem(int tam_alloc)
void arruma_heap()
{
void *endr_ant, endr;
void *endr_ant, *endr;
endr_ant = piso_heap;
endr = piso_heap + 8(endr_ant) + 16;
......@@ -105,7 +108,7 @@ void arruma_heap()
return;
}
void liberaMem(*void bloco)
void meuFree(*void bloco)
{
//bloco livre
-16(bloco) = livre;
......
......@@ -7,7 +7,12 @@
str4: .string "*"
str5: .string "INICIANDO O ALOCADOR!\n"
str6: .string "ENTRADA INVALIDA!\n"
pula_Linha: .string "\n"#
pula_Linha: .string "\n"
####APAGAR ESSA PORRA#######
flag: .string "%d"
oi: .string "OIIIIIIIIIIIIIIIIIIIIIII\n\n\n"
.section .bss
.equ ALOCADOR, 1040
......@@ -110,13 +115,17 @@ meuMalloc:
movq %rbx,-8(%rbp)
movq -8(%rbp), %rbx # endr = -8(rbp)
movq %r12, %r11
addq $16, %r11
while_loop_aloca_mem:
cmpq teto_heap, %rbx #rbx = endr
jg fim_while_aloca_mem
cmpq $LIVRE, (%rbx)
jne fim_if_while_aloca_mem
cmpq %r12, 8(%rbx)
jl else_if_aloca_mem2
cmpq %r11, 8(%rbx)
jle else_if_aloca_mem2
addq $16, %r12 #8(endr) -= tam_alloc + 16
subq %r12, 8(%rbx)
movq 8(%rbx), %r13
......@@ -134,6 +143,11 @@ meuMalloc:
popq %r12
movq $OCUPADO,(%rbx)
movq %r15, 8(%rbx)
movq %rbx, %rcx
addq %r12, %rcx
addq $16, %rcx
movq %rcx, teto_heap
jmp fim_if_aloca_mem2
fim_if_aloca_mem2:
jmp fim_while_aloca_mem
......@@ -214,6 +228,7 @@ imprimeMapa:
subq $16, %rsp #coloca i na pilha
movq piso_heap, %rbx
movq teto_heap, %r11
cmpq $0, %rbx
jne fim_if_mapa
movq $str1, %rdi
......@@ -238,6 +253,10 @@ imprimeMapa:
jmp for_cabecalho
fim_for_cabecalho:
movq $flag, %rdi
movq 8(%rbx), %rsi
call printf
cmpq $LIVRE, (%rbx)
jne else_if_while
movq $0, -8(%rbp) #i = 0
......
......@@ -5,10 +5,13 @@ int main () {
void *a,*b,*c,*d,*e;
a = meuMalloc(100);
//iniciaAlocador();
//imprimeMapa();
a = meuMalloc(1008);
imprimeMapa();
printf("\n");
b = meuMalloc(500);
b = meuMalloc(10);
imprimeMapa();
printf("\n");
c = meuMalloc(200);
......
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