我对函数声明中的GNU汇编器开始和结束部分感到困惑

问题描述

|| 我最近在Internet上的《 Programming Ground UP》一书中通过Ubuntu上的GNU Assembler学习了x86汇编语言。 创建函数时,总是有两个部分是“必须具备的”: 开始时,考虑保存旧的%ebp并设置新的帧指针   Pushl%ebp      movl%esp,%ebp 最后,它用于还原旧的%ebp并弹出返回地址   move%ebp,%esp      popl%ebp      退回 请帮助我了解实际发生的情况以及所发生的用途。 -为什么他们必须将最底部的堆栈指针复制到%ebp才能设置新的帧指针? -为什么完成后必须将%ebp复制回%esp? -如果复制时不带“ 0”,那只是一个地址吗? 谢谢。     

解决方法

这是一个功能问题。 “频率给定答案”给出了函数伪函数的生成,解释了正在发生的事情,堆栈帧以及帧指针寄存器。     

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...