STACK
スタックの練習ステージ。雑に作ったらうまく動かなくて、挙動を整理してやっとそれっぽく動くのが完成。
スタックポインタの値は「スタックの一番上の値のアドレス」を指すべきか、「スタックの一番上の空の部分のアドレス」を指すべきか...。
→ 「スタックの一番上の値のアドレス」にした。なので、スタックに積む前のスタックポインタの値はスタックの範囲外にした
https://gyazo.com/8a3a191584913c6d9be7acf6cfabfc95
スタックの挙動の整理
SPレジスタ
スタックの一番上の値のアドレス
PUSH
RAM_Address = SP + 1
RAM_Save = 1
RAM_Load = 0
RAM_Save value = value
SP_Next = SP + 1
POP
RAM_Address = SP
RAM_Save = 0
RAM_Load = 1
RAM_Save value = (何でもいい)
SP_Next = SP - 1