关于汇编语言栈的理解
2017-12-19 21:18
375 查看
栈就是一段特殊内存,什么是栈呢?举个例子,一个只有上面打开的盒子,现在有三本书离散数学、c语言、汇编语言,需要将这三本书一本一本的放进去,先将离散数学放进去,然后c语言,接着汇编语言,现在又需要将三本书拿出去,只能先拿汇编语言,再拿c语言接着再拿离散数学,栈就是这样的特点,后进先出。
栈的大小怎么确认呢?这是靠我们自己决定的,如何确定这段内存为栈,就需要两个寄存器,段寄存器ss和存放偏移地址的寄存器sp,比如我们决定10000-1000f为寄存器那么ss:sp 一开始应该为 1000:0010执行栈有两个指令push,pop,push是入栈执行过程是先sp+2之后在把数据放进去,pop指令是先出栈,先将指令放进栈接着再sp-2,就好像把东西放进去房间一样,需要先开门再把东西放进去,把东西拿出去,需要把东西拿出去再关门,东西就相当于需要操作的数据,开门和关门就相当于sp+2和sp-2。
栈最大为64kb,这和sp的寻址能力有关,比如10000-1ffff为栈,那么ss:sp一开始应该指向那里呢?按照之前的算法sp应该为ffff+1 = 10000但是sp只能储存4个字节所以sp = 0,当栈满了之后sp还是为0,这个时候再次入栈0-2 = fffffffe,所以sp = fffe,之后再次入栈的话就会将原数据给覆盖掉,所以要尽量避免这种情况。
栈的大小怎么确认呢?这是靠我们自己决定的,如何确定这段内存为栈,就需要两个寄存器,段寄存器ss和存放偏移地址的寄存器sp,比如我们决定10000-1000f为寄存器那么ss:sp 一开始应该为 1000:0010执行栈有两个指令push,pop,push是入栈执行过程是先sp+2之后在把数据放进去,pop指令是先出栈,先将指令放进栈接着再sp-2,就好像把东西放进去房间一样,需要先开门再把东西放进去,把东西拿出去,需要把东西拿出去再关门,东西就相当于需要操作的数据,开门和关门就相当于sp+2和sp-2。
栈最大为64kb,这和sp的寻址能力有关,比如10000-1ffff为栈,那么ss:sp一开始应该指向那里呢?按照之前的算法sp应该为ffff+1 = 10000但是sp只能储存4个字节所以sp = 0,当栈满了之后sp还是为0,这个时候再次入栈0-2 = fffffffe,所以sp = fffe,之后再次入栈的话就会将原数据给覆盖掉,所以要尽量避免这种情况。
相关文章推荐
- 关于Bean\Entity\Model\POJO的一些个人理解
- 关于BufferedReader的理解
- iPhone开发关于UDID和UUID的一些理解
- 关于事务的简单理解
- 关于对Selenium的理解
- 关于对RESTful的理解
- 关于js中函数参数“按值传递”的理解
- 关于对常见的几种排序的理解。
- 关于测试代码必须做以下几件事情的下厨做菜理解法。
- 关于activity的startActivityForResult / onActivityResult / setResult学习和理解
- 关于TCP和UDP有连接和无连接的理解, 以及服务器间通信原理
- 性能结果分析与理解(关于90%响应时间、图表等)
- 关于数组指针,指针数组,双重数组,二维矩阵,字符串数组,双重字符指针的理解
- 关于php中反射类的简单理解:如何拿到一个类的所有方法(public+protected+private)
- 黑马程序员——04 高新技术(一)关于正则表达式的理解和常用方法
- 关于REST理解
- 关于bitmap的一些理解
- 关于sendtoback()和bringtofront() 的理解
- 一篇关于Java正则表达式的理解
- 关于Spring事务<tx:annotation-driven/>的理解