Since the caller isn't necessarily the enclosing procedure the dynamic link might not point at the enclosing procedure's activation record. What is really needed is a pointer to the enclosing procedure's activation record. Many compilers for block structured languages create such a pointer, the static link. To fully understand how to pass static links from call to call, you must first understand the concept of a lexical level. Lexical levels in Pascal correspond to the static nesting levels of procedures and functions.
Most compiler writers specify lex level zero as the main program.
That is, all symbols you declare in your main program exist at lex level zero. Procedure and function names appearing in your main program define lex level one, no matter how many procedures or functions appear in the main program. They all begin a new copy of lex level one. For each level of nesting, Pascal introduces a new lex level. Before worrying about how to access non-local variables using a static link, you need to figure out how to pass the static link as a parameter.