我对我正在上课的以下代码感到困惑:
pushl %ebp
movl %esp, %ebp
subl $24, %esp # Alloc. 24 bytes
movl 8(%ebp), %eax
movl %eax, -4(%ebp)# Set localx to x
假设%ebp当前指向存储器位置100.在存储器位置100中是值200,其是%ebp的旧值。因此,我认为movl %eax, -4(%ebp)
会将%eax的值分配给内存位置196,但是在幻灯片中它被分配给内存位置96.我很困惑为什么会出现这种情况。
答案 0 :(得分:2)
你似乎认为有两个层次的间接,但只有一个层次。也就是说,地址由-4 + %ebp
形成(注意:此处使用 %ebp
的值,而不是它指向的值),%eax
是存储在该地址的内存中。因此,如果%ebp == 100
您最终写入地址100-4,即96。