什么是影响ESP作为副作用的x86指令?

时间:2017-05-23 20:02:24

标签: assembly x86

我知道callret会修改esp的值,而pushpop会有多种变体,但还有其他吗?会影响堆栈指针的指令吗?

2 个答案:

答案 0 :(得分:3)

push(a/ad/f)pop(a/ad/f)指令组正在修改堆栈指针(e)sp。中断调用int也会修改它。指令call会将返回地址推送到堆栈,ret将其删除。另外,以ret NUMBER的形式从堆栈中删除字节数以清除它。

原因是您可以在其他说明中使用(e)sp,例如mov或算术说明,例如addsub。它将在操作码的R / M或REG字段中表示。

答案 1 :(得分:3)

以下说明修改堆栈指针 1

  • enter
  • int n/into/int 3
  • iret/iretd
  • leave
  • pop
  • push
  • ret
  • sysenter
  • sysexit
  • pusha/pushad
  • popa/popad
  • pushf/pushfd/pushfq
  • popf/popfd/popfq
  • vmlaunch/vmresume
  • eexit
  • SP

我告诉你除了主要和副作用之外的负担。

请记住,任何能够生成异常的指令都可能会修改堆栈指针 我没有考虑过这样的说明,以避免轻视你的问题。

这些是我在创建此答案时通过搜索英特尔手册找到的所有说明 虽然我尽力审查手册,但我不会发誓。

1 ESPRSPpage