人生で一番思い出に残ってる靴

アセンブリ言語で0x4(%esp)の意味はアクセス先はespレジスタの値に+4したアドレスのメモリ上の値とのことですが、
例えば、espレジスタ(スタック)にもともと7つの命令が入っていた場合、 0x4(%esp)は
espレジスタは7+4で11となり、この11はアドレスを表していき、このアドレス11に値を入れるということでしょうか?
だとしたらこのような計算になるような構造にした理由というか、メリットはあるのでしょうか?

A 回答 (3件)

「例えば」が意味不明ですが、おっしゃる通り、espレジスタの指す番地の4番地先をアクセスするという意味です。


メリットは、このプログラムをespレジスタの値が違う状態で実行した場合、毎回違う番地のデータにアクセスできるということです。
例:「2倍の値を返す」というサブルーチン twice() を作ったときに、元の数を0x4(%esp)に入れてサブルーチンを呼び出すことにすれば、
twice(10), twice(13),twice(16)などいろんなところから呼ばれても、呼ばれた時のespレジスタの指す番地の4番地先を見て計算すれば、割り込みなどで計算途中で別の処理が起動しても問題なくプログラムが実行できます。

逆に、固定したアドレスで計算すると・・・
例えば、
 twice(10)を計算途中に割り込みで、別のプログラムからtwice(13)が実行された
とすると、計算結果はどうなるか想像してみてください。
    • good
    • 0

ちょっと言葉が不足していたので #1 に補足するけど, 「それ以外」の「それ」は「0x4(%esp)の意味はアクセス先はespレジスタの値に+4したアドレス」のことね. esp の値が 7 だったとしても, 「0x4(%esp)」によって「espレジスタ」が「7+4で11」に変わるわけじゃないからね.



厳密にいうと「そのアドレスがさすメモリ」とも限らん (命令による) し.
    • good
    • 0

「espレジスタ(スタック)にもともと7つの命令が入っていた」の意味はまったくわからんが, 逆に考えてそれ以外のどのような方法があ

るんでしょうか? そしてそのメリットはなに?
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!


おすすめ情報