Para un cuadernillo de preguntas que estoy haciendo me tiene una pregunta sobre los marcos de pila:¿Este marco de pila producido es el correcto?
Considere la siguiente función en Nada (un lenguaje hecho), el lenguaje utilizado en las conferencias:
function f(x,y)
begin
var z
z := y - x;
return z * z;
end;
Tal una función que se podría llamar así:
n := f(a+2,b*3)
el uso de diagramas para ilustrar su respuesta, explique la secuencia de eventos cuando se ejecuta la llamada a la función anterior, mostrando cómo el marco de pila se construye en la entrada a la función y destruida el salir de él, y cómo se utiliza el registro de puntero base al acceder a los parámetros xey, y la variable local z.
he respondido a esta pregunta y este es el marco de pila produje:
sólo quiero a alguien para corregir esto para mí si partes de él son mal ... o producir una nueva marco de pila (si alguien tiene el tiempo). Realmente apreciaré la ayuda.
¿Esto supone que su lenguaje "Nada" está completamente basado en la pila o también está basado en registros? –
@Heandel, no estoy del todo seguro de que piense que son ambas cosas. Nada es un lenguaje de programación inventado que tengo que usar en mi curso. –
No estoy seguro de que pueda responderse sin saber mucho más sobre "Nada" y su implementación. Mi primer momento de inclinación de la cabeza es donde tienes 'a + 2',' b * 3' y 'Z' en el marco de pila nuevo y antiguo. No estoy seguro de por qué es eso. Y es 'b * 3' intencionalmente diferente de' b + 3'? Este es mi propio prejuicio, pero a falta de otra información, me inclinaría a tratar a Nada como una implementación típica de C en este sentido, en cuyo caso no creo que lo que tienes allí sea correcto, aunque tampoco puedo probarlo. sin el código para la función que 'f' se llama _from_. –