汇编语言数据传送指令之堆栈操作指令

本文详细介绍了IA-32处理器中的堆栈操作指令,包括进栈指令PUSH和出栈指令POP的工作原理,以及堆栈溢出的影响。PUSH通过减少ESP指针将数据压入堆栈,而POP则将栈顶数据弹出并增加ESP。此外,还提到了地址传送指令LEA和其他特殊传送指令的应用。
摘要由CSDN通过智能技术生成
  • 堆栈操作指令

处理器通常用硬件支持堆栈 (Stack) 数据结构, 它是一个按“先进后出" (First In LastOut, FILO) 存取原则组织的存储区域, 也可以说是 “后进先出" (Last In First Out, LIFO) 存取原则。 堆栈具有两种基本操作, 对应两条基本指令: 数据压进堆栈操作对应进栈指令PUSH; 数据弹出堆栈操作对应出栈指令 POP。
IA-32处理器的堆栈建立在主存区域中, 使用SS段寄存器指向段基地址。 堆栈段的范围由堆栈指针寄存器 ESP 的初值确定, 这个位置就是堆栈底部 (不再变化)。 堆栈只有一个数据出人口, 即当前栈顶 (不断变化), 由堆栈指针寄存器ESP 的当前值指定栈顶的偏移地址, 随着数据进人堆栈, ESP逐渐减小; 而随着数据依次弹出堆栈,ESP逐渐增大。 随着ESP增大, 弹出的数据不再属于当前堆栈区域, 随后进入堆栈的数据也会占用这个存储空间。 当然, 如果进人堆栈的数据超出了设置的堆栈范围, 或者已无数据可以弹出 (即 ESP增大到栈底), 就会产生堆栈溢出错误。 堆栈溢出, 轻者使程序出错,重者会导致系统崩溃。
IA-32处理器的堆栈是“向下生长的”,也就是说随着数据进栈,ESP指针会逐渐减小

  1. 1、 进栈指针PUSH

进栈指令PUSH先将ESP减小作为当前栈顶,然后可以将立即数,通用寄存器和段寄存器或存储器操作数传送到当前栈顶,由于目的位置是栈顶,所以由 ESP确定push只表达源操作数。 格式是:
PUSHr16/m16/i16/seg:ESP=ESP-2,SS[ESP]=r16/m16/i16/seg
PUSH r32/m32/i32:ESP=ESP-4,SS:[ESP]=r32/m32/i32
IA-32处理器的堆栈只能以字或双字为单位操作. 字量效据进栈时, ESP 向低地址移动两个字节单元指向当前栈顶,双字数据进栈,ESP减4即准备4个字节数据以 “低对低, 高对高” 的小端方式存放

  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值