000h, 004h and 005 to 07FFh are not "stack locations" They are locations for your program.
The actual location of the stack is not "known." The microcontroller has 8 locations called the stack locations.
The micro goes to location 00h when it is turned on, or reset.
Location 07FFh holds the oscillator calibration value.
If you are not using any interrupt features, your program can start at 00h and continue to 07FEh.
If you are using interrupt features, your program can use locations 00h, 001h, 002h, 003h to tell the micro to go to Main. In most cases you only need a single instruction to do this, because you cannot use location 004h as this location needs to be an instruction to go to the Interrupt Service Routine.
Location 004h will contain an instruction to go to (ISR) Interrupt Service Routine - ISR can be located anywhere in your program.
Location 005h can be the start of a table or the beginning of a sub-routine if you are using the interrupt feature.
Locating a table at the top of the program (start at 005h) allows nearly 250 values, as the table cannot pass the 1FFh boundary without a lot of additional clever instructions.
Some of the general purpose registers (files) are in bank0 and some are in the other banks.