プログラムにおいて、スタックは必須の仕組みであり、プロセッサは、メインメモリ上でスタックを利用できるようになっています。
プロセッサのスタックは、スタック用の特殊なアドレスレジスタ(スタックポインタ)を利用して、以下のように実現されています。
プロセッサのスタックにおいて、Pushは、以下の流れで実現されています。
1. データAをPushすると、スタックポインタの値からPushするデータのバイト数を引いたメモリアドレスにデータAが書き込まれる。
2. データAが4バイトであれば、スタックポインタの値から4が引かれる。
3. 続いて、データBをPushすると、スタックポインタの値からPushするデータのバイト数を引いたメモリアドレスにデータBが書き込まれる。
4. データBが2バイトであれば、スタックポインタの値から2が引かれる。
複数バイトのデータの読み書きの仕組みに関しては、「メモリアドレスによる複数バイトのデジタルデータへのアクセス」を参照してください。
プロセッサのスタックにおいて、Popは、以下の流れで実現されています。
1. 上記のPushの流れに従って、4バイトのデータAと2バイトのデータBがPushされているとする。
2. 2バイトを指定してPopすると、スタックポインタが示すメモリアドレスから2バイト分のデータが取り出される。そして、このデータがデータBである。
3. スタックポインタの値に2が加算される。
4. 続いて、4バイトを指定してPopすると、スタックポインタが示すメモリアドレスから4バイト分のデータが取り出される。そして、このデータがデータAである。
5. スタックポインタの値に4が加算される。
複数バイトのデータの読み書きの仕組みに関しては、「メモリアドレスによる複数バイトのデジタルデータへのアクセス」を参照してください。