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方式。

posted @   嘎嘎鸭~  阅读(249)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 从HTTP原因短语缺失研究HTTP/2和HTTP/3的设计差异
· 三行代码完成国际化适配,妙~啊~
点击右上角即可分享
微信分享提示