这有什么不同?:
movl 4(%esp), %eax # put old ptr into eax
9 popl 0(%eax)
第一个ins。将第一个arg的内容放入%eax
,但是第二个也是如此(堆栈的最高内容),还是间接寻址?这些值在%eax
中不会互相重叠吗?
0(%eax)
是在eax
中存储的地址处的存储位置。 %eax
是eax
的内容。两者不相等。另请注意,x86使用全降序堆栈,因此pop 0(%eax)
等效于
mov (%esp), 0(%eax)
add $4, %esp
即它从(%esp)
而不是4(%esp)
加载,就像您的其他指令一样。 pop
还会更改esp
不执行的mov 4(%esp), %eax
的值。 (还请注意,mov (%esp), 0(%eax)
实际上不是有效的指令,这只是为了说明原理)。