1

HLAでは、アクティベーションレコードに保存されているパラメーターはどの程度正確ですか?

このトピックについてはよく読んだことがありますが、問題は、パラメーターが「4バイト未満」のデータ型のいずれかである場合です。

例えば:

Procedure proc(VAL i:int32; VAL j:int16; VAL k:int16);@nodisplay;

(すべてのパラメーターがVALであることに注意してください)

すべてのパラメーターが(少なくとも)4バイトのブロックを割り当てることはどこにも言及されていないため、kはEBP + 8に、jはEBP + 10に、iはEBP+12にあると予想されます。

しかし、いくつかのstdout.putsによると、そうではありません。(少なくとも私のシステムではありません)kはEBP + 8にあり、jはEBP + 12にあり、iはEBP+16にあります。

パラメータが4バイトのブロックを割り当てることを指摘しているリソースはありますか?それとも私のHLAは誤動作していますか?

4

1 に答える 1

2

ローカル変数とパラメータはスタックに格納され、スタックには32ビットモードで一度に固定32ビットが割り当てられます。パラメータが32ビットよりも小さい場合でも、スタック上で32ビットを占有します。

于 2011-12-11T12:28:50.667 に答える