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 回答