コンピュータの構成と設計を勉強しています。
プログラムの手続き中にレジスタのデータをスタックポインタにプッシュして、
手続きが終わったら、スタックされていた退避データをスタックからポップして、レジスタの変数に代入し、
プログラムカウンタ(PC)のアドレスから呼び出し元に戻るという理解で大丈夫でしょうか?

また、スタックポインタというのはメモリ上で連続なアドレスでなければいけないのでしょうか?
その場合、スタックポインタには最大で何バイトになるのでしょうか?