10.6对栈进行push和pop
程序运行时,会在内存上申请分配一个称为栈的数据空间。栈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方式。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 从HTTP原因短语缺失研究HTTP/2和HTTP/3的设计差异
· 三行代码完成国际化适配,妙~啊~