电工学习网

 找回密码
 立即注册

堆栈操作指令

2015-3-22 08:43| 编辑:电工学习网| 查看: 41222| 评论: 0

堆栈是一个重要的数据结构,它具有 “ 先进后出 ” 的特点,通常用来保存程序的返回地址。它主要有两大类操作:进栈操作和出栈操作。
1 .进栈指令 PUSH
2 .出栈指令 POP

1  进栈指令 PUSH
 PUSH(Push Word or Doubleword onto Stack)
 语句格式: PUSH OPS
 功能:将寄存器、段寄存器或存储器中的一个字数据压入堆栈,堆栈指针减 2 。
即 :
 ① (SP)- 1→ SP (OPS)15~8 → [SP]
 ② (SP)- 1→ SP (OPS)7~0 → [SP]
 PUSH Imm ;80286+
 一个字进栈,系统自动完成两步操作: SP←SP-2 , (SP)← 操作数;  
 一个双字进栈,系统自动完成两步操作: ESP←ESP-4 , (ESP)← 操作数。  
  PUSHA(Push All General Registers)
 指令格式: PUSHA ;80286+
 其功能是依次把寄存器 AX 、 CX 、 DX 、 BX 、 SP 、 BP 、 SI 和 DI 等压栈。
  PUSHAD(Push All 32-bit General Registers)
 指令格式: PUSHAD ;80386+
 其功能是把寄存器 EAX 、 ECX 、 EDX 、 EBX 、 ESP 、 EBP 、 ESI 和 EDI 等压栈。
2  出栈指令 POP
POP(Pop Word or Doubleword off Stack)
 语句格式: POP OPD
 功能: 将栈顶元素弹出送至某一寄存器、段寄存器(除 CS 外)或存储器,堆栈指针加 2 。
 从 POP 指令功能可看出,该指令为 PUSH 指令的逆过程。
 即:
 ①( [SP] )→( OPD ) 7~0 ( SP ) + 1→ SP
 ②( [SP] )→( OPD ) 15~8 ( SP ) + 1→ SP
 弹出一个字,系统自动完成两步操作:操作数 ←(SP) , SP←SP-2 ;  
 弹出一个双字,系统自动完成两步操作:操作数 ←(ESP) , ESP←ESP-4 。  
  POPA(Pop All General Registers)
 指令格式: POPA ;80286+
 其功能是依次把寄存器 DI 、 SI 、 BP 、 SP 、 BX 、 DX 、 CX 和 AX 等弹出栈。其实,程序员不用记住它们的具体顺序,只要与指令 PUSHA 对称使用就可以了。
  POPAD(Pop All 32-bit General Registers)
 指令格式: POPAD ;80386+
 其功能是依次把寄存器 EDI 、 ESI 、 EBP 、 ESP 、 EBX 、 EDX 、 ECX 和 EAX 等弹出栈,它与 PUSHAD 对称使用即可。

看过《堆栈操作指令》的人还看了以下文章:

发表评论

最新评论

电工学习网 ( )

GMT+8, 2021-12-6 20:45

Powered by © 2011-2021 www.shop-samurai.com 版权所有 免责声明 不良信息举报

技术驱动未来! 电工学习网—专业电工基础知识电工技术学习网站。

栏目导航: 工控家园 | 三菱plc | 西门子plc | 欧姆龙plc | plc视频教程

返回顶部