主题:[讨论]有点晕
yjjdwww
[专家分:160] 发布于 2006-10-30 15:33:00
我对堆栈的使用不是很了解
尤其是使用PUSH与POP后寄存器与堆栈中值的变化
请高手赐教//////[em2]
回复列表 (共2个回复)
沙发
天空未蓝 [专家分:360] 发布于 2006-10-31 21:16:00
堆栈是计算机中一种先进后出的数据结构,由栈区和栈顶指针组成。在80X86/PENTIUM微处理器中,栈区由SS知识,栈顶由SS:SP或SS:ESP指示。
堆栈有两种操作:压栈(进栈)和弹栈(出栈),均只能在栈顶进行。压栈,栈顶向低地址方向调整;弹栈时,向高地址方向调整。
1压栈指令 PUSH
指令格式:PUSH 源操作数
指令功能时将源操作数压入堆栈。源操作数可以时16位或者32位通用寄存器和存储器,也可以时段寄存器,80386以上的微机,还可以是16位或者32位的立即数。执行PUSH指令时,CPU根据操作数长度,先将栈顶指针(E)SP减2(对16位操作数)或者减4(对32位操作数),指向新的栈顶,再将源操作数送SS:(E)SP所指的存储单元。即执行操作:
((E)SP)-4/2 ——(E)SP,(源操作数)——[SS:(E)SP]
2弹栈指令 POP
指令格式:POP 目的操作数
指令功能是将SS:(E)SP所指示的栈顶元素弹至目的操作数,再根据操作数长度调整栈顶指针(E)SP(加2或者加4)。即执行操作:
([SS:(E)SP]——目的操作数,((E)SP)+2/4——(E)SP
目的操作数可以是16位或者32位通用寄存器,也可以是除CS以外的段寄存器。
板凳
Dancing [专家分:70] 发布于 2006-10-31 21:37:00
^^8懂
初级阶段
我来回复