A Register is a circuit that holds values of internal operations, e.g: The address of the instruction being executed, as well as the data being processed.

A Stack is a set of registers (or a reserved amount of memory), used to keep track of calculations, or internal operations. They keep track of the sequence routines in a program.