nandona wrote
How can I jump to a row in the rom that is located in the value of the
stack though?
Simple, you get the value located in RAM (which is where the stack lives) into the A register and then perform an unconditional jump.
For the sake of argument, let's assume that the return address is located at the RAM location pointed to by the stack pointer (i.e., stored in RAM[0]). Then all you would need to do is
@ SP // Set A to address of stack pointer
A = M // load the stack pointer value into A (i.e., the address in RAM pointed to)
A = M // load the value stored at the RAM cell pointed to by the stack pointer into A
0; JMP // perform an unconditional jump to the ROM address currently stored in A
The actual location of the return address is fixed relative to the current stack frame's ARG pointer, so the current function knows where to find it.
The calling function is responsible for placing the return address onto the stack, which it does by using the value of a label located just before the point in the code where execution should continue.