Dúvida sobre subrotinas recursivas

7 views
Skip to first unread message

Stefan Teixeira

unread,
Oct 25, 2010, 8:47:54 PM10/25/10
to Comp-Prog
Sobre esse assunto, ficou uma dúvida: antes de chamar novamente a
subrotina, sempre tem que por no topo da pilha o(s) parâmetro(s) da
função?

Por exemplo: nos exercícios da aula (aula 13, slides 4 e 8) no código
em assembly, antes de chamar a subrotina, ele movia pro topo o(s)
argumento(s) atualizados (tipo n-1, etc.)

Só que, na p2 do período passado (http://www.dcc.ufrj.br/~silvana/
2010-1/compprog/gab-prova-2.pdf), na última questão, antes de chamar
de novo a subrotina, ela na resposta só deu push no registrador que
continha o parâmetro atualizado.

Dá na mesma fazer as duas coisas?

Stefan Teixeira

unread,
Oct 25, 2010, 8:51:59 PM10/25/10
to Comp-Prog
Outra dúvida: nessa mesma questão 4 da prova, pq no final ela faz a instrução "movl %ebp, %esp" ?

Stefan Teixeira

unread,
Oct 25, 2010, 8:58:31 PM10/25/10
to Comp-Prog
Putz, outra coisa: nessa questão mesmo, pq não precisava alocar espaço na memória?

Fernando Silva

unread,
Oct 26, 2010, 4:17:47 AM10/26/10
to comp...@googlegroups.com
Desculpe a demora, vamos por partes:

Sim, do jeito que ela fez, carregando o valor para um registrador, subtraindo 1 e empilhando, dá o mesmo resultado.

Ela fez movl %ebp, %esp; para não precisar desempilhar tudo, sendo que ela não tinha mais utilidade para o que estava empilhado, então para não fazer uma série de pops, ela só fez o esp ter o valor que ela queria.

Ela não alocou espaço na memória, simplesmente por não ser necessário para a solução que ela fez.

Douglas Coutinho

unread,
Oct 26, 2010, 7:06:05 AM10/26/10
to comp...@googlegroups.com
eu ainda nao entendi pq q nao precisa alocar espaco na pilha

Fernando Silva

unread,
Oct 26, 2010, 9:13:33 AM10/26/10
to comp...@googlegroups.com
Não foi alocado espaço na pilha, porque a pessoa que escreveu o algoritmo analisou que não seria preciso espaço extra, então ela não se preocupou em reservar espaço.

Quando você não tem certeza se vai ser necessário, é sempre bom deixar um espaço alocado na pilha para o uso.
Reply all
Reply to author
Forward
0 new messages