2021/09/16

RSPレジスタに対する勘違い

RSPレジスタとスタックについて勘違いしていた。

スタックが下に伸びていくという話から実際のデータも大きいアドレスから小さいアドレスへと順に入っているとイメージしてしまっていた。
このような状態ではRSPレジスタがスタックトップに入っているデータの先頭を指していると考えると、スタックトップよりも先にスタックトップが示すデータが入ってしまっている。
仮にこのスタックに更にpushした場合、RSPを進めるまえに、現在のスタックトップに入っているデータ分、RSPを進める必要が出てしまい、現在のデータの大きさをどこかに保持していないとだめになってしまう。
この状態でスタックの計算を考えていたため混乱してしまった。

実際にはデータはアドレスの小さいほうから大きいほうに向かって入っている。
この場合RSPが指すスタックトップはデータのある領域とデータのない領域の境目を指すことになる。
変数のデータ領域を確保するために、RSPを減算する時は変数のバイトサイズ分引くだけでよい。

f:id:wat-aro:20210916221321p:plain

低レイヤわからん


© 2022 wat-aro