[2011][Diciembre][Problema 1] Parte b

[2011][Diciembre][Problema 1] Parte b

de Romina Miraballes Olivera -
Número de respuestas: 8
hola,
entendimos que se hacen 6 llamadas recursrivas mediante el arbol, pero no nos queda claro por qué son 8 bytes y no 12 para las llamadas recursivas ( 4 de la llamada inicial, 2 de BP, 2 de AX, 2 de AX correspondientes al parámetro de la llamada recursiva y 2 del IP generado por la misma)
gracias


En respuesta a Romina Miraballes Olivera

Re: diciembre 2011 arquitectura ejercicio 1.b

de Gonzalo Tejera -
Hola. Reitero nuevamente que coloquen el link al maerial que están referenciando. Supongo que en este caso es un examen de Arquitectura 2, este http://www.fing.edu.uy/inco/cursos/arqsis2/examen/SolExArqComp220111223.pdf

No veo que ese ejecicio.

Saludos, Gonzalo
En respuesta a Gonzalo Tejera

Re: diciembre 2011 arquitectura ejercicio 1.b

de Gonzalo Tejera -
(tenés razón estaba murando la vieja. gracias!)

Hola. Estás contando dos veces la llamada. Les recomiendo hacer un dibujo del stack y simular en el papel la ejecución de la función.

Saludos, Gonzalo
En respuesta a Gonzalo Tejera

Re: diciembre 2011 arquitectura ejercicio 1.b

de Romina Miraballes Olivera -
no entendemos, nos se debe considerar que cunado se ingresa al procedimiendo tenemos en el stack n y el IP? Ahi tenemos 4 bytes.
Suamdo los utilizados para guardar el contexto (BP, AX)ahi serian 4 más
Pero antes de llamar, se coloca en el stack el nuevo parametro (2 mas), y en ese momento se genera un nuevo IP que tambien va al stack?
Que esta mal de este razonamiento?
Te dejo el codigo, indicado donde suponemos que se agregan bytes al stack.

LLamada
push n ; 2 bytes
call mcCarthy ; 2 bytes
pop resultado

mcCarthy proc
push BP ; 2 bytesrespaldar registros y ajustar BP para acceder a al stack
mov BP, SP
push AX ;2 bytes

mov AX, [BP+4] ; cargar AX con el parametro n
cmp AX, 100
ja else
add AX, 11 ; calcular n+11
push AX ; 2 bytes coloco el parametro para la llamada
call mcCarthy ; 2 bytes calcular M(n+11) dejando en el
call mcCarthy ; calcular M(M(n+11)
pop AX ; obtener el resultado del stack
jmp fin
else:
sub AX, 10
fin:
mov [BP+4], AX ; colocar resultado en el stack en lugar del parametro de entrada
pop AX ; restaurar registros
pop BP
ret ; retorno
endp

Gracias!
En respuesta a Romina Miraballes Olivera

Re: diciembre 2011 arquitectura ejercicio 1.b

de Usuario eliminado -
Es que asi estas considerando dos veces la llamada, es decir
LLamada
push n ; 2 bytes
call mcCarthy ; 2 bytes
es equivalente al 
push AX ; 2 bytes coloco el parametro para la llamada
call mcCarthy ; 2 bytes calcular M(n+11) dejando en el 
que se hace en la llamada anterior.
Entonces para evitar contar dos veces lo mismo, consideras el consumo de la llamada misma, no el de preparar la función para posteriores llamadas.

CREO que esa es la razón, a ver que dicen los profesores
En respuesta a Usuario eliminado

Re: diciembre 2011 arquitectura ejercicio 1.b

de Romina Miraballes Olivera -
Pero no entiendo, porque en nigun momento se saca algo del stack, entinedo la idea de que es equivalente, porque lo que se hace es una nueva llamada al mismo procedimiento , con los mismos valores en el tope del stack, pero abajo no siguen estando los valores que guarde anteriormente? (n, ip de la primer llamada, y bp , ax). Recien al final de todo es que se sacan cosas del stack.
Agradezco una respuesta por que simpre los hacia asi y no entiendo por que este ejericio es diferente.
Gracias!
En respuesta a Romina Miraballes Olivera

Re: diciembre 2011 arquitectura ejercicio 1.b

de Usuario eliminado -
Siendo un poco mas abstracto, tenes que elegir entre contar el costo de ser llamado, o el costo de llamar al siguiente. Por ejemplo para tres llamadas:
si contamos costo de ser llamado:
ME LLAMARON - ME LLAMARON - ME LLAMARON costo: 3
o costo de llamar:
LLAME - LLAME - LLAME  costo :3

si contas costo de ser llamado y de llamar:

ME LLAMARON ~ LLAME (1) / ME LLAMARON ~ LLAME (2) / ME LLAMARON ~ LLAME 
Asi el costo seria 6, porque en (1) y (2) le estamos dando diferentes nombres al mismo acto, sumando un consumo que no esta de mas, no existe porque ya fue nombrado. Lo mismo para el último llame, que al ser la ultima ejecución no consume.