The 128 memory scheme can be confusing at first, but you'll have to get a handle on it before you can really get anywhere with ML. On the 128, nearly every ML program you write should begin by setting the MMU configuration register, which is at $FF00. Here's how this register works:
bits 7-6: ram bank
00 for bank 0 RAM
01 for bank 1 RAM
10 for bank 2 RAM (if you have 256k)
11 for bank 3 RAM (if you have 256k)
bits 5-4: contents of $C000-$FFFF
00 for KERNAL ROM
01 for internal function ROM
10 for external function ROM
11 for RAM
bits 3-2: contents of $8000-BFFF
00 for BASIC HI ROM
01 for internal function ROM
10 for external function ROM
11 for RAM
bit 1: contents of $4000-7FFF
0 for BASIC LO ROM
1 for RAM
bit 0: contents of $D000-DFFF
0 for I/O registers
1 for RAM or character ROM
So, say your program is at $2000; we'll just stick with bank 0 ram, so bits 7-6 of the MMU config will be 00. You want to use a kernal routine, so to enable the kernal, bits 5-4 will be 00. Since we're not using BASIC for anything, let's get rid of it; bits 3-2 will be 11 and bit 1 will be 1, which gives RAM from $4000-BFFF. We're not messing with the character definitions, so let's set bit 0 to 0. So, our MMU configuration will be %00001110 = $0E. Make the first two instructions of your program:
LDA #$0E
STA $FF00
Voila. After those two instructions, the processor "sees" bank 0 RAM from $0000 to $BFFF, the kernal from $C000-FFFF, and hardware registers from $D000-DFFF. There's no iron-clad way to know how the MMU will be setup when you start executing your ML program, so it's best to always set it explicitly. The processor doesn't know or care what's at $FFD2 when you JSR there, it just goes and starts executing what it sees. If the kernal isn't "visible" in the current memory configuration, you'll be JSRing into RAM, and executing whatever values happen to be stored there, with unpredictable (and usually messy) results.