程序运行时,会在内存上申请分配一个称为栈的数据空间。栈stack)有“干草堆积如山”的意思。就如该名称所表示的那样,数据在存储时是从内存的下层(大的地址编号 )逐渐往上层(小的地址编号)累积,读出时则是按照从上往下的顺利进行(图 10-3 )的。
栈是存储临时数据的区域,它的特点是通过 push 指令和 pop 指令进行数据的存储和读出。往栈中存储数据称为“人栈”,从栈中读出数据称为“出栈”。32位x86系列的 CPU 中,进行1次 push 或 pop,即可处理 32位(4字节)的数据。
push 指令和 pop 指令中只有一个操作数。该操作数表示的是“push的是什么及 pop 的是什么”,而不需要指定“对哪一个地址编号的内存进行 push 或 pop”。这是因为,对栈进行读写的内存地址是由 esp 寄存器(栈指针 )进行管理的。push 指令和 pop 指令运行后,esp 寄存器的值会自动进行更新( push 指令是 -4,pop 命令是 +4 ),因而程序员就没有必要指定内存地址了。
代码清单 10-2 中多次用到了 push 指令和 pop 指令。push 指令运行后,操作数中指定的值就会被自动 push 入栈,pop 指令运行后,最后存储在栈中的值就会被 pop 到指定的操作数中出栈。就如第 4 章中所介绍的那样,这种数据的存储顺序称为 LIFO(Last In First Out方式。
标签:对栈,存储,操作数,pop,指令,push,数据 From: https://www.cnblogs.com/z1218/p/17099645.html