The VM emulator does not initialize the same way as the CPU emulator.
For the FibonacciElement program (and for the remainder of the book), the bootstrap code generated by your VM translator must do a 'call Sys.Init 0' so that there is a stack frame created on the stack. At the entry to Sys.Init the stack should look like this:
256 return address
257 saved LCL (undefined value)
258 saved ARG (undefined value)
259 saved THIS (undefined value)
260 saved THAT (undefined value)
Sys.Init calls Main.fibonacci which returns with its return value pushed on the stack:
261 return value from Main.fibbonacci (3)
and the SP is 262. (Sys.vm for this test is a bit nonstandard in that it does not pop the return value.)
You can look at projects/06/Pong.asm to see code generated by the authors' VM translator that does this.
Note that after you make this change in your bootstrap code, the prior tests no longer pass their tests. I wrote my VM translator to have a command line option to generate the old bootstrap so that I could easily do regression testing.
--Mark