<< Geant4始めた | top | HACKING:美しき策謀 >>

スポンサーサイト

一定期間更新がないため広告を表示しています

スポンサードリンク | - | | - | - |

ベースポインタ、スタックポインタ

 久々のアセンブリ言語いじり。

関数への引数の引渡しについて復習していてベースポインタ、スタックポインタについて
勘違いしていたことに気がついた。

まず、ベースポインタはスタック領域の底を表していて、基本的にconst。

スタックポインタは次にpushされる領域をあらわすアドレスを指していて、
pushされるとデクリメントされる(スタックはアドレスの小さい側へ積まれていく)。

たぶん最初はスタックポインタとベースポインタの指す値は一致しているんだと思う。

ここらへんのことがちゃんとわかっていなかった。

関数へ引数を渡すにはまず呼び出し元で渡したい値をpushする。

次に関数側でbpを保持しておくためpushする。

bpをspの指すアドレスに一致させる。これでbpからの相対アドレスで引数を使えるようになった。

最後にspをローカル変数用に必要な分だけデクリメントする。

これで絶対安全な領域が出来上がったのでspとbpの間のメモリをローカル変数で利用する。
ジャジャガッチ | アセンブリ言語 | 17:05 | comments(0) | trackbacks(0) |

スポンサーサイト

スポンサードリンク | - | 17:05 | - | - |
Comment









Trackback
URL:

03
--
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
--
>>
<<
--
PR
RECOMMEND
RECENT COMMENT
MOBILE
qrcode
OTHERS
Since 2013/09/17
LATEST ENTRY
CATEGORY
ARCHIVE
LINKS
PROFILE
SEARCH