栈在程序中的作用(ARM结构)
2015-11-09 20:06
274 查看
大家肯定学习过了栈这一结构,也知道栈的基本特性,可是栈如何在程序中起作用,特别是C语言中,是不多的。所以今天就来分享一下栈在程序中的作用。
首先读这篇文章之前,读者首先要了解两个基本的概念。
1、根据SP指针指向的位置,栈可以分为满栈和空栈
(1)满栈: 堆栈指针SP总是指向最后压入堆栈的数据。
(2)空栈:
堆栈指针SP总是指向下一个将要放入数据的空位置。
2、根据SP指针移动的方向,栈可以分为升栈和降栈
(1)升栈:
随着数据的入栈,SP指针从低地址——>高地址
(2)降栈:
随着数据的入栈,SP指针从高地址——>低地址
ARM采用的是 满降栈。
下面是一个栈在程序运用中的实例
第一排为源代码,第二排为汇编代码,第三排为注释
1.主函数
![](https://img-blog.csdn.net/20151109204441493?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
2 子函数
![](https://img-blog.csdn.net/20151109204401852?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
总结: 从以上实例看出,栈在程序中作用有传递参数,保存寄存器的值和保存局部变量。 在传递参数的过程中,如果传递参数少于四个,则直接用寄存器传递。若传递参数多于四个,则使用寄存器+内存传递。
大家可以把SP指针和FP指针的移动结合内存示意图来更好理解栈在程序的应用。
首先读这篇文章之前,读者首先要了解两个基本的概念。
1、根据SP指针指向的位置,栈可以分为满栈和空栈
(1)满栈: 堆栈指针SP总是指向最后压入堆栈的数据。
(2)空栈:
堆栈指针SP总是指向下一个将要放入数据的空位置。
2、根据SP指针移动的方向,栈可以分为升栈和降栈
(1)升栈:
随着数据的入栈,SP指针从低地址——>高地址
(2)降栈:
随着数据的入栈,SP指针从高地址——>低地址
ARM采用的是 满降栈。
下面是一个栈在程序运用中的实例
第一排为源代码,第二排为汇编代码,第三排为注释
1.主函数
2 子函数
总结: 从以上实例看出,栈在程序中作用有传递参数,保存寄存器的值和保存局部变量。 在传递参数的过程中,如果传递参数少于四个,则直接用寄存器传递。若传递参数多于四个,则使用寄存器+内存传递。
大家可以把SP指针和FP指针的移动结合内存示意图来更好理解栈在程序的应用。
相关文章推荐
- Lua和C语言的交互详解
- 关于C语言中参数的传值问题
- 简要对比C语言中三个用于退出进程的函数
- 深入C++中API的问题详解
- 基于C语言string函数的详解
- C语言中fchdir()函数和rewinddir()函数的使用详解
- C语言内存对齐实例详解
- C++基于栈实现铁轨问题
- 使用C语言判断英文字符大小写的方法
- c语言实现的带通配符匹配算法
- C语言实现顺序表基本操作汇总
- C语言中计算正弦的相关函数总结
- 使用C语言详解霍夫曼树数据结构
- 探讨C语言的那些小秘密之断言
- C语言实现BMP转换JPG的方法
- 深入探讨C语言中局部变量与全局变量在内存中的存放位置
- C语言查找数组里数字重复次数的方法
- C语言泛型编程实例教程
- C语言中使用lex统计文本文件字符数
- 在C语言中转换时间的基本方法介绍