- ベストアンサー
スタックポインタ取得 アセンブラ
unsigned long sp(void) { __asm__("movl %esp,%eax"); } int main() { printf("0x%x\n", sp()); return 0; } このプログラムはスタックポインタのアドレスを表示することができるそうなのですが、何故なのか分からないので理由を教えていただきたいです。よろしくお願いします。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
>__asm__("movl %esp,%eax"); 意図的には、ここでスタックポインタを戻り値として帰るようにしてるからですけど ただ、これでスタックポインタの値が得られているのはたまたま(場合によってはそうならないかもしれないという意味)。 また、それで得られるのは関数sp()でのスタックポインタの値です。
その他の回答 (1)
- Tacosan
- ベストアンサー率23% (3656/15482)
回答No.2
厳密には「あなたの使った処理系がそういうものだから」としか言いようがない. 細かい話は ABI で調べるといいかも.
質問者
お礼
ABIですね。ありがとうございました。
お礼
お礼遅くなりすいません; ありがとうございました。