堆栈是内存中一段连续的存储区域,用来保存一些临时的数据,比如,可以保存中断指令INT中的标志寄存器值、代码段寄存器CS值、指令指针寄存器IP值;还可以用以RET指令从中可以得到返回的地址;堆栈还可以保存其他的数据等等。在汇编语言中堆栈操作由PUSH、POP两条指令来完成。它的操作数均为子类型[两个字节]进行操作。程序内存可以分为:堆区、栈区、全局区、程序代码区、文字常亮区。在一个程序编译完后,已经为全局变量、静态变量分配好内存空间,所以在函数运行的时候,程序内存要为局部变量非配好栈空间,当中断来时,也需要把函数指针入栈,用来保护当前的情况(保护现场),以便于中断处理完之后可以再回到之前的函数。栈是从高到低的分配或者说先进后出(就像子弹夹),堆是从低到高的分配(就是先到先买,后到后买)。在一般的交谈中我们所说的堆栈默认为栈(子弹夹)。然而,堆栈可以分为硬堆栈和软堆栈,硬堆栈就是SP(stack pointer栈顶元素的下一个位置,所以数据入栈的时候,SP先加1,再压入数据,出栈时,数据先出,然后SP再减1),软堆栈就是在硬堆栈和全局变量区之间的空间。我们知道,单片机在启动的时候,不需要使用bootlloader将代码从ROM搬移到ARM,但是ARM则需要使用bootlloader将代码搬移。所以我们可以从单片机的执行步骤(获取执行指令—分析指令—执行指令);获取指令的过程就是根据上位机的值从程序存储器读出指令,送到指令寄存器,然后去分析指令,这样单片机就从内部程序存储器取到代码指令,从RAM存或获取相关的数据。我们知道RAM(随机存取存储器)的存取数据的速度高于ROM(只读存储器)的速度,而一般的单片机的运行频率不太高,所以从ROM获取指令慢并不受影响,但是RAM就不一样了,CPU运行的频率高,速度比ROM快,所以一般的操作系统,都会将代码部分拷贝到RAM中在执行,这样才可以使其运行速率更快。
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
全部0条评论
快来发表一下你的评论吧 !