栈的使用(push、pop详解)学习笔记

休克的原则
栈的使⽤(push、pop详解)学习笔记
关于文学的资料概念:
栈是⼀种数据结构,可以添加或者删除值,不过要遵循“后进先出”的原则。通过 push 操作把数据压⼊栈中,通过pop操作删除数据;它具有⼀个属性:弹出的值永远是最近被压⼊⽽且仍然在栈中的值。
栈可以实现为⼀个数组,总是从数组的⼀端插⼊和删除元素。这⼀端被称为栈顶。在x86-64中,程序栈存放在内存中某个区域。栈顶元素的地址是所有栈中元素地址中最低的。(根据惯例,我们的栈是倒过来画的,栈“顶”在图的底部。)栈指针%rsp保存着栈顶元素的地址。
PUSHQ与POPQ
pushq指令的功能是把数据压⼈到栈上,⽽ popq指令是弹出数据。这些指令都只有⼀个操作数-—压⼊的数据源和弹出的数据⽬的。
鄱阳湖经济区
美国中情局女局长将⼀个四字值压⼈栈中,⾸先要将栈指针减8,然后将值写到新的栈顶地址。因此,指令pushq %rbp的⾏为等价于(先改变栈顶指针再进栈)
1. subq $8,%rsp
20世纪重大发明
2. movq %rbp,(%rsp)
弹出⼀个四字的操作包括从栈顶位置读出数据,然后将栈指针加8。因此,指令popq%rax等价于(先出栈再改变栈顶指针)
2.addq $8,%rsp
当%rsp为 0x108,%rax为 0x123时,执⾏指令pushq %rax的效果。⾸先%rsp 会减8,得到0x100,然后会将0x123存放到内存地址0x100处。
执⾏指令popq %rdx的效果。先从内存中读出值0x123,再写到寄存器%rdx中,然后,寄存器%rsp的值将增加回到0x108。
如图:(说明:根据惯例,我们的栈是倒过来画的,因⽽栈“顶”在底部。x86-64中,栈向低地址⽅向增长,所以压栈是减⼩栈指针(寄存器%rsp)的值,并将数据存放到内存中,⽽出栈是从内存中读数据,并增加栈指针的值)
七月的天山教学设计

本文发布于:2024-09-21 01:41:22,感谢您对本站的认可!

本文链接:https://www.17tex.com/xueshu/648530.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:栈顶   数据   内存   地址   指针   元素   惯例
留言与评论(共有 0 条评论)
   
验证码:
Copyright ©2019-2024 Comsenz Inc.Powered by © 易纺专利技术学习网 豫ICP备2022007602号 豫公网安备41160202000603 站长QQ:729038198 关于我们 投诉建议