51单片机堆栈操作指令举例说明

发布者:CelestialMagic最新更新时间:2017-10-18 来源: eefocus关键字:51单片机  堆栈操作指令 手机看文章 扫描二维码
随时随地手机看文章

堆栈操作指令有两条:

PUSH direct 

POP direct 

第一条指令称之为推入,就是将direct中的内容送入堆栈中,第二条指令称之为弹出,就是将堆栈中的内容送回到direct中。推入指令的执行过程是,首先将SP中的值加1,然后把SP中的值当作地址,将direct中的值送进以SP中的值为地址的RAM单元中。例: 

MOV SP,#5FH 

MOV A,#100 

MOV B,#20 

PUSH ACC 

PUSH B 

则执行第一条PUSH ACC指令是这样的:将SP中的值加1,即变为60H,然后将A中的值送到60H单元中,因此执行完本条指令后, 内存60H单元的值就是100,同样,执行PUSH B时,是将SP+1,即变为61H,然后将B中的值送入到61H单元中,即执行完本条指令后,61H单元中的值变为20。 

POP指令的在单片机中执行是这样的,首先将SP中的值作为地址,并将此地址中的数送到POP指令后面的那个direct中,然后SP减1。 

接上例: 

POP B 

POP ACC 

则执行过程是:将SP中的值(现在是61H)作为地址,取61H单元中的数值(现在是20),送到B中,所以执行完本条指令后B中的值是20,然后将SP减1,因此本条指令执行完后,SP的值变为60H,然后执行POP ACC,将SP中的值(60H)作为地址,从该地址中取数(现在是100),并送到ACC中,所以执行完本条指令后,ACC中的值是100。



这有什么意义呢?ACC中的值本来就是100,B中的值本来就是20,是的,在本例中,的确没有意义,但在实际工作中,则在PUSH B后一般要执行其他指令,而且这些指令会把A中的值,B中的值改掉,所以在程序的结束,如果我们要把A和B中的值恢复原值,那么这些指令就有意义了。 

还有一个问题,如果我不用堆栈,比如说在PUSH ACC指令处用MOV 60H,A,在PUSH B处用指令MOV 61H,B,然后用MOV A,60H,MOV B,61H来替代两条POP指令,不是也一样吗?是的,从结果上看是一样的,但是从过程看是不一样的,PUSH和POP指令都是单字节,单周期指令,而MOV指令则是双字节,双周期指令。更何况,堆栈的作用不止于此,所以一般的计算机上都设有堆栈,单片机也是一样,而我们在编写子程序,需要保存数据时,常常也不采用后面的办法,而是用堆栈的办法来实现。 

例:写出以下单片机程序的运行结果 

MOV 30H,#12 

MOV 31H,#23 

PUSH 30H 

PUSH 31H 

POP 30H 

POP 31H 

结果是30H中的值变为23,而31H中的值则变为12。也就两者进行了数据交换。从这个例程能看出:使用堆栈时,入栈的书写次序和出栈的书写次序必须相反,才能保证数据被送回原位,不然就要出错了。


关键字:51单片机  堆栈操作指令 引用地址:51单片机堆栈操作指令举例说明

上一篇:不带进位的单片机加法指令ADD举例说明
下一篇:程序存储器向累加器A传送指令MOVC 举例说明

推荐阅读最新更新时间:2024-03-16 15:40

C51单片机————中断系统
51单片机中断系统 CPU和外设之间的速度差异太大,CPU跑的太快了,外设追不上,机器的内部也可能出现突发事件。那怎么办?所以引入中断技术呀。 那什么是中断哇? CPU和外设并行工作,有突发事件或者外设要给CPU请安的时候,外设就发一个信号给CPU,CPU就去见见外设见面完了CPU又回来干自己的事情。这个过程就是中断! 中断源? 中断申请的来源(就是说是哪一个外设发起了中断) 中断优先级 万一有几个外设来找CPU,我们怎么办喃?那我们就给他门排个顺序,CPU先见排在前面的。这个顺序就是他的优先级。 那顺序咋个定喃? 那你要事先安排好咯! 中断源 C51一共有5个中断源(C52有6个) 中断控制有关寄存器 中
[单片机]
C<font color='red'>51单片机</font>————中断系统
51单片机-按键&蜂鸣器&数码管
在上一讲的代码中我们可以不用写“sbit GND = P2^3;”,像宋老师那样直接在开头“P2 = 0xF7;”仅让P2.3输出0其他输出1即可,这样P2.7就有被拉低的条件了。 1.趁热打铁 沿袭上一讲的功能,我们新学的按键知识需要结合所学过的无源蜂鸣器硬件一起捣鼓玩玩。同上一讲的代码功能一样,这次用的是无源蜂鸣器,按键按下时,蜂鸣器就响,松开不按时就不响。 2.分析 我们先缕缕思路,显然无源蜂鸣器要想鸣叫,就不能像“LED2=KEY4;”这样赋值的方式。我们已经知道,在P2.3输出低电平的情况下,K4按下的时候程序中KEY4就等于0,松开不按时KEY4等于1。 这里可以在主函数中的死循环里用“if(KEY4==0
[单片机]
51单片机C语言教程(七) 表达式2
关系运算符   对于关系运算符,同样我们也并不陌生。C中有六种关系运算符,这些家伙同样是在小时候学算术时学习过的:   > 大于   < 小于   >= 大于等于   <= 小于等于   == 等于   != 等于   或者你是个非C程序员,那么对前四个一定是再熟悉不过的了。而 == 在VB或PASCAL等中是用 = , != 则是用 not 。由于工作关系我自己要使用好几种的程序语言,所以有时也会头晕搞错。老了咯 :P 小学时的数学课就教授过运算符是有优先级别的,计算机的语言也不过是人类语言的一种扩展,这里的运算符同样有着优先级别。前四个具有相同的优先级,后两个也具有相同的优先级,但是前四个的优先级要高于后2个的。 当两个表达式
[单片机]
<font color='red'>51单片机</font>C语言教程(七) 表达式2
TMS320VC5402的HPI与51单片机的接口设计
0 引言 TMS320VC5402是TI公司推出的性价比极高的定点数字信号处理器(DSP)。它具有先进的多总线结构(三条16位数据存储器总线和一条程序存储器总线);其数据/程序寻址空间为1 M×16 bit: 内置4 k×16 bitP/DROM和16 k×16 bit-DARAM;此外,该DSP内含两个多通道缓冲串行口,一个8位并行与外部处理器通信的HPI口,2个16位定时器以及6通道DMA控制器;具有低功耗,适合电池供电设备等特点 。 51系列单片机是一种很经典的单片机。20多年来一直久盛不衰。而且Intel通过授权5l内核,目前已出现了很多第三方生产的51系列产品。这些产品一般都具有较高的时钟频率和较大的存储空间,而且还
[单片机]
51单片机对SAA7113初始化和控制的程序
  用51单片机对7113初始化和控制   SAA7113的初始化就是对寄存器配置合适的参数,使其能够有符合要求的输出。寄存器配置通过I2C总线来进行,很多可以控制I2C总线的器件都可以作为主器件对7113进行初始化,这里介绍用51单片机初始化7113的例子。   51单片机和7113的硬件连接非常简单,只要把单片机的两个I/O口(如P1.0、P1.0)直接和7113的SCL、SDA管脚相连,再加上上拉电阻即可。   用单片机初始化7113的主要任务是程序的编写,首先要熟悉I2C总线协议,根据I2C总线的原理写出启动、停止、应答信号等的子程序,由子程序再写出发送、接收1个字节的程序,然后根据7113的寄存器操作格式写出读写寄
[单片机]
51单片机教程ADC0809模数转换
//MCU:AT89S51 //晶振:12M //采用查询方式读AD转换后的值 #include reg52.h #include math.h #include intrins.h unsigned char code numcode ={ 0xc0,0xf9,0xa4,0xb0,0x99, 0x92,0x82,0xf8,0x80,0x90, 0xC1,0XB7,0xFF };//数字0~9及 U= 共阳数码管代码 unsigned char code dot_numcode ={0X40,0X79,0X24,0X30,0X19, 0X12,0X02,0X78,0X00,0X10 };//带数点的0~9共阳
[单片机]
MCS - 51单片机寄存器功能
21个特殊功能寄存器(52系列是26个)不连续地分布在128个字节的SFR存储空间中,地址空间为80H-FFH,在这片SFR空间中,包含有128个位地址空间,地址也是80H-FFH,但只有83个有效位地址,可对11个特殊功能寄存器的某些位作位寻址操作(这里介绍一个技巧:其地址能被8整除的都可以位寻址)。 在51单片机内部有一个CPU用来运算、控制,有四个并行I/O口,分别是P0、P1、P2、P3,有ROM,用来存放程序,有RAM,用来存放中间结果,此外还有定时/计数器,串行I/O口,中断系统,以及一个内部的时钟电路。在单片机中有一些独立的存储单元是用来控制这些器件的,被称之为特殊功能寄存器(SFR)。这样的特殊功能寄存器51单片机
[单片机]
MCS - <font color='red'>51单片机</font>寄存器功能
8051单片机中DPTR的扩展设计
摘要 首先对比分析在执行大规模数据转移时,传统8051单片机和进行DPTR扩展后的8051单片机在数据转移执行效率上的差别。通过详细分析DPTR操作所涉及的因素,具体实现对DPTR的扩展,并进行实际仿真测试。 关键词 8051单片机 DPTR 数据转移执行效率   单片机的出现是计算机技术发展史上的一个里程碑,它使计算机从海量数值计算进入到控制领域。在单片机中,以8051系列最为经典,至今仍是最普及、广泛使用的8位MCU架构。业界许多技术人员在其基础上不断进行性能扩展,使得8051系列芯片不断完善,从而形成一个庞大的体系。在传统的 8051 系列单片机中,设置了一组双字节寄存器(数据指针DPTR),用于访问外接的64 KB数据
[工业控制]
80<font color='red'>51单片机</font>中DPTR的扩展设计
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved