`

Linux之push/pop的用法讲解

 
阅读更多
堆栈是存储器中专用的缓冲区,用于暂存寄存器数据或地址指针,push/pop就用于堆栈的操作,这两个指令一般用在:
1、子程序调用,为了保护现场,把所要用的寄存器中的内容先暂时保存起来,在子程序调用结束之前,按照先进后出的原则,把数据恢复。
2、有时候,需要临时用一下某些寄存器,也可用一下,凭个人喜好;
这两个指令必须成对使用(特殊用途除外),你只要压入了那些东西,并且知道他们的顺序就行了,所操作的是字符还是数据,就不用知道了。
堆栈操作指令
堆栈是一个先进后出的主存区域,位于堆栈段中,使用SS段寄存器记录器段地址。栈只有一个出口,即当前栈顶。栈顶是地址较小的一端(低端),它用堆栈指针寄存器SP指定。堆栈的两种基本操作,对应两条基本指令:
(1)、进栈指令push
push reg/mem/seg;sp<-sp-2,ss<-reg/mem/seg
进栈指令先使堆栈指令sp减2,然后把一个字操作数存入堆栈顶部。堆栈操作的对象只能是字操作数,进栈时底字节存放于低地址,高字节存放于高地址,sp相应向低地址移动两个字节单元。
push AX
PUSH [2000H]
PUSH CS
(2)、出栈指令pop
pop reg/seg/mem;reg/seg/mem<-ss:[sp],sp<-sp+2
出栈指令把栈顶的一个字传送至指定的目的操作数,然后堆栈指针sp加2。目的操作数应为字操作数,字从栈顶弹出时,低地址字节送低字节,高地址字节送高字节。
pop AX
POP [2000H]
POP SS堆栈可以用来临时存放数据,以便随时恢复它们。也常用于子程序见传递参数。
注意几点:
(1)、因为堆栈指针sp总是指向已经存入数据的栈顶(不是空单元),所以PUSH指令是将(SP)减2,后将内容压栈(即先修改SP是指指向空单元,后压入数据),而POP是先从栈顶弹出一个字,后将堆栈指针SP加2.
(2)、PUSH CS是合法的,但是POP CS是不合法的。
(3)、因为SP总是指向栈顶,而用PUSH和POP指令存取数时都是在栈顶进行的,所以堆栈是先进后出或叫后进先出的。栈底在高地址,堆栈是从高地址向低地址延伸的,所有栈底就是最初的栈顶。
(4)、用PUSH指令和POP指令时只能按字访问堆栈,不能按字节访问堆栈。
(5)、PUSH和POP指令都不影响标志。
转自:http://bbchylml1988.blog.51cto.com/1456746/316554
分享到:
评论

相关推荐

    adb push /adb pull工具

    【解决】当设备已root使用adb命令, 提示'adbd cannot run as root in production builds',adb push /adb pull 到系统目录 解决方案 解压密码:hkxgame.com

    Queue_栈队列_pop_

    任务描述栈和队列都提供 Push/Pop 两种操作,其中 Push:加入一个元素。Pop:弹出一个元素。给出一个线性结构的进出顺序,判定这个结构是栈还是队列。(40’) 输入描述第一行输入一个整数s,代表有s组测试数据。第一...

    支持中文路径push/pull的adb

    1.Windows下面对Android4.2.2系列的手机进行adb调试; 2.支持中文路径的push和pull; 3.感谢csdn网友"水的发毛"提供win下的编译版本;

    栈的相关操作PUSH、POP等

    栈的相关操作,工作以后做的第一个程序(C的),我练手的,虽然以前做过。留着纪念。

    FIFO.zip_fifo pop_fifo pop push_fifo push_fifo push怎么写_flush_fif

    FIFO管理,包括fifo_push,fifo_pop,fifo_flush等

    Go-pushover-Go封装PushoverAPI

    pushover - Go封装Pushover API

    swift-iOS自定义转场动画-push和pop

    iOS7.0后苹果提供了自定义转场动画的API,利用这些API我们可以改变 push和pop(navigation非模态),present和dismiss(模态),标签切换(tabbar)的默认转场动画。

    mongodb 修改器($inc/$set/$unset/$push/$pop/upsert)

    对于文档的更新除替换外,针对某个或多个文档只需要部分更新可使用原子的更新修改器,能够高效的进行文档更新。更新修改器是中特殊的键, 用来指定复杂的操作,比如增加、删除或者调整键,还可能是操作数组或者内嵌...

    Linux下Redis的安装和部署

    这些数据类型都支持push/pop、add/remove及取交集并集和差集及更丰富的操作。在此基础上,Redis支持各种不同方式的排序。 和Memcache一样,Redis数据都是缓存在计算机内存中,不同的是,Memcache只能将数据缓存到...

    数据结构:图解链表,用链表实现栈的Pop和Push(c语言版)

    数据结构:图解链表,用链表实现栈的Pop和Push(c语言版) 出栈以及入栈我们只要可虑栈顶就可以,所以我们就只考虑对栈顶就行插入和删除就可以,上代码 void Pop(SqStack* s,Elemtype data) { assert(s); if (s-&gt;...

    能在linux(epoll)运行基于C# .net standard2.0 写的socket框架,可使用于dotnet core程序集

    能在linux(epoll)运行基于C# .net standard2.0 写的socket框架,可使用dotnet core程序集 安装NuGet: https://www.nuget.org/packages/socket.core/ Package Manager: Install-Package socket.core .Net CLI :...

    供应链库存的RFID使能的Push/Pull控制策略优化 (2015年)

    为得到各策略的更优性能,采用基于仿真的粒子群优化方法对各策略参数进行了优化,验证了基于仿真的粒子群优化算法对优化RFID使能的Push/Pull混合控制策略的可行性和有效性,优化后各策略的仿真结果表明8种混合策略中...

    push和pop自定义动画

    效果请看:http://blog.csdn.net/dolacmeng/article/details/51873395

    Android wappush讲解

    因此,WAP PUSH实现了短信和WAP业务的结合,节省了您寻找业务的时间,方便您直接找到并使用自己喜 欢的业务。PUSH信息无论是否被用户打开,都会保留在手机 的"推入收件箱"内,用户可以重复打开。  wap push 的意思...

    Redis实战,详细讲解redis的使用方式

    这些数据类型都支持push/pop、add/remove及取交集并集和差集及更丰富的操作,而且这些操作都是原子性的。在此基础上,Redis支持各种不同方式的排序。与memcached一样,为了保证效率,数据都是缓存在内存中。区别的是...

    PUSH_POP:一个UINavigationController的分类,实现push或者pop的完成回调.以及一些特殊的push或者pop需求

    PUSH_POP一个UINavigationController的分类,实现push或者pop的完成回调.以及一些特殊的push或者pop需求

    pushpop-sendgrid:Pushpop 的 Sendgrid 插件

    安装将pushpop-sendgrid添加到您的 Gemfile: gem 'pushpop-sendgrid' 或将其安装为 gem: $ gem install pushpop-sendgrid用法sendgrid插件为您提供了一个 DSL 来指定典型的电子邮件参数。 下面是一个例子: ...

    helm-push_0.7.1_linux_amd64.tar.gz

    如果网络下载不了改文件...# tar zxvf helm-push_0.7.1_linux_amd64.tar.gz # mkdir -p /root/.local/share/helm/plugins/helm-push # chmod +x bin/* # mv bin plugin.yaml /root/.local/share/helm/plugins/helm-push

    Redis-for-windows-x64-2.8.2400

    这些数据类型都支持push/pop、add/remove及取交集并集和差集及更丰富的操作,而且这些操作都是原子性的。在此基础上,redis支持各种不同方式的排序。 官网下载速度超级慢,下了好久才成功,上传备用

Global site tag (gtag.js) - Google Analytics