push/pop堆栈指令
来源:互联网 发布:电脑淘宝卖家中心 编辑:程序博客网 时间:2024/05/20 23:56
堆栈是存储器中专用的缓冲区,用于暂存寄存器数据或地址指针,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指令都不影响标志。
0 0
- push/pop堆栈指令
- 2017-11-15 深刻理解堆栈及PUSH POP指令
- 堆栈初始化,POP,PUSH()
- 数据传输指令--push、pop
- 堆栈的push, pop操作...
- 堆栈PUSH、POP 自测体会
- PUSH、POP和XCHG指令
- add、sub指令 | pop、push指令
- ARM 指令集 之 PUSH and POP
- 使用链表定义堆栈,实现pop,push
- PUSH/POP
- Push, Pop, call, leave 和 Ret 指令图解
- 8086汇编语言 push,pop指令执行时,sp怎么变
- Push, Pop, call, leave 和 Ret 指令图解
- 数字电路设计之ARM的thumb指令中的POP和PUSH指令
- 实现一堆栈,要求三个操作,Pop,Push,GetMaxValue,时间均为O(1)
- 设计一个堆栈,函数min、push 以及pop 的时间复杂度都是O(1)
- 实现一堆栈,要求三个操作,Pop,Push,GetMaxValue,时间均为O(1)
- php中文件上传$_FILES 的错误代码
- android 索引的实现
- HTTP 的 幂等性
- 设计模式_1_简单工厂模式
- nginx配置:(一)基本配置与参数说明(转载)
- push/pop堆栈指令
- Nginx 反向代理、负载均衡、页面缓存、URL重写及读写分离详解
- Java模拟银行转账(操作事务)
- iOS开发 iOS10推送必看(基础篇)
- IntelliJ IDEA导入eclipse Web项目
- B/S网络架构
- 计算机网络:第二章-物理层
- 借助Calendar实现timestamp的追加时长
- SharePoint 2016 Office Web Apps Server 更名为 Office Online Server