reg的值与reg的地址之间的距离

问题描述 投票:0回答:1

这有什么不同?:

movl 4(%esp), %eax # put old ptr into eax
9 popl 0(%eax)

第一个ins。将第一个arg的内容放入%eax,但是第二个也是如此(堆栈的最高内容),还是间接寻址?这些值在%eax中不会互相重叠吗?

assembly gas
1个回答
0
投票

0(%eax)是在eax中存储的地址处的存储位置。 %eaxeax的内容。两者不相等。另请注意,x86使用全降序堆栈,因此pop 0(%eax)等效于

mov (%esp), 0(%eax)
add $4, %esp

即它从(%esp)而不是4(%esp)加载,就像您的其他指令一样。 pop还会更改esp不执行的mov 4(%esp), %eax的值。 (还请注意,mov (%esp), 0(%eax)实际上不是有效的指令,这只是为了说明原理)。

© www.soinside.com 2019 - 2024. All rights reserved.