would this be a good design of a stack machine?
Note: this was the answer I wanted to post before you edited the question. I hope I interpreted the question rightly. The editing doesn't make it more clear to me, however.  

Do you want the stack in common RAM, or a (limited) separate stack?
If it's RAM-based you need an stack pointer pointing to the last used address or the next free address (both methods are used). Let's say you choose the first free address.
Pushing data on the stack is simply writing to the address pointed to, and decrementing the stack pointer. You can compare the new value with the lowest allowed address and generate a stack overflow interrupt if they're equal.
Popping data is the reverse: increment the stack pointer and read the data at that address. Again, you can compare the address with the highest allowed one, and generate a stack underflow interrupt if the stack pointer is higher. In that case you don't read the data as it will be invalid anyway.
Ideally the address range assigned to the stack would be managed by the OS, and be protected from direct access by applications. Most 8-bit microcontrollers, however, don't have hardware ring protection schemes and so the stack can't be hidden from view by applications.

If you have special stack registers instead of common RAM it's almost the same if you use a small RAM for it, it's just the stack overflow/underflow comparison values will be fixed.
An alternative way would be to use a series of D flip-flops which can be connected either up or down, depending on whether you push or pop. So depending on the direction FF 1 copies the data from FF 0, FF 2 copies from FF 1 etc., or FF 0 copies from FF 1, FF 1 copies from FF 2 etc. The complexity here is linear with the stack size, where it's fixed for the RAM approach.