The stack is a group of memory locations used for temporary storage during program execution. Information is stored and retrieved from the stack using the PUSH and POP instructions in a LIFO manner. Subroutines allow a group of instructions to be called repeatedly from the main program. The CALL instruction stores the return address on the stack and transfers execution to the subroutine. The RET instruction retrieves the return address from the stack and transfers execution back to the main program.