堆栈 pop push
1.什么是堆栈
1.1堆栈
堆栈可以看作程序的心脏 所有重要的数据都会在这个里面体现(比如运算一道算术题,虽然还没算出最终答案,但是你在算出最终结果前的一些过程值可以放进堆栈)
堆栈这块内存比较特殊,他是由大地址往小地址用

1.2栈指针寄存器ESP
假设现在程序的堆栈用到0018FF8C
当我们想使用一个程序停止之后的堆栈空间,
可以使用指令:mov dword ptr ds:[18FF88] ,1
mov dword ptr ds:[18FF84] ,2
但是 因为程序可能接着会执行,所以你得告诉程序,堆栈使用到哪个地方了
所以sub esp,8(栈指针寄存器-8)(相当于完成需要一个mov 一个sub)
如果现在不想用了 ,那么直接add esp,8
之后程序会直接覆盖
2.push指令
这个指令好哇,功能如下

指令格式:

于是 我们正常使用堆栈的时候要 写入数据,然后修改ESP(记录栈顶)
但是现在push一条指令直接搞定 直接push 3 就行
可以push 立即数 也可以push寄存器比如push EAX(把EAX的值写到堆栈中并且更新栈顶(ESP))
还可以push内存,把指定内存的值存入堆栈并且更新栈顶(ESP)。
例子:
假如现在ECX的值为
但是现在 我只想执行十次,那他原来的值,就可以push ECX(这样就把ECX的值放到了堆栈中)
然后再对ECX存入值,mov ecx,10.
如果想把存在堆栈中 的00000111再拿回ECX
可以mov ECX,dword ptr ds:[堆栈内存编号]
mov ECX,dword ptr ds:[esp]
最后记得给ESP+4,返回之前的堆栈栈顶位置
3.pop指令(把栈顶的值拿出来存到指定的寄存器中)
相当于 一个mov 一个add

总结:堆栈就是一块特殊的内存 而pop和push 就是释放和使用这块内存的指令
学习指令的时候要不要流于形式,要把指令的本质,它做的什么事情搞清楚!
堆栈 pop push的更多相关文章
- 小tip:关于typeof,instanceof,toString(),valueOf(),toLocaleString(),join(),reverse(),sort(),pop(),push(),shift(),unshift()
typeof:用于检测一个变量是否是基本数据类型.instanceof用于检测某引用对象是什么类型的对象. var s = "Nicho"; var b = true; var n ...
- js 数组的pop(),push(),shift(),unshift()方法小结
关于数组的一些操作方法小结: pop(),push(),shift(),unshift()四个方法都可改变数组的内容以及长度: 1.pop() :删除数组的最后一个元素,并返回被删除的这个元素的值: ...
- JS pop push unshift shift的作用与区别
白话JS中数组方法pop push unshift shift的作用与区别,通过本文,你大概能知道这四种数组方法的基本使用与大致区别. 首先,这四种方法会直接修改数组,请先记住这一点. 我们先把pop ...
- queue for max elem, pop, push
queue for max elem, pop, push 个人信息:就读于燕大本科软件project专业 眼下大三; 本人博客:google搜索"cqs_2012"就可以; 个人 ...
- 自定义栈类型,具有找到站内最小元素的min函数 ,且min(),pop(),push()函数的时间复杂度为O(1)
基本思想: // 借助一个辅助栈,入栈时,若新元素比辅助栈栈顶元素小,则直接放入辅助站 // 反之,辅助站中放入次小元素(即辅助栈栈顶元素)====保证最小元素出栈时,次小元素被保存 static c ...
- JS中some()和every()和join()和concat()和pop(),push(),shift(),unshfit()和map()和filter()
一.Array 1.some()和every() some()是对数组中每一项运行指定函数,如果该函数对任一项返回true,则返回true. every()是对数组中的每一项运行给定函数,如果该函数对 ...
- mongo 修改器 $inc/$set/$unset/$pop/$push/$pull/$addToSet
mongo $inc 可以对集合里面的某些值是数字的增减.看代码 $set 可以进行修改,并且不存在的时候默认添加. 同时还能该变数据的类型. 还可以该变内嵌元素的值 用.调用 $unset 删除 ...
- js array filter pop push shift unshift方法
JavaScript Array filter() 方法 JavaScript Array 对象 实例 返回数组 ages 中所有元素都大于 18 的元素: var ages = [32, 33, ...
- <h2>js数组操作大全(pop,push,unshift,splice,shift方法)</h2>
---恢复内容开始--- shift:删除原数组第一项,并返回删除元素的值:如果数组为空则返回undefined var a = [1,2,3,4,5]; var b = a.shift(); //a ...
随机推荐
- MySQL 加密 压缩
许多MySQL加密和压缩函数返回结果可能包含任意字节值的字符串,如果要存储这些结果,请使用VARBINARY或BLOB二进制字符串数据类型.这将避免使用非二进制字符串数据类型(CHAR, VARCHA ...
- redis.rpm 安装
yum install jemalloc wget http://www6.atomicorp.com/channels/atomic/centos/6/x86_64/RPMS/redis-3.0.7 ...
- 《ORACLE数据库管理与开发》第三章学习之常用函数记录
<ORACLE数据库管理与开发>第三章学习之常用函数记录 注:文章中的*代表所要操作的列名 1.lower(*)/upper(*),将此列下的值转为小写/大写 2.initcap(*):把 ...
- 选择本地文件上传控件 input标签
当要通过控件来选择本地文件上传的时候的一种方式 <input type="file" id="input-file"/> 注意 type类型一定要是 ...
- Spring组件扫描--源码跟踪
看这篇文章之前可以先了解之前的跟踪流程,https://www.jianshu.com/p/4934233f0ead 代码过宽,可以shift + 鼠标滚轮 左右滑动查看 这篇文章主要跟踪spring ...
- MinGW 安装与简单实例
MinGW的下载 链接: https://pan.baidu.com/s/1JiZoyFHUWoeaxCQcUXCKgg 密码: myh3 MinGW的安装 基本上都是按提示的点击下一步操作 接下来修 ...
- js加密(十二)yy.com rsa
1. url: https://aq.yy.com/ 2. target: 登录js 3. 是一个简单的rsa加密,找到加密的js文件,全部复制出来,修改一下就好. 4. 和网页中的一样
- Quartz 调用
讲解 在线Cron表达式 调用(DLL下载) static void Main(string[] args) { //1.任务调度调用 //开启任务,操作数据,然后将数据广播给指定用户 //Cron表 ...
- 移动 web 开发问题和优化小结
1.前言 到目前为止,互联网行业里,手机越来越智能化,移动端占有的比例越来越高,尤其实在电商,新闻,广告,游戏领域.用户要求越来越高,网站功能越来越好,效果越来越炫酷,这就要求我们产品质量越来越高,w ...
- 17 Resources AssetBundle资源打包
Resources在Unity中可以使用www类加载远程文件或本地文件,或是在脚本中定义字段或数组从外部拖入. 在Unity中提供了Resources类读取资源要通过Resources类读取的文件必须 ...
