关于栈

news/2025/3/16 0:00:58/文章来源:https://www.cnblogs.com/r0xy/p/18504333

栈的图

img

一.什么是堆栈平衡(比较抽象)

img

含义就是 当函数在一步步执行的时候 一直到ret执行之前,堆栈栈顶的地址 一定要是call指令的下一个地址。

也就是说函数执行前一直到函数执行结束,函数里面的堆栈是要保持不变的。

如果堆栈变化了,那么,要在ret执行前将堆栈恢复成原来的样子。

第一种情况:push影响堆栈

比如 call ...

函数:mov ... (不影响堆栈平衡)

push..... (影响堆栈平衡)

ret.....

第二种情况:堆栈传递参数

img

......

img

堆栈如下:

img

因为PUSH 1 PUSH 2 是为了函数传参而准备的 ,当函数执行完成后 ,push1,push2 就都没用了,所以要把堆栈恢复到执行前的位置

两种解决办法 :函数外部处理和内部处理

第一种 :在函数外部添加ADD处理

img

第二种:在函数内部添加

img

ret 8 是把 ret 和第一种情况的add 两条指令整合成一条指令,在函数内部完成堆栈平衡

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/822441.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

简单谈谈Google TPUv6

简单谈谈Google TPUv6 根据Google TPU第六代的数据做了一些性能数据的对比,需要注意的是TPUv6当前应该是一个用于训推一体的单Die的版本,用于训练的V6p双Die版本应该会后期再发布. 需要注意的是在国内外都开始卷大模型推理价格的时候, TPU这样的东西对于提高ROI非常有帮助。快…

GNU编译器(GCC)原理简介

GNU编译器(GCC)原理简介GNU编译器(GCC, GNU Compiler Collection)是GNU工具链的关键组件,与GNU、Linux相关项目的标准编译器。它设计之初仅用来处理C语言的(也被称为GNU C编译器),紧接着扩展到C++、Objective-C/C++、Fortran、Java、Go等编程语言。 目前,GCC已经被以知…

22207130-叶盛东-Java大作业总结

Java大作业总结 目录Java大作业总结一.前言第一次作业1.设计与分析第一小题第二小题第三小题第四小题第五小题2.踩坑心得3.改进建议第二次作业1.设计与分析第一小题第二小题第三小题第四小题2.踩坑心得3.改进建议第三次作业1.设计与分析第一小题第二小题第三小题2.踩坑心得3.改…

基于ESP32的桌面小屏幕实战[1]:需求分析与方案选型

项目来源:B站小智学长 1. 需求分析看时间:可联网同步时间;有屏幕 看天气:可联网同步天气;有屏幕 记单词:可联网同步单词;有屏幕 番茄工作时钟:可以手机设置工作、休息时间;有屏幕 获取B站粉丝数: 看室内温湿度:有温湿度传感器;有屏幕 可放入口袋:1-2寸屏幕;带电池…

利用samtools flagstat 对bam文件统计比对率的时候看的是哪个mapping rate

001、 在samtools flagstat 对bam的统计结果中,一共有三个比对率的结果: 002、比对率结果应该以哪个为准? 答案是:以3为准003、以山羊、绵羊的fastq数据,绵羊的参考基因组进行比对测试 a、如果以primary mapped对比,基本看不出两者的差异(其中S是sheep,G是goat) b、…

CPU 计算时延分析

CPU 计算时延 CPU(中央处理器)是计算机的核心组件,其性能对计算机系统的整体性能有着重要影响。CPU 计算时延是指从指令发出到完成整个指令操作所需的时间。理解 CPU 的计算时延对于优化计算性能和设计高效的计算系统至关重要。 1. CPU 计算时延的组成 CPU 计算时延主要由以…

Windows 记录一次磁盘相关的PC卡顿问题

我的电脑最近经常抽疯,时不时卡顿一次 检查系统事件日志,会有这俩个:发出了对设备 \Device\RaidPort0 的重置。 已在磁盘 0 (PDO 名称: \Device\0000003a)的逻辑块地址 0x7206a8 处重试 IO 操作。DiskGenis检查磁盘0,是正常的:这个FASPEED硬盘是国产士必得牌子的。京东商城…

RF/射频器件: CMD246C4 CMD235C4 CMD236C4 CMD254C3 CMD299K4 CMD262 一款5 W GaN MMIC功率放大器芯片

CMD254C3是一款高IP3双平衡混频器,采用无引脚表贴封装,可用于11 GHz至20 GHz的上变频和下变频应用。CMD246C4是一款宽带GaAs MMIC低相位噪声放大器,采用无引脚表贴封装,非常适合军事、航天和通信系统。16 GHz时,该器件提供17 dB的增益,饱和输出功率为+18 dBm,噪声系数为…

记录下使用docker-compose搭建开发环境

目录结构 docker-compose.ymlversion: "3" services:nginx:image: nginx:latestports:- "80:80"volumes:- ./code:/var/www/html- ./nginx/default.conf:/etc/nginx/conf.d/default.confdepends_on:- phpphp:#image: php:8.0-fpm########################…

题目1 - 3 总结

一、前言 在过去的一段时间里,我们完成了三次题目集的挑战。这三次题目集涵盖了丰富的知识点,题量和难度也各有不同。 (一)知识点概述 题目集 1 主要涉及 Java 的面向对象编程基础,包括类的定义、对象的创建和方法的调用。在这个题目集中,我们学会了如何使用类来封装数据…

题目集 1 - 3 总结

一、前言 在过去的一段时间里,我们完成了三次题目集的挑战。这三次题目集涵盖了丰富的知识点,题量和难度也各有不同。 (一)知识点概述 题目集 1 主要涉及 Java 的面向对象编程基础,包括类的定义、对象的创建和方法的调用。在这个题目集中,我们学会了如何使用类来封装数据…

题目集 1 - 3 总结性

一、前言 在过去的一段时间里,我们完成了三次题目集的挑战。这三次题目集涵盖了丰富的知识点,题量和难度也各有不同。 (一)知识点概述 题目集 1 主要涉及 Java 的面向对象编程基础,包括类的定义、对象的创建和方法的调用。在这个题目集中,我们学会了如何使用类来封装数据…